feat(wifi): wpa-eap support (#1449)

This commit is contained in:
Alfredo Monclus
2024-08-25 00:38:20 -03:00
committed by GitHub
parent c9af4fc3c3
commit fca09e6004
2 changed files with 64 additions and 16 deletions

View File

@@ -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"),

View File

@@ -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