diff --git a/ks_includes/printer.py b/ks_includes/printer.py index 932e3c33..17d46048 100644 --- a/ks_includes/printer.py +++ b/ks_includes/printer.py @@ -18,6 +18,7 @@ class Printer: self.tempdevcount = 0 self.fancount = 0 self.ledcount = 0 + self.pwm_tools_count = 0 self.output_pin_count = 0 self.store_timeout = None self.tempstore = {} diff --git a/ks_includes/sdbus_nm.py b/ks_includes/sdbus_nm.py index 09ab184d..ad6fd099 100644 --- a/ks_includes/sdbus_nm.py +++ b/ks_includes/sdbus_nm.py @@ -17,7 +17,10 @@ from sdbus_block.networkmanager import ( enums, exceptions, ) -from sdbus import sd_bus_open_system, set_default_bus +from sdbus import ( + sd_bus_open_system, + set_default_bus, +) from gi.repository import GLib from uuid import uuid4 @@ -191,7 +194,7 @@ class SdbusNm: return sorted(networks, key=lambda i: i['signal_level'], reverse=True) return networks - def get_bssid_from_ssid(self, ssid): + def get_bssid_from_ssid(selsd_busf, ssid): return next(net['BSSID'] for net in self.get_networks() if ssid == net['SSID']) def get_connected_ap(self): @@ -213,6 +216,7 @@ class SdbusNm: ) def add_network(self, ssid, psk): + security_type = self.get_security_type(ssid) if security_type is None: return {"error": "network_not_found", "message": _("Network not found")} @@ -254,6 +258,11 @@ class SdbusNm: return {"error": "unknown_security_type", "message": _("Unknown security type")} try: + if not self.request_polkit_auth( + 'org.example.NetworkManager.AddNetwork' + ): + return {"error": "insufficient_privileges", "message": _("Authorization failed")} + NetworkManagerSettings().add_connection(properties) return {"status": "success"} except exceptions.NmSettingsPermissionDeniedError: @@ -266,6 +275,9 @@ class SdbusNm: logging.exception("Couldn't add network") return {"error": "unknown", "message": _("Couldn't add network") + f"\n{e}"} + def request_polkit_auth(self, action_id): + return True + def disconnect_network(self): self.wlan_device.disconnect() diff --git a/scripts/KlipperScreen-install.sh b/scripts/KlipperScreen-install.sh index 9481a2b4..42fbaefd 100755 --- a/scripts/KlipperScreen-install.sh +++ b/scripts/KlipperScreen-install.sh @@ -174,9 +174,9 @@ create_policy() echo_text "Installing KlipperScreen PolicyKit Rules" sudo groupadd -f klipperscreen - sudo adduser "$USER" netdev + sudo adduser "$USER" klipperscreen if [ ! -x "$(command -v pkaction)" ]; then - echo "PolicyKit not installed" + echo_error "PolicyKit not installed" return fi @@ -194,20 +194,14 @@ create_policy() elif [ -d $POLKIT_DIR ]; then RULE_FILE="${POLKIT_DIR}/KlipperScreen.rules" else - echo "PolicyKit rules folder not detected" + echo_error "PolicyKit rules folder not detected" exit 1 fi echo_text "Installing PolicyKit Rules to ${RULE_FILE}..." - - KS_GID=$( getent group klipperscreen | awk -F: '{printf "%d", $3}' ) + sudo rm ${RULE_FILE} sudo tee ${RULE_FILE} > /dev/null << EOF -// Allow KlipperScreen to reboot, shutdown, etc -polkit.addRule(function(action, subject) { - if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" && - subject.isInGroup("network")) { - return polkit.Result.YES; - } -}); +// subject.isInGroup("klipperscreen") +// subject.user == "$USER") polkit.addRule(function(action, subject) { if ((action.id == "org.freedesktop.login1.power-off" || action.id == "org.freedesktop.login1.power-off-multiple-sessions" || @@ -217,10 +211,6 @@ polkit.addRule(function(action, subject) { action.id == "org.freedesktop.login1.halt-multiple-sessions" || action.id.startsWith("org.freedesktop.NetworkManager.")) && subject.user == "$USER") { - // Only allow processes with the "klipperscreen" supplementary group - // access - var regex = "^Groups:.+?\\\s$KS_GID[\\\s\\\0]"; - var cmdpath = "/proc/" + subject.pid.toString() + "/status"; try { polkit.spawn(["grep", "-Po", regex, cmdpath]); return polkit.Result.YES;