87 lines
2.1 KiB
YAML
87 lines
2.1 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 xlog-internal.crossbell.svc:3000 {
|
|
header_up X-Forwarded-Host {host}
|
|
}
|
|
}
|
|
|
|
:8080 {
|
|
metrics
|
|
}
|
|
|
|
:80, :443 {
|
|
tls jeff@rss3.io {
|
|
on_demand
|
|
}
|
|
|
|
reverse_proxy xlog-internal.crossbell.svc:3000 {
|
|
header_up X-Forwarded-Host {host}
|
|
}
|
|
}
|
|
---
|
|
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)
|