Files
ServerKit/backend
Juan DenisandClaude Opus 4.8 f76da49ab4 feat(sites): base-domain registry so sites can publish under multiple domains
Managed sites had exactly one base domain (the sites_base_domain setting), so
every site was <slug>.<that-one>. Add a registry (site_base_domains) letting an
operator register several — example.com, toto.com — each with its own DNS mode,
HTTPS state, and DNS provider connection, so a new site can be published under
any of them (a.example.com or a.toto.com), defaulting to the one marked default.

- New SiteBaseDomain model + migration 040 (own dns_provider_config_id + cert
  state per base; exactly one is_default).
- SiteBaseDomainService: add/remove/set_default/update, and ensure_seeded which
  materialises the legacy single sites_base_domain setting into the default row
  the first time a second domain is registered — so old and new never disagree.
- SiteDomainService is now base-aware and back-compatible: subdomain_for(name,
  base), https_enabled(base), dns_mode(base), wildcard_cert_paths(base) and
  give_subdomain(app, base) take an optional base; covering_base(host) picks the
  base (longest match) whose wildcard cert covers a host so vhosts get the right
  per-base cert; base_domain() returns the default and still falls back to the
  legacy setting / SITES_BASE_DOMAIN config for un-migrated & dev installs.

Existing single-base installs are untouched (zero rows -> setting fallback);
45 existing site-domain tests still green. New coverage in
test_site_base_domains.py: seeding, default promotion/demotion, per-base
https/dns-mode/cert, longest-match cover, and give_subdomain under a chosen base.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 00:07:00 -04:00
..