diff --git a/bumblebee/modules/pihole.py b/bumblebee/modules/pihole.py index c0d10a2..00fbd22 100644 --- a/bumblebee/modules/pihole.py +++ b/bumblebee/modules/pihole.py @@ -1,68 +1,68 @@ -# pylint: disable=C0111,R0903 - -"""Displays the pi-hole status (up/down) together with the number of ads that were blocked today -Parameters: - * pihole.address : pi-hole address (e.q: http://192.168.1.3) - * pihole.pwhash : pi-hole webinterface password hash (can be obtained from the /etc/pihole/SetupVars.conf file) -""" - -import bumblebee.input -import bumblebee.output -import bumblebee.engine -import requests - -class Module(bumblebee.engine.Module): - def __init__(self, engine, config): - super(Module, self).__init__(engine, config, - bumblebee.output.Widget(full_text=self.pihole_status) - ) - - buttons = {"LEFT_CLICK":bumblebee.input.LEFT_MOUSE} - self._pihole_address = self.parameter("address", "") - - self._pihole_pw_hash = self.parameter("pwhash", "") - self._pihole_status = None - self._ads_blocked_today = "-" - self.update_pihole_status() - - engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, - cmd=self.toggle_pihole_status) - - def pihole_status(self, widget): - if self._pihole_status is None: - return "pi-hole unknown" - return "pi-hole " + ("up/" + self._ads_blocked_today if self._pihole_status else "down") - - def update_pihole_status(self): - try: - data = requests.get(self._pihole_address + "/admin/api.php?summary").json() - self._pihole_status = True if data["status"] == "enabled" else False - self._ads_blocked_today = data["ads_blocked_today"] - except: - self._pihole_status = None - - def toggle_pihole_status(self, widget): - if self._pihole_status is not None: - try: - req = None - if self._pihole_status: - req = requests.get(self._pihole_address + "/admin/api.php?disable&auth=" + self._pihole_pw_hash) - else: - req = requests.get(self._pihole_address + "/admin/api.php?enable&auth=" + self._pihole_pw_hash) - if req is not None: - if req.status_code == 200: - status = req.json()["status"] - self._pihole_status = False if status == "disabled" else True - except: - pass - - - def update(self, widgets): - self.update_pihole_status() - - def state(self, widget): - if self._pihole_status is None: - return [] - elif self._pihole_status: - return ["enabled"] - return ["disabled", "warning"] +# pylint: disable=C0111,R0903 + +"""Displays the pi-hole status (up/down) together with the number of ads that were blocked today +Parameters: + * pihole.address : pi-hole address (e.q: http://192.168.1.3) + * pihole.pwhash : pi-hole webinterface password hash (can be obtained from the /etc/pihole/SetupVars.conf file) +""" + +import bumblebee.input +import bumblebee.output +import bumblebee.engine +import requests + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + super(Module, self).__init__(engine, config, + bumblebee.output.Widget(full_text=self.pihole_status) + ) + + buttons = {"LEFT_CLICK":bumblebee.input.LEFT_MOUSE} + self._pihole_address = self.parameter("address", "") + + self._pihole_pw_hash = self.parameter("pwhash", "") + self._pihole_status = None + self._ads_blocked_today = "-" + self.update_pihole_status() + + engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, + cmd=self.toggle_pihole_status) + + def pihole_status(self, widget): + if self._pihole_status is None: + return "pi-hole unknown" + return "pi-hole " + ("up/" + self._ads_blocked_today if self._pihole_status else "down") + + def update_pihole_status(self): + try: + data = requests.get(self._pihole_address + "/admin/api.php?summary").json() + self._pihole_status = True if data["status"] == "enabled" else False + self._ads_blocked_today = data["ads_blocked_today"] + except: + self._pihole_status = None + + def toggle_pihole_status(self, widget): + if self._pihole_status is not None: + try: + req = None + if self._pihole_status: + req = requests.get(self._pihole_address + "/admin/api.php?disable&auth=" + self._pihole_pw_hash) + else: + req = requests.get(self._pihole_address + "/admin/api.php?enable&auth=" + self._pihole_pw_hash) + if req is not None: + if req.status_code == 200: + status = req.json()["status"] + self._pihole_status = False if status == "disabled" else True + except: + pass + + + def update(self, widgets): + self.update_pihole_status() + + def state(self, widget): + if self._pihole_status is None: + return [] + elif self._pihole_status: + return ["enabled"] + return ["disabled", "warning"] diff --git a/bumblebee/modules/vpn.py b/bumblebee/modules/vpn.py index a26586b..f02842e 100644 --- a/bumblebee/modules/vpn.py +++ b/bumblebee/modules/vpn.py @@ -1,95 +1,95 @@ -# pylint: disable=C0111,R0903 - -""" Displays the VPN profile that is currently in use. - - Left click opens a popup menu that lists all available VPN profiles and allows to establish - a VPN connection using that profile. - - Prerequisites: - * nmcli needs to be installed and configured properly. - To quickly test, whether nmcli is working correctly, type "nmcli -g NAME,TYPE,DEVICE con" which - lists all the connection profiles that are configured. Make sure that your VPN profile is in that list! - - e.g: to import a openvpn profile via nmcli: - sudo nmcli connection import type openvpn file -""" - -import logging -import bumblebee.input -import bumblebee.output -import bumblebee.engine -import functools - -class Module(bumblebee.engine.Module): - def __init__(self, engine, config): - super(Module, self).__init__(engine, config, - bumblebee.output.Widget(full_text=self.vpn_status) - ) - - self._connected_vpn_profile = None - self._selected_vpn_profile = None - - res = bumblebee.util.execute("nmcli -g NAME,TYPE c") - lines = res.splitlines() - - self._vpn_profiles = [] - for line in lines: - info = line.split(':') - try: - if info[1] == "vpn": - self._vpn_profiles.append(info[0]) - except: - pass - - engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, - cmd=self.popup) - - def update(self, widgets): - try: - res = bumblebee.util.execute("nmcli -g NAME,TYPE,DEVICE con") - lines = res.splitlines() - self._connected_vpn_profile = None - for line in lines: - info = line.split(':') - if info[1] == "vpn" and info[2] != "": - self._connected_vpn_profile = info[0] - - except Exception as e: - logging.exception("Couldn't get VPN status") - self._connected_vpn_profile = None - - def vpn_status(self, widget): - if self._connected_vpn_profile is None: - return "off" - return self._connected_vpn_profile - - def _on_vpn_disconnect(self): - try: - bumblebee.util.execute("nmcli c down " + self._connected_vpn_profile) - self._connected_vpn_profile = None - except Exception as e: - logging.exception("Couldn't disconnect VPN connection") - - def _on_vpn_connect(self, name): - self._selected_vpn_profile = name - - try: - bumblebee.util.execute("nmcli c up " + self._selected_vpn_profile) - self._connected_vpn_profile = name - except Exception as e: - logging.exception("Couldn't establish VPN connection") - self._connected_vpn_profile = None - - def popup(self, widget): - menu = bumblebee.popup_v2.PopupMenu() - - if self._connected_vpn_profile is not None: - menu.add_menuitem("Disconnect", callback=self._on_vpn_disconnect) - for vpn_profile in self._vpn_profiles: - if self._connected_vpn_profile is not None and self._connected_vpn_profile == vpn_profile: - continue - menu.add_menuitem(vpn_profile, callback=functools.partial(self._on_vpn_connect, vpn_profile)) - menu.show(widget) - - def state(self, widget): - return [] +# pylint: disable=C0111,R0903 + +""" Displays the VPN profile that is currently in use. + + Left click opens a popup menu that lists all available VPN profiles and allows to establish + a VPN connection using that profile. + + Prerequisites: + * nmcli needs to be installed and configured properly. + To quickly test, whether nmcli is working correctly, type "nmcli -g NAME,TYPE,DEVICE con" which + lists all the connection profiles that are configured. Make sure that your VPN profile is in that list! + + e.g: to import a openvpn profile via nmcli: + sudo nmcli connection import type openvpn file +""" + +import logging +import bumblebee.input +import bumblebee.output +import bumblebee.engine +import functools + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + super(Module, self).__init__(engine, config, + bumblebee.output.Widget(full_text=self.vpn_status) + ) + + self._connected_vpn_profile = None + self._selected_vpn_profile = None + + res = bumblebee.util.execute("nmcli -g NAME,TYPE c") + lines = res.splitlines() + + self._vpn_profiles = [] + for line in lines: + info = line.split(':') + try: + if info[1] == "vpn": + self._vpn_profiles.append(info[0]) + except: + pass + + engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, + cmd=self.popup) + + def update(self, widgets): + try: + res = bumblebee.util.execute("nmcli -g NAME,TYPE,DEVICE con") + lines = res.splitlines() + self._connected_vpn_profile = None + for line in lines: + info = line.split(':') + if info[1] == "vpn" and info[2] != "": + self._connected_vpn_profile = info[0] + + except Exception as e: + logging.exception("Couldn't get VPN status") + self._connected_vpn_profile = None + + def vpn_status(self, widget): + if self._connected_vpn_profile is None: + return "off" + return self._connected_vpn_profile + + def _on_vpn_disconnect(self): + try: + bumblebee.util.execute("nmcli c down " + self._connected_vpn_profile) + self._connected_vpn_profile = None + except Exception as e: + logging.exception("Couldn't disconnect VPN connection") + + def _on_vpn_connect(self, name): + self._selected_vpn_profile = name + + try: + bumblebee.util.execute("nmcli c up " + self._selected_vpn_profile) + self._connected_vpn_profile = name + except Exception as e: + logging.exception("Couldn't establish VPN connection") + self._connected_vpn_profile = None + + def popup(self, widget): + menu = bumblebee.popup_v2.PopupMenu() + + if self._connected_vpn_profile is not None: + menu.add_menuitem("Disconnect", callback=self._on_vpn_disconnect) + for vpn_profile in self._vpn_profiles: + if self._connected_vpn_profile is not None and self._connected_vpn_profile == vpn_profile: + continue + menu.add_menuitem(vpn_profile, callback=functools.partial(self._on_vpn_connect, vpn_profile)) + menu.show(widget) + + def state(self, widget): + return []