From 1f4aaad9ed491e3dfcc0e97692eaedba90fb7944 Mon Sep 17 00:00:00 2001 From: CroneKorkN Date: Tue, 16 Dec 2025 23:46:25 +0100 Subject: [PATCH] improve wireguard config gen --- ..._client_config => wireguard-client-config} | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) rename bin/{wireguard_client_config => wireguard-client-config} (58%) diff --git a/bin/wireguard_client_config b/bin/wireguard-client-config similarity index 58% rename from bin/wireguard_client_config rename to bin/wireguard-client-config index 1aae7fd..0cd1d5d 100755 --- a/bin/wireguard_client_config +++ b/bin/wireguard-client-config @@ -4,20 +4,21 @@ from bundlewrap.repo import Repository from os.path import realpath, dirname from sys import argv from ipaddress import ip_network, ip_interface +import argparse -if len(argv) != 3: - print(f'usage: {argv[0]} ') - exit(1) +# get info from repo repo = Repository(dirname(dirname(realpath(__file__)))) -server_node = repo.get_node(argv[1]) +server_node = repo.get_node('htz.mails') +available_clients = server_node.metadata.get('wireguard/clients').keys() -if argv[2] not in server_node.metadata.get('wireguard/clients'): - print(f'client {argv[2]} not found in: {server_node.metadata.get("wireguard/clients").keys()}') - exit(1) - -data = server_node.metadata.get(f'wireguard/clients/{argv[2]}') +# parse args +parser = argparse.ArgumentParser(description='Generate WireGuard client configuration.') +parser.add_argument('client', choices=available_clients, help='The client name to generate the configuration for.') +args = parser.parse_args() +# get cert +data = server_node.metadata.get(f'wireguard/clients/{args.client}') vpn_network = ip_interface(server_node.metadata.get('wireguard/my_ip')).network allowed_ips = [ vpn_network, @@ -43,10 +44,15 @@ Endpoint = {ip_interface(server_node.metadata.get('network/external/ipv4')).ip}: PersistentKeepalive = 10 ''' -print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>') -print(conf) -print('<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<') - -if input("print qrcode? [Yn]: ").upper() in ['', 'Y']: - import pyqrcode - print(pyqrcode.create(conf).terminal(quiet_zone=1)) +answer = input("print config or qrcode? [Cq]: ").strip().upper() +match answer: + case '' | 'C': + print('>>>>>>>>>>>>>>>') + print(conf) + print('<<<<<<<<<<<<<<<') + case 'Q': + import pyqrcode + print(pyqrcode.create(conf).terminal(quiet_zone=1)) + case _: + print(f'Invalid option "{answer}".') + exit(1) \ No newline at end of file