All checks were successful
Build Docker / BuildImage (push) Successful in 57s
37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from flask import Blueprint, request
|
|
import os
|
|
from cloudflare import Cloudflare
|
|
from tools import json_response
|
|
|
|
acme_bp = Blueprint('acme', __name__)
|
|
|
|
|
|
@acme_bp.route("/hnsdoh-acme", methods=["POST"])
|
|
def acme_post():
|
|
# Get the TXT record from the request
|
|
if not request.is_json or not request.json:
|
|
return json_response(request, "415 Unsupported Media Type", 415)
|
|
if "txt" not in request.json or "auth" not in request.json:
|
|
return json_response(request, "400 Bad Request", 400)
|
|
|
|
txt = request.json["txt"]
|
|
auth = request.json["auth"]
|
|
if auth != os.getenv("CF_AUTH"):
|
|
return json_response(request, "401 Unauthorized", 401)
|
|
|
|
cf = Cloudflare(api_token=os.getenv("CF_TOKEN"))
|
|
zone = cf.zones.list(name="hnsdoh.com").to_dict()
|
|
zone_id = zone["result"][0]["id"] # type: ignore
|
|
existing_records = cf.dns.records.list(
|
|
zone_id=zone_id, type="TXT", name="_acme-challenge.hnsdoh.com" # type: ignore
|
|
).to_dict()
|
|
record_id = existing_records["result"][0]["id"] # type: ignore
|
|
cf.dns.records.delete(dns_record_id=record_id, zone_id=zone_id)
|
|
cf.dns.records.create(
|
|
zone_id=zone_id,
|
|
type="TXT",
|
|
name="_acme-challenge",
|
|
content=txt,
|
|
)
|
|
return json_response(request, "Success", 200)
|