diff --git a/actions/wireguard b/actions/wireguard index 261b90452..9d0fe0900 100755 --- a/actions/wireguard +++ b/actions/wireguard @@ -20,6 +20,7 @@ Configuration helper for WireGuard. """ import argparse +import json import subprocess SERVER_INTERFACE = 'wg0' @@ -30,6 +31,9 @@ def parse_arguments(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + subparsers.add_parser('setup', help='Setup WireGuard') + subparsers.add_parser('list-clients', help='List all clients') + add_client = subparsers.add_parser('add-client', help='Add a client') add_client.add_argument('publickey', help='Public key for the client') @@ -37,6 +41,28 @@ def parse_arguments(): return parser.parse_args() +def subcommand_setup(_): + """Setup WireGuard.""" + subprocess.run( + ['ip', 'link', 'add', 'dev', SERVER_INTERFACE, 'type', 'wireguard'], + check=True) + + +def subcommand_list_clients(_): + """List all clients.""" + clients = [] + output = subprocess.check_output( + ['wg', 'show', SERVER_INTERFACE, 'latest-handshakes']).decode().strip() + for client_info in output.split('\n'): + public_key, latest_handshake = client_info.split() + clients.append({ + 'public_key': public_key, + 'latest_handshake': latest_handshake, + }) + + print(json.dumps(clients)) + + def subcommand_add_client(arguments): """Add a client.""" subprocess.run( diff --git a/plinth/modules/wireguard/__init__.py b/plinth/modules/wireguard/__init__.py index fd67c345e..00c1013e8 100644 --- a/plinth/modules/wireguard/__init__.py +++ b/plinth/modules/wireguard/__init__.py @@ -21,6 +21,7 @@ FreedomBox app for wireguard. from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ +from plinth import actions from plinth import app as app_module from plinth import cfg, frontpage, menu from plinth.modules.firewall.components import Firewall @@ -95,4 +96,5 @@ def init(): def setup(helper, old_version=None): """Install and configure the module.""" helper.install(managed_packages) + helper.call('post', actions.superuser_run, 'wireguard', ['setup']) helper.call('post', app.enable) diff --git a/plinth/modules/wireguard/templates/wireguard.html b/plinth/modules/wireguard/templates/wireguard.html index 499a3368f..d65f050c4 100644 --- a/plinth/modules/wireguard/templates/wireguard.html +++ b/plinth/modules/wireguard/templates/wireguard.html @@ -23,10 +23,24 @@ {% block configuration %}
{% trans "Peers allowed to connect to this server" %}
-| {% trans "Public Key" %} | +{% trans "Last Connected Time" %} | +{% trans "Edit" %} | +
|---|---|---|
| {{ client.public_key }} | +{{ client.latest_handshake }} | +Edit | +