import json import os import pathlib import subprocess import sys class Plugin: async def log(self, message=""): print("frontend: " + message) sys.stdout.flush() async def whoami(self, *args): return os.getuid() async def _systemd_status(self, service = "tailscaled.service"): result = subprocess.run(["/bin/sh", "-c", "systemctl status tailscaled.service | grep active"], stdout=subprocess.PIPE) return result.stdout.decode("utf-8").split(": ")[1].strip() async def install_state(self): sysext = subprocess.run(["/usr/bin/systemd-sysext", "list", "--json=short"], stdout=subprocess.PIPE) sysexts = json.loads(sysext.stdout.decode("utf-8")) if len(sysexts) == 0: return "not installed" for ext in sysexts: if ext["name"] != "tailscale": continue return await self._systemd_status() return "impossible state" async def install(self, *args): subprocess.run(["/home/deck/homebrew/plugins/tailscale/deck_install.sh"]) # Asyncio-compatible long-running code, executed in a task when the plugin is loaded async def _main(self): pass