xLog/deploy/dev/cm.yaml

83 lines
2.0 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: xlog-caddy
namespace: crossbell
data:
Caddyfile: |
{
storage redis {
}
on_demand_tls {
ask http://localhost:5000/
}
}
xlog.page, *.xlog.page {
tls jeff@rss3.io {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy 127.0.0.1:3000
}
:8080 {
metrics
}
:80, :443 {
tls jeff@rss3.io {
on_demand
}
reverse_proxy 127.0.0.1:3000
}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: xlog-caddy-validator
namespace: crossbell
data:
app.py: |
import requests
from flask import Flask, request, Response
app = Flask(__name__)
@app.route("/")
def check_domain():
domain = request.args.get("domain")
if not domain:
return Response(status=404)
if domain.endswith('.xlog.page') or domain == "xlog.page":
return Response(status=200)
# get TXT
res = requests.get("https://cloudflare-dns.com/dns-query", params={
"name": f"_xlog-challenge.{domain}",
"type": "TXT",
}, headers={"Accept": "application/dns-json"})
if res.status_code != 200:
return Response(status=res.status_code)
answer = res.json().get("Answer") or [{}]
tenant = answer[0].get("data", "").replace('"', "")
if not tenant:
return Response(status=404)
# check crossbell
res = requests.get(f"https://indexer.crossbell.io/v1/handles/{tenant}/character")
if res.status_code != 200:
return Response(status=404)
attributes = res.json().get("metadata", {}).get("content", {}).get("attributes", [])
for d in attributes:
if d.get("trait_type") == "xlog_custom_domain":
print(d)
xlog_custom_domain = d.get("value", "").lower()
if xlog_custom_domain == domain:
return Response(status=200)
return Response(status=404)