diff --git a/d1/dynu_update.py b/d1/dynu_update.py new file mode 100644 index 0000000..052b7c7 --- /dev/null +++ b/d1/dynu_update.py @@ -0,0 +1,84 @@ +import requests +import logging +import pprint +import copy +import io +import json +import sys + +logging.warning('start dynu_update') +with io.open( + sys.argv[1], + 'r' +) as f: + dynu_config = json.load(f) +logging.warning('loaded dynu_config') + +t2 = requests.get( + 'https://api.dynu.com/v2/oauth2/token', + auth=( + dynu_config['oath2_client_id'], + dynu_config['oath2_secret'], + ) +).json() +logging.warning('got access_token') + +t1 = requests.get( + 'https://api.dynu.com/v2/dns', + headers={ + 'Authorization': 'Bearer %s' % t2['access_token'] + } +).json() +DYNU_DOMAIN = t1['domains'][0] +logging.warning('got dynu_domain') + +t3 = requests.get( + 'https://api.dynu.com/v2/dns/%d/webredirect' % DYNU_DOMAIN['id'], + headers={ + 'Authorization': 'Bearer %s' % t2['access_token'] + } +).json() +DYNU_REDIRECT = t3['webRedirects'][0] +logging.warning('got dynu_redirect') + +NGROK_DOMAIN = sys.argv[2] +t6 = requests.get('http://%s:4040/api/tunnels' % NGROK_DOMAIN).json() +TUNNEL_URL = t6['tunnels'][0]['public_url'] +logging.warning('got tunnel_url') + + + +if TUNNEL_URL != DYNU_REDIRECT['url']: + t5 = copy.deepcopy(t3['webRedirects'][0]) + t5.update( + dict( + url=TUNNEL_URL, + ) + ) + + DYNU_REDIRECT = requests.post( + 'https://api.dynu.com/v2/dns/%d/webRedirect/%d' % ( + DYNU_DOMAIN['id'], + t3['webRedirects'][0]['id'] + ), + headers={ + 'Authorization': 'Bearer %s' % t2['access_token'] + }, + json=t5 + ).json() + logging.warning('updated dynu_redirect') +else: + logging.warning('skip update dynu_redirect') + +logging.warning( + pprint.pformat( + dict( + NGROK_DOMAIN=NGROK_DOMAIN, + TUNNEL_URL=TUNNEL_URL, + DYNU_DOMAIN=DYNU_DOMAIN, + DYNU_REDIRECT=DYNU_REDIRECT, + ) + ) +) + +logging.warning('done dynu_update') diff --git a/docker-compose.yml b/docker-compose.yml index 485a455..38772ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,8 +8,18 @@ services: - ./d1/nginx_config.py:/app/d1/nginx_config.py:ro - ./tmp/cache/forward.nginx.json:/app/tmp/cache/forward.nginx.json:ro restart: always - ports: - - 80:80 + dynu: + build: + context: . + dockerfile: ./docker/dynu/Dockerfile + volumes: + - ./d1/dynu_update.py:/app/d1/dynu_update.py:ro + - ./tmp/cache/dynu.auth.json:/app/tmp/cache/dynu.auth.json:ro + ngrok: + image: wernight/ngrok + links: + - app + command: ['ngrok', 'http', 'app:80'] #forward: # build: # context: . diff --git a/docker/dynu/Dockerfile b/docker/dynu/Dockerfile new file mode 100644 index 0000000..10fb797 --- /dev/null +++ b/docker/dynu/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3 +WORKDIR /app + +RUN pip3 install requests + +ENTRYPOINT /bin/sh -c "\ + python3 d1/dynu_update.py tmp/cache/dynu.auth.json ngrok \ +" +