Archived
Simplify DDNS flow and polish UI
This commit is contained in:
1 parent
5beee0e5c6
commit
5a90bd9d87
42 files changed
+587
-1418
No files matched your search
@@ -1,13 +1,10 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import sqlite3
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Request
|
||||
from fastapi.responses import HTMLResponse, PlainTextResponse, RedirectResponse, Response
|
||||
from starlette.concurrency import run_in_threadpool
|
||||
|
||||
from ..ddns_security import client_ip
|
||||
from ..ddns_service import normalize_domain
|
||||
from ..dependencies import ServiceDep, SettingsDep
|
||||
from ..web.forms import first_form_value, request_form
|
||||
from ..web.templates_public import _render_privacy_page, _render_public_home
|
||||
@@ -32,45 +29,15 @@ async def magic_account(request: Request, settings: SettingsDep, service: Servic
|
||||
return _render_public_home(service, settings, account, None)
|
||||
|
||||
|
||||
@router.post("/request-domain", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def request_domain(request: Request, settings: SettingsDep, service: ServiceDep) -> str:
|
||||
form = await request_form(request, settings)
|
||||
try:
|
||||
challenge = await run_in_threadpool(
|
||||
service.create_domain_challenge,
|
||||
first_form_value(form, "domain"),
|
||||
)
|
||||
except sqlite3.IntegrityError as exc:
|
||||
raise HTTPException(status_code=409, detail="domain is already verified") from exc
|
||||
return _render_public_home(service, settings, None, None, challenge)
|
||||
|
||||
|
||||
@router.post("/verify-domain", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def verify_domain(request: Request, settings: SettingsDep, service: ServiceDep) -> str:
|
||||
form = await request_form(request, settings)
|
||||
domain = normalize_domain(first_form_value(form, "domain"))
|
||||
claim_secret = first_form_value(form, "claim_secret")
|
||||
found, challenge = await run_in_threadpool(service.verify_domain, domain, claim_secret)
|
||||
if not found:
|
||||
message = "TXT record not found yet. Try again in a few minutes."
|
||||
return _render_public_home(service, settings, None, message, challenge)
|
||||
return _render_public_home(service, settings, None, "Domain verified. You can create a hostname now.", challenge)
|
||||
|
||||
|
||||
@router.post("/accounts", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def self_service_account(request: Request, settings: SettingsDep, service: ServiceDep) -> str:
|
||||
form = await request_form(request, settings)
|
||||
mode = first_form_value(form, "mode")
|
||||
if mode == "managed":
|
||||
account = await run_in_threadpool(service.create_managed_account, None)
|
||||
else:
|
||||
claim_secret = first_form_value(form, "claim_secret")
|
||||
account = await run_in_threadpool(
|
||||
service.create_custom_account,
|
||||
first_form_value(form, "hostname"),
|
||||
claim_secret,
|
||||
None,
|
||||
)
|
||||
if mode and mode != "managed":
|
||||
raise HTTPException(status_code=400, detail="custom hostnames are not supported; create a KarlDNS hostname and use a CNAME")
|
||||
if first_form_value(form, "hostname") or first_form_value(form, "claim_secret"):
|
||||
raise HTTPException(status_code=400, detail="custom hostnames are not supported; create a KarlDNS hostname and use a CNAME")
|
||||
account = await run_in_threadpool(service.create_managed_account, None)
|
||||
return _render_public_home(service, settings, account, None)
|
||||
|
||||
|
||||
@@ -98,7 +65,6 @@ def robots_txt(settings: SettingsDep) -> str:
|
||||
"User-agent: *",
|
||||
f"Disallow: {admin_path}/",
|
||||
"Disallow: /m/",
|
||||
"Disallow: /d/",
|
||||
"Disallow: /u/",
|
||||
"Disallow: /nic/",
|
||||
"Disallow: /api/",
|
||||
|
||||
Reference in new issue
Block a user