From ca74d3d137e13ea3668aab61276dea05ef772364 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Tue, 21 Nov 2023 21:40:10 -0800 Subject: Remove ddns --- ddns/Dockerfile | 19 --------- ddns/Makefile | 15 ------- ddns/ddns.py | 122 -------------------------------------------------------- ddns/uwsgi.ini | 10 ----- 4 files changed, 166 deletions(-) delete mode 100644 ddns/Dockerfile delete mode 100644 ddns/Makefile delete mode 100755 ddns/ddns.py delete mode 100644 ddns/uwsgi.ini diff --git a/ddns/Dockerfile b/ddns/Dockerfile deleted file mode 100644 index 0872f4d..0000000 --- a/ddns/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM alpine:latest -LABEL maintainer="Mike Crute " - -RUN \ - apk add --no-cache \ - py2-pip \ - uwsgi-python \ - && pip install \ - flask \ - boto3 \ - && apk del py2-pip \ - && addgroup -g 1002 -S ddns \ - && adduser -u 1002 -S -H -D -G ddns ddns - -ADD uwsgi.ini /etc/uwsgi/ -ADD ddns.py /usr/share/ddns/ - -STOPSIGNAL SIGINT -CMD [ "/usr/sbin/uwsgi", "--ini", "/etc/uwsgi/uwsgi.ini" ] diff --git a/ddns/Makefile b/ddns/Makefile deleted file mode 100644 index 1163601..0000000 --- a/ddns/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -IMAGE=docker.crute.me/ddns:latest - -all: - docker build -t $(IMAGE) . - -all-no-cache: - docker build --no-cache -t $(IMAGE) . - -run: - docker run -d \ - -p 9000:9000 \ - $(IMAGE) - -publish: - docker push $(IMAGE) diff --git a/ddns/ddns.py b/ddns/ddns.py deleted file mode 100755 index 0bde4f7..0000000 --- a/ddns/ddns.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python - -import os -import json -import boto3 -import flask -import hashlib -import functools - -# pip install flask boto3 - -# This is purely for documentation purposes -__REQUIRED_IAM_POLICY__ = """ -{ - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "ssm:GetParameter", - "Resource": "arn:aws:ssm:us-west-2::parameter/DDNS_CLIENTS" - }, - { - "Effect": "Allow", - "Action": [ - "route53:ListHostedZones", - "route53:ChangeResourceRecordSets" - ], - "Resource": "*" - } - ] -} -""" - - -app = flask.Flask(__name__) - - -def returns_plain_text(f): - @functools.wraps(f) - def wrapper(*args, **kwargs): - return flask.Response(f(*args, **kwargs), content_type="text/plain") - - return wrapper - - -def get_ip(): - if "X-Forwarded-For" in flask.request.headers: - return flask.request.headers["X-Forwarded-For"] - else: - return flask.request.remote_addr - - -def update_record(zone, record, ip): - client = boto3.client("route53") - zones = client.list_hosted_zones()["HostedZones"] - - client.change_resource_record_sets( - HostedZoneId=[z["Id"] for z in zones if z["Name"] == zone][0], - ChangeBatch={ - "Changes": [{ - "Action": "UPSERT", - "ResourceRecordSet": { - "Name": ".".join((record, zone)), - "Type": "A", - "TTL": 60, - "ResourceRecords": [{ - "Value": ip, - }] - } - }] - } - ) - - -@app.errorhandler(404) -@app.errorhandler(405) -@app.errorhandler(500) -def handle_error(ex): - response = flask.Response("Error", content_type="text/plain") - response.status_code = getattr(ex, "code", 500) - return response - - -@app.route("/new-secret", methods=["GET"]) -@returns_plain_text -def new_secret(): - return hashlib.sha256(os.urandom(100)).hexdigest() - - -def get_client_config(client): - ssm = boto3.client("ssm") - clients = ssm.get_parameter(Name="DDNS_CLIENTS", WithDecryption=True) - config = json.loads(clients["Parameter"]["Value"]) - return config.get(client) - - -@app.route("/update", methods=["POST"]) -def update_ip(): - key = flask.request.form.get("key") - config = get_client_config(key) - - if not config: - flask.abort(404) - - resource, zone = config.split(".", 1) - - try: - update_record(zone, resource, get_ip()) - return "OK" - except: - flask.abort(500) - - -@app.route("/", methods=["GET"]) -@returns_plain_text -def handle_home(): - return get_ip() - - -if __name__ == "__main__": - app.debug = True - app.run() diff --git a/ddns/uwsgi.ini b/ddns/uwsgi.ini deleted file mode 100644 index c0892b2..0000000 --- a/ddns/uwsgi.ini +++ /dev/null @@ -1,10 +0,0 @@ -[uwsgi] -master = true -socket = :9000 -uid = ddns -gid = ddns -plugin = python -chdir = /usr/share/ddns -workers = 2 -module = ddns:app -harakiri = 300 -- cgit v1.2.3