"""Register a public key produced by your WireGuard client; never upload its private key. Usage: python register.py device PUBLIC_KEY Set JMPKIT_APP_URL and JMPKIT_APP_KEY privately first. Does not follow redirects. """ import json, os, sys, urllib.request, urllib.parse class NoRedirect(urllib.request.HTTPRedirectHandler): def redirect_request(self, *args, **kwargs): return None base = os.environ['JMPKIT_APP_URL'].rstrip('/') parts = urllib.parse.urlsplit(base) if parts.scheme != 'https' or parts.username or parts.password: raise ValueError('Use a trusted app HTTPS URL') opener = urllib.request.build_opener(NoRedirect) def request(suffix, method='GET', body=None): req = urllib.request.Request(base + '/api/wg10' + suffix, method=method, headers={'Authorization': 'Bearer ' + os.environ['JMPKIT_APP_KEY'], 'Content-Type': 'application/json', 'User-Agent': 'JMPKit-WG-Starter/1.0'}, data=None if body is None else json.dumps(body).encode()) with opener.open(req, timeout=20) as response: return json.load(response) request('', 'PUT', {}) peer = request('/peers', 'POST', {'name': sys.argv[1], 'publicKey': sys.argv[2]}) print(json.dumps(peer, indent=2)) print('Fetch /peers/' + peer['id'] + '/config and insert the private key locally.')