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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 64 additions and 16 deletions

View File

@ -219,8 +219,9 @@ class SdbusNm:
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)
logging.debug(f"Adding network of type: {security_type}")
if security_type is None:
return {"error": "network_not_found", "message": _("Network not found")}
@ -268,11 +269,13 @@ class SdbusNm:
}
elif "802.1x" in security_type:
properties["802-11-wireless-security"] = {
"key-mgmt": ("s", "ieee8021x"),
"wep-key-type": ("u", 2),
"wep-key0": ("s", psk),
"auth-alg": ("s", "shared"),
"key-mgmt": ("s", "wpa-eap"),
"eap": ("as", [eap_method]),
"identity": ("s", identity),
"password": ("s", psk),
}
if phase2:
properties["802-11-wireless-security"]["phase2_auth"] = ("s", phase2)
elif "WEP" in security_type:
properties["802-11-wireless-security"] = {
"key-mgmt": ("s", "none"),

View File

@ -195,7 +195,13 @@ class Panel(ScreenPanel):
def add_new_network(self, widget, ssid):
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:
self._screen.show_popup_message(result["message"])
if result["error"] == "psk_invalid":
@ -204,6 +210,12 @@ class Panel(ScreenPanel):
self.connect_network(widget, ssid, showadd=False)
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):
if self.show_add:
self.close_add_network()
@ -218,7 +230,7 @@ class Panel(ScreenPanel):
self.content.remove(child)
self.content.add(self.labels['main_box'])
self.content.show()
for i in ['add_network', 'network_psk']:
for i in ['add_network', 'network_psk', 'network_identity']:
if i in self.labels:
del self.labels[i]
self.show_add = False
@ -260,7 +272,25 @@ class Panel(ScreenPanel):
if "add_network" in self.labels:
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'].connect("activate", self.add_new_network, ssid)
self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard)
@ -269,16 +299,31 @@ class Panel(ScreenPanel):
save.set_hexpand(False)
save.connect("clicked", self.add_new_network, ssid)
box = Gtk.Box()
box.pack_start(self.labels['network_psk'], True, True, 5)
box.pack_start(save, False, False, 5)
user_label = Gtk.Label(label=_("User"), hexpand=False, no_show_all=True)
auth_grid = Gtk.Grid()
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,
hexpand=True, vexpand=True)
self.labels['add_network'].pack_start(label, True, True, 5)
self.labels['add_network'].pack_start(box, True, True, 5)
if self.sdbus_nm.get_security_type(ssid) == "802.1x":
user_label.show()
self.labels['network_eap_method'].show()
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.content.show_all()
self.show_add = True