feat(wifi): wpa-eap support (#1449)
This commit is contained in:
@@ -219,8 +219,9 @@ class SdbusNm:
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
def add_network(self, ssid, psk):
|
def add_network(self, ssid, psk, eap_method, identity="", phase2=None):
|
||||||
security_type = self.get_security_type(ssid)
|
security_type = self.get_security_type(ssid)
|
||||||
|
logging.debug(f"Adding network of type: {security_type}")
|
||||||
if security_type is None:
|
if security_type is None:
|
||||||
return {"error": "network_not_found", "message": _("Network not found")}
|
return {"error": "network_not_found", "message": _("Network not found")}
|
||||||
|
|
||||||
@@ -268,11 +269,13 @@ class SdbusNm:
|
|||||||
}
|
}
|
||||||
elif "802.1x" in security_type:
|
elif "802.1x" in security_type:
|
||||||
properties["802-11-wireless-security"] = {
|
properties["802-11-wireless-security"] = {
|
||||||
"key-mgmt": ("s", "ieee8021x"),
|
"key-mgmt": ("s", "wpa-eap"),
|
||||||
"wep-key-type": ("u", 2),
|
"eap": ("as", [eap_method]),
|
||||||
"wep-key0": ("s", psk),
|
"identity": ("s", identity),
|
||||||
"auth-alg": ("s", "shared"),
|
"password": ("s", psk),
|
||||||
}
|
}
|
||||||
|
if phase2:
|
||||||
|
properties["802-11-wireless-security"]["phase2_auth"] = ("s", phase2)
|
||||||
elif "WEP" in security_type:
|
elif "WEP" in security_type:
|
||||||
properties["802-11-wireless-security"] = {
|
properties["802-11-wireless-security"] = {
|
||||||
"key-mgmt": ("s", "none"),
|
"key-mgmt": ("s", "none"),
|
||||||
|
@@ -195,7 +195,13 @@ class Panel(ScreenPanel):
|
|||||||
|
|
||||||
def add_new_network(self, widget, ssid):
|
def add_new_network(self, widget, ssid):
|
||||||
self._screen.remove_keyboard()
|
self._screen.remove_keyboard()
|
||||||
result = self.sdbus_nm.add_network(ssid, self.labels['network_psk'].get_text())
|
psk = self.labels['network_psk'].get_text()
|
||||||
|
identity = self.labels['network_identity'].get_text()
|
||||||
|
eap_method = self.get_dropdown_value(self.labels['network_eap_method'])
|
||||||
|
phase2 = self.get_dropdown_value(self.labels['network_phase2'])
|
||||||
|
logging.debug(f"{phase2=}")
|
||||||
|
logging.debug(f"{eap_method=}")
|
||||||
|
result = self.sdbus_nm.add_network(ssid, psk, eap_method, identity, phase2)
|
||||||
if "error" in result:
|
if "error" in result:
|
||||||
self._screen.show_popup_message(result["message"])
|
self._screen.show_popup_message(result["message"])
|
||||||
if result["error"] == "psk_invalid":
|
if result["error"] == "psk_invalid":
|
||||||
@@ -204,6 +210,12 @@ class Panel(ScreenPanel):
|
|||||||
self.connect_network(widget, ssid, showadd=False)
|
self.connect_network(widget, ssid, showadd=False)
|
||||||
self.close_add_network()
|
self.close_add_network()
|
||||||
|
|
||||||
|
def get_dropdown_value(self, dropdown, default=None):
|
||||||
|
tree_iter = dropdown.get_active_iter()
|
||||||
|
model = dropdown.get_model()
|
||||||
|
result = model[tree_iter][0]
|
||||||
|
return result if result != "disabled" else None
|
||||||
|
|
||||||
def back(self):
|
def back(self):
|
||||||
if self.show_add:
|
if self.show_add:
|
||||||
self.close_add_network()
|
self.close_add_network()
|
||||||
@@ -218,7 +230,7 @@ class Panel(ScreenPanel):
|
|||||||
self.content.remove(child)
|
self.content.remove(child)
|
||||||
self.content.add(self.labels['main_box'])
|
self.content.add(self.labels['main_box'])
|
||||||
self.content.show()
|
self.content.show()
|
||||||
for i in ['add_network', 'network_psk']:
|
for i in ['add_network', 'network_psk', 'network_identity']:
|
||||||
if i in self.labels:
|
if i in self.labels:
|
||||||
del self.labels[i]
|
del self.labels[i]
|
||||||
self.show_add = False
|
self.show_add = False
|
||||||
@@ -260,7 +272,25 @@ class Panel(ScreenPanel):
|
|||||||
if "add_network" in self.labels:
|
if "add_network" in self.labels:
|
||||||
del self.labels['add_network']
|
del self.labels['add_network']
|
||||||
|
|
||||||
label = Gtk.Label(label=_("PSK for") + f' {ssid}', hexpand=False)
|
eap_method = Gtk.ComboBoxText(hexpand=True)
|
||||||
|
for method in ("peap", "ttls", "pwd", "leap", "md5"):
|
||||||
|
eap_method.append(method, method.upper())
|
||||||
|
self.labels['network_eap_method'] = eap_method
|
||||||
|
eap_method.set_active(0)
|
||||||
|
|
||||||
|
phase2 = Gtk.ComboBoxText(hexpand=True)
|
||||||
|
for method in ("mschapv2", "gtc", "pap", "chap", "mschap", "disabled"):
|
||||||
|
phase2.append(method, method.upper())
|
||||||
|
self.labels['network_phase2'] = phase2
|
||||||
|
phase2.set_active(0)
|
||||||
|
|
||||||
|
auth_selection_box = Gtk.Box(no_show_all=True)
|
||||||
|
auth_selection_box.add(self.labels['network_eap_method'])
|
||||||
|
auth_selection_box.add(self.labels['network_phase2'])
|
||||||
|
|
||||||
|
self.labels['network_identity'] = Gtk.Entry(hexpand=True, no_show_all=True)
|
||||||
|
self.labels['network_identity'].connect("focus-in-event", self._screen.show_keyboard)
|
||||||
|
|
||||||
self.labels['network_psk'] = Gtk.Entry(hexpand=True)
|
self.labels['network_psk'] = Gtk.Entry(hexpand=True)
|
||||||
self.labels['network_psk'].connect("activate", self.add_new_network, ssid)
|
self.labels['network_psk'].connect("activate", self.add_new_network, ssid)
|
||||||
self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard)
|
self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard)
|
||||||
@@ -269,16 +299,31 @@ class Panel(ScreenPanel):
|
|||||||
save.set_hexpand(False)
|
save.set_hexpand(False)
|
||||||
save.connect("clicked", self.add_new_network, ssid)
|
save.connect("clicked", self.add_new_network, ssid)
|
||||||
|
|
||||||
box = Gtk.Box()
|
user_label = Gtk.Label(label=_("User"), hexpand=False, no_show_all=True)
|
||||||
box.pack_start(self.labels['network_psk'], True, True, 5)
|
auth_grid = Gtk.Grid()
|
||||||
box.pack_start(save, False, False, 5)
|
auth_grid.attach(user_label, 0, 0, 1, 1)
|
||||||
|
auth_grid.attach(self.labels['network_identity'], 1, 0, 1, 1)
|
||||||
|
auth_grid.attach(Gtk.Label(label=_("Password"), hexpand=False), 0, 1, 1, 1)
|
||||||
|
auth_grid.attach(self.labels['network_psk'], 1, 1, 1, 1)
|
||||||
|
auth_grid.attach(save, 2, 0, 1, 2)
|
||||||
|
|
||||||
self.labels['add_network'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5, valign=Gtk.Align.CENTER,
|
if self.sdbus_nm.get_security_type(ssid) == "802.1x":
|
||||||
hexpand=True, vexpand=True)
|
user_label.show()
|
||||||
self.labels['add_network'].pack_start(label, True, True, 5)
|
self.labels['network_eap_method'].show()
|
||||||
self.labels['add_network'].pack_start(box, True, True, 5)
|
self.labels['network_phase2'].show()
|
||||||
|
self.labels['network_identity'].show()
|
||||||
|
auth_selection_box.show()
|
||||||
|
|
||||||
self.content.add(self.labels['add_network'])
|
self.labels['add_network'] = Gtk.Box(
|
||||||
|
orientation=Gtk.Orientation.VERTICAL, spacing=5, valign=Gtk.Align.CENTER,
|
||||||
|
hexpand=True, vexpand=True
|
||||||
|
)
|
||||||
|
self.labels['add_network'].add(Gtk.Label(label=_("Connecting to %s") % ssid))
|
||||||
|
self.labels['add_network'].add(auth_selection_box)
|
||||||
|
self.labels['add_network'].add(auth_grid)
|
||||||
|
scroll = self._gtk.ScrolledWindow()
|
||||||
|
scroll.add(self.labels['add_network'])
|
||||||
|
self.content.add(scroll)
|
||||||
self.labels['network_psk'].grab_focus_without_selecting()
|
self.labels['network_psk'].grab_focus_without_selecting()
|
||||||
self.content.show_all()
|
self.content.show_all()
|
||||||
self.show_add = True
|
self.show_add = True
|
||||||
|
Reference in New Issue
Block a user