Implement password

This commit is contained in:
takotori 2023-12-03 13:35:33 +01:00
parent 205413a0c6
commit cee96a0678
5 changed files with 96 additions and 42 deletions

View file

@ -84,7 +84,7 @@ impl WifiEntry {
let selfImp = self.imp(); let selfImp = self.imp();
selfImp.resetWifiEditButton.connect_clicked(clone!(@ weak selfImp, @ weak wifiBox => move |_| { selfImp.resetWifiEditButton.connect_clicked(clone!(@ weak selfImp, @ weak wifiBox => move |_| {
let _option = getConnectionSettings(selfImp.accessPoint.borrow().associated_connection.clone()); let _option = getConnectionSettings(selfImp.accessPoint.borrow().associated_connection.clone());
wifiBox.resetWifiNavigation.push(&*WifiOptions::new(_option)); wifiBox.resetWifiNavigation.push(&*WifiOptions::new(_option, selfImp.accessPoint.borrow().dbus_path.clone()));
})); }));
} }
} }

View file

@ -1,14 +1,18 @@
use std::net::{Ipv4Addr, Ipv6Addr}; use std::net::{Ipv4Addr, Ipv6Addr};
use std::str::FromStr; use std::str::FromStr;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration;
use adw::glib; use adw::{gio, glib};
use adw::glib::Object; use adw::glib::Object;
use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt}; use adw::prelude::{ActionRowExt, ComboRowExt, PreferencesGroupExt};
use adw::subclass::prelude::ObjectSubclassIsExt; use adw::subclass::prelude::ObjectSubclassIsExt;
use dbus::{Error, Path};
use dbus::arg::PropMap;
use glib::{clone, PropertySet}; use glib::{clone, PropertySet};
use gtk::prelude::{ButtonExt, EditableExt, WidgetExt}; use gtk::prelude::{ButtonExt, EditableExt, WidgetExt};
use ReSet_Lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, TypeSettings}; use ReSet_Lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, TypeSettings};
use ReSet_Lib::network::network::AccessPoint;
use IpProtocol::{IPv4, IPv6}; use IpProtocol::{IPv4, IPv6};
use crate::components::wifi::utils::IpProtocol; use crate::components::wifi::utils::IpProtocol;
@ -23,11 +27,11 @@ glib::wrapper! {
} }
impl WifiOptions { impl WifiOptions {
pub fn new(connection: Connection) -> Arc<Self> { pub fn new(connection: Connection, accessPoint: Path<'static>) -> Arc<Self> {
let wifiOption: Arc<WifiOptions> = Arc::new(Object::builder().build()); let wifiOption: Arc<WifiOptions> = Arc::new(Object::builder().build());
wifiOption.imp().connection.set(connection); wifiOption.imp().connection.set(connection);
wifiOption.initializeUI(); wifiOption.initializeUI();
setupCallbacks(&wifiOption); setupCallbacks(&wifiOption, accessPoint);
wifiOption wifiOption
} }
@ -45,7 +49,6 @@ impl WifiOptions {
ip6RouteLength = conn.ipv4.route_data.len(); ip6RouteLength = conn.ipv4.route_data.len();
// General // General
selfImp.resetWifiAutoConnect.set_active(conn.settings.autoconnect); selfImp.resetWifiAutoConnect.set_active(conn.settings.autoconnect);
selfImp.resetWifiMetered.set_active(conn.settings.metered != -1); selfImp.resetWifiMetered.set_active(conn.settings.metered != -1);
match &conn.device { match &conn.device {
@ -91,7 +94,23 @@ impl WifiOptions {
}).collect(); }).collect();
selfImp.resetIP6DNS.set_text(&ipv6Dns.join(", ")); selfImp.resetIP6DNS.set_text(&ipv6Dns.join(", "));
selfImp.resetIP6Gateway.set_text(&conn.ipv6.gateway); selfImp.resetIP6Gateway.set_text(&conn.ipv6.gateway);
dbg!(conn);
// Security
if let TypeSettings::WIFI(wifi) = &conn.device {
match wifi.security_settings.key_management.as_str() {
"none" => {
selfImp.resetWifiSecurityDropdown.set_selected(0);
selfImp.resetWifiPassword.set_visible(false);
selfImp.resetWifiPassword.set_text("");
}
"wpa-psk" => {
selfImp.resetWifiSecurityDropdown.set_selected(1);
selfImp.resetWifiPassword.set_visible(true);
selfImp.resetWifiPassword.set_text(&wifi.security_settings.psk);
}
_ => {}
}
}
} }
// IPv4 // IPv4
for i in 0..ip4AddressLength { for i in 0..ip4AddressLength {
@ -118,11 +137,12 @@ impl WifiOptions {
for i in 0..ip6RouteLength { for i in 0..ip6RouteLength {
let route = &WifiRouteEntry::new(Some(i), selfImp.connection.clone(), IPv6); let route = &WifiRouteEntry::new(Some(i), selfImp.connection.clone(), IPv6);
selfImp.resetIP6RoutesGroup.add(route) selfImp.resetIP6RoutesGroup.add(route);
} }
let route = &WifiRouteEntry::new(None, selfImp.connection.clone(), IPv6); let route = &WifiRouteEntry::new(None, selfImp.connection.clone(), IPv6);
selfImp.resetIP6RoutesGroup.add(route) selfImp.resetIP6RoutesGroup.add(route);
// Security // Security
dbg!(selfImp.connection.borrow());
} }
pub fn setIP4Visibility(&self, method: u32) { pub fn setIP4Visibility(&self, method: u32) {
@ -168,9 +188,8 @@ impl WifiOptions {
} }
} }
fn setupCallbacks(wifiOptions: &Arc<WifiOptions>) { fn setupCallbacks(wifiOptions: &Arc<WifiOptions>, path: Path<'static>) {
let imp = wifiOptions.imp(); let imp = wifiOptions.imp();
// General // General
imp.resetWifiAutoConnect.connect_active_notify(clone!(@weak imp => move |x| { imp.resetWifiAutoConnect.connect_active_notify(clone!(@weak imp => move |x| {
imp.connection.borrow_mut().settings.autoconnect = x.is_active(); imp.connection.borrow_mut().settings.autoconnect = x.is_active();
@ -180,7 +199,7 @@ fn setupCallbacks(wifiOptions: &Arc<WifiOptions>) {
})); }));
imp.wifiOptionsApplyButton.connect_clicked(clone!(@weak imp => move |_| { imp.wifiOptionsApplyButton.connect_clicked(clone!(@weak imp => move |_| {
let prop = imp.connection.borrow().convert_to_propmap(); let prop = imp.connection.borrow().convert_to_propmap();
// todo send to daemon somehow setConnectionSettings(path.clone(), prop);
})); }));
// IPv4 // IPv4
let wifiOptionsIP4 = wifiOptions.clone(); let wifiOptionsIP4 = wifiOptions.clone();
@ -274,5 +293,48 @@ fn setupCallbacks(wifiOptions: &Arc<WifiOptions>) {
imp.resetIP6Gateway.add_css_class("error"); imp.resetIP6Gateway.add_css_class("error");
} }
})); }));
// Security // Security
imp.resetWifiSecurityDropdown.connect_selected_notify(clone!(@weak imp => move |dropdown| {
let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut();
match (selected, &mut conn.device) {
(0 , TypeSettings::WIFI(wifi)) => { // None
imp.resetWifiPassword.set_visible(false);
wifi.security_settings.key_management = String::from("none");
wifi.security_settings.authentication_algorithm = String::from("open");
},
(1 , TypeSettings::WIFI(wifi)) => { // WPA/WPA2 Personal
imp.resetWifiPassword.set_visible(true);
wifi.security_settings.key_management = String::from("wpa-psk");
wifi.security_settings.authentication_algorithm = String::from("");
},
(_, _) => {}
}
}));
imp.resetWifiPassword.connect_changed(clone!(@weak imp => move |entry| {
let passwordInput = entry.text();
let mut conn = imp.connection.borrow_mut();
if let TypeSettings::WIFI(wifi) = &mut conn.device {
wifi.security_settings.psk = passwordInput.to_string();
}
}));
} }
fn setConnectionSettings(path: Path<'static>, prop: PropMap) {
gio::spawn_blocking(move || {
let conn = dbus::blocking::Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.Xetibo.ReSetDaemon",
"/org/Xetibo/ReSetDaemon",
Duration::from_millis(1000),
);
let _: Result<(bool,), Error> = proxy.method_call(
"org.Xetibo.ReSetWireless",
"SetConnectionSettings",
(path, prop),
);
});
}

View file

@ -1,11 +1,12 @@
use crate::components::wifi::wifiOptions; use crate::components::wifi::wifiOptions;
use adw::subclass::prelude::NavigationPageImpl; use adw::subclass::prelude::NavigationPageImpl;
use adw::{ActionRow, ComboRow, EntryRow, NavigationPage, PreferencesGroup, SwitchRow}; use adw::{ActionRow, ComboRow, EntryRow, NavigationPage, PasswordEntryRow, PreferencesGroup, SwitchRow};
use gtk::subclass::prelude::*; use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate}; use gtk::{glib, Button, CompositeTemplate};
use std::cell::RefCell; use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
use ReSet_Lib::network::connection::Connection; use ReSet_Lib::network::connection::Connection;
use ReSet_Lib::network::network::AccessPoint;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[derive(Default, CompositeTemplate)] #[derive(Default, CompositeTemplate)]
@ -63,6 +64,10 @@ pub struct WifiOptions {
#[template_child] #[template_child]
pub resetIP6RouteAddButton: TemplateChild<Button>, pub resetIP6RouteAddButton: TemplateChild<Button>,
// Security // Security
#[template_child]
pub resetWifiSecurityDropdown: TemplateChild<ComboRow>,
#[template_child]
pub resetWifiPassword: TemplateChild<PasswordEntryRow>,
// Misc // Misc
#[template_child] #[template_child]
pub wifiOptionsApplyButton: TemplateChild<Button>, pub wifiOptionsApplyButton: TemplateChild<Button>,

View file

@ -294,16 +294,15 @@
(21,90,"GtkLabel",None,53,None,"tab",None,5,None), (21,90,"GtkLabel",None,53,None,"tab",None,5,None),
(21,91,"GtkBox",None,53,None,None,None,6,None), (21,91,"GtkBox",None,53,None,None,None,6,None),
(21,92,"AdwPreferencesGroup",None,91,None,None,None,None,None), (21,92,"AdwPreferencesGroup",None,91,None,None,None,None,None),
(21,93,"AdwComboRow",None,92,None,None,None,None,None), (21,93,"AdwComboRow","resetWifiSecurityDropdown",92,None,None,None,None,None),
(21,94,"GtkStringList",None,93,None,None,None,None,None), (21,96,"AdwPasswordEntryRow","resetWifiPassword",92,None,None,None,1,None),
(21,95,"AdwEntryRow",None,92,None,None,None,1,None),
(21,96,"AdwPasswordEntryRow",None,92,None,None,None,2,None),
(21,97,"GtkLabel",None,53,None,"tab",None,7,None), (21,97,"GtkLabel",None,53,None,"tab",None,7,None),
(21,98,"GtkButton","wifiOptionsApplyButton",52,None,None,None,1,None), (21,98,"GtkButton","wifiOptionsApplyButton",52,None,None,None,1,None),
(21,99,"GtkButton","resetIP4AddressAddButton",73,None,None,None,-1,None), (21,99,"GtkButton","resetIP4AddressAddButton",73,None,None,None,-1,None),
(21,100,"GtkButton","resetIP4RouteAddButton",75,None,None,None,2,None), (21,100,"GtkButton","resetIP4RouteAddButton",75,None,None,None,2,None),
(21,101,"GtkButton","resetIP6AddressAddButton",85,None,None,None,-1,None), (21,101,"GtkButton","resetIP6AddressAddButton",85,None,None,None,-1,None),
(21,102,"GtkButton","resetIP6RouteAddButton",87,None,None,None,2,None), (21,102,"GtkButton","resetIP6RouteAddButton",87,None,None,None,2,None),
(21,103,"GtkStringList",None,93,None,None,None,-1,None),
(22,1,"GtkBox","resetWifiAddressEntry",None,None,None,None,-1,None), (22,1,"GtkBox","resetWifiAddressEntry",None,None,None,None,-1,None),
(22,2,"AdwExpanderRow","resetAddressRow",1,None,None,None,-1,None), (22,2,"AdwExpanderRow","resetAddressRow",1,None,None,None,-1,None),
(22,5,"GtkButton","resetAddressRemove",1,None,None,None,-1,None), (22,5,"GtkButton","resetAddressRemove",1,None,None,None,-1,None),
@ -806,6 +805,7 @@
(21,53,"GtkNotebook","scrollable","True",None,None,None,None,None,None,None,None,None), (21,53,"GtkNotebook","scrollable","True",None,None,None,None,None,None,None,None,None),
(21,53,"GtkNotebook","show-border","False",None,None,None,None,None,None,None,None,None), (21,53,"GtkNotebook","show-border","False",None,None,None,None,None,None,None,None,None),
(21,54,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (21,54,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,54,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(21,56,"AdwPreferencesRow","title","WiFi Name",None,None,None,None,None,None,None,None,None), (21,56,"AdwPreferencesRow","title","WiFi Name",None,None,None,None,None,None,None,None,None),
(21,56,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None), (21,56,"GtkWidget","css-classes","property",None,None,None,None,None,None,None,None,None),
(21,57,"AdwPreferencesRow","title","MAC-Address",None,None,None,None,None,None,None,None,None), (21,57,"AdwPreferencesRow","title","MAC-Address",None,None,None,None,None,None,None,None,None),
@ -826,6 +826,7 @@
(21,65,"AdwPreferencesRow","title","Metered Connection",None,None,None,None,None,None,None,None,None), (21,65,"AdwPreferencesRow","title","Metered Connection",None,None,None,None,None,None,None,None,None),
(21,66,"GtkLabel","label","General",None,None,None,None,None,None,None,None,None), (21,66,"GtkLabel","label","General",None,None,None,None,None,None,None,None,None),
(21,67,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (21,67,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,67,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(21,69,"AdwComboRow","model",None,None,None,None,None,70,None,None,None,None), (21,69,"AdwComboRow","model",None,None,None,None,None,70,None,None,None,None),
(21,69,"AdwPreferencesRow","title","IPv4 Method",None,None,None,None,None,None,None,None,None), (21,69,"AdwPreferencesRow","title","IPv4 Method",None,None,None,None,None,None,None,None,None),
(21,71,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None), (21,71,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None),
@ -841,6 +842,7 @@
(21,77,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), (21,77,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(21,78,"GtkLabel","label","IPv4",None,None,None,None,None,None,None,None,None), (21,78,"GtkLabel","label","IPv4",None,None,None,None,None,None,None,None,None),
(21,79,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (21,79,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,79,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(21,81,"AdwComboRow","model",None,None,None,None,None,82,None,None,None,None), (21,81,"AdwComboRow","model",None,None,None,None,None,82,None,None,None,None),
(21,81,"AdwPreferencesRow","title","IPv6 Method",None,None,None,None,None,None,None,None,None), (21,81,"AdwPreferencesRow","title","IPv6 Method",None,None,None,None,None,None,None,None,None),
(21,83,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None), (21,83,"AdwPreferencesRow","title","DNS (separate IP by comma, empty for automatic)",None,None,None,None,None,None,None,None,None),
@ -856,9 +858,9 @@
(21,89,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), (21,89,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(21,90,"GtkLabel","label","IPv6",None,None,None,None,None,None,None,None,None), (21,90,"GtkLabel","label","IPv6",None,None,None,None,None,None,None,None,None),
(21,91,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (21,91,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(21,93,"AdwComboRow","model",None,None,None,None,None,94,None,None,None,None), (21,91,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(21,93,"AdwComboRow","model",None,None,None,None,None,103,None,None,None,None),
(21,93,"AdwPreferencesRow","title","Security",None,None,None,None,None,None,None,None,None), (21,93,"AdwPreferencesRow","title","Security",None,None,None,None,None,None,None,None,None),
(21,95,"AdwPreferencesRow","title","Username",None,None,None,None,None,None,None,None,None),
(21,96,"AdwPreferencesRow","title","Password",None,None,None,None,None,None,None,None,None), (21,96,"AdwPreferencesRow","title","Password",None,None,None,None,None,None,None,None,None),
(21,97,"GtkLabel","label","Security",None,None,None,None,None,None,None,None,None), (21,97,"GtkLabel","label","Security",None,None,None,None,None,None,None,None,None),
(21,98,"GtkButton","label","Apply",None,None,None,None,None,None,None,None,None), (21,98,"GtkButton","label","Apply",None,None,None,None,None,None,None,None,None),
@ -923,16 +925,9 @@
(21,82,"GtkStringList",2,5,"Link-Local Only",1,None,None,None,None), (21,82,"GtkStringList",2,5,"Link-Local Only",1,None,None,None,None),
(21,82,"GtkStringList",2,6,"Shared to other computers",1,None,None,None,None), (21,82,"GtkStringList",2,6,"Shared to other computers",1,None,None,None,None),
(21,82,"GtkStringList",2,7,"Disabled",1,None,None,None,None), (21,82,"GtkStringList",2,7,"Disabled",1,None,None,None,None),
(21,94,"GtkStringList",1,1,None,None,None,None,None,None), (21,103,"GtkStringList",1,1,None,None,None,None,None,None),
(21,94,"GtkStringList",2,2,"None",1,None,None,None,None), (21,103,"GtkStringList",2,2,"None",1,None,None,None,None),
(21,94,"GtkStringList",2,3,"Enhanced Open",1,None,None,None,None), (21,103,"GtkStringList",2,3,"WPA &amp; WPA2 Personal",1,None,None,None,None)
(21,94,"GtkStringList",2,4,"WEP 40/128-bit Key (Hex or ASCII)",1,None,None,None,None),
(21,94,"GtkStringList",2,5,"WEP 128-bit Passphrase",1,None,None,None,None),
(21,94,"GtkStringList",2,6,"LEAP",1,None,None,None,None),
(21,94,"GtkStringList",2,7,"Dynamic WEP (802.1X)",1,None,None,None,None),
(21,94,"GtkStringList",2,8,"WPA &amp; WPA2 Personal",1,None,None,None,None),
(21,94,"GtkStringList",2,9,"WPA &amp; WPA2 Enterprise",1,None,None,None,None),
(21,94,"GtkStringList",2,10,"WPA3 Personal",1,None,None,None,None)
</object_data> </object_data>
<object_data_arg> <object_data_arg>
(3,42,"GtkWidget",2,2,"name","b"), (3,42,"GtkWidget",2,2,"name","b"),

View file

@ -13,6 +13,7 @@
<property name="show-border">False</property> <property name="show-border">False</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-top">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
@ -85,6 +86,7 @@
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-top">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
@ -163,6 +165,7 @@
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-top">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
@ -242,23 +245,17 @@
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="margin-top">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="AdwPreferencesGroup"> <object class="AdwPreferencesGroup">
<child> <child>
<object class="AdwComboRow"> <object class="AdwComboRow" id="resetWifiSecurityDropdown">
<property name="model"> <property name="model">
<object class="GtkStringList"> <object class="GtkStringList">
<items> <items>
<item>None</item> <item>None</item>
<item>Enhanced Open</item>
<item>WEP 40/128-bit Key (Hex or ASCII)</item>
<item>WEP 128-bit Passphrase</item>
<item>LEAP</item>
<item>Dynamic WEP (802.1X)</item>
<item>WPA &amp; WPA2 Personal</item> <item>WPA &amp; WPA2 Personal</item>
<item>WPA &amp; WPA2 Enterprise</item>
<item>WPA3 Personal</item>
</items> </items>
</object> </object>
</property> </property>
@ -266,12 +263,7 @@
</object> </object>
</child> </child>
<child> <child>
<object class="AdwEntryRow"> <object class="AdwPasswordEntryRow" id="resetWifiPassword">
<property name="title">Username</property>
</object>
</child>
<child>
<object class="AdwPasswordEntryRow">
<property name="title">Password</property> <property name="title">Password</property>
</object> </object>
</child> </child>