mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-09 05:24:49 +09:00
Encryption-at-rest (#16/#17) for the two provider stores still in plaintext: - crypto.py: add decrypt_secret_safe (decrypt with plaintext fallback) + is_encrypted. - DNS providers: encrypt api_key/api_secret on write; decrypt at point-of-use via _api_key/_api_secret in the Cloudflare/Route53/DigitalOcean/GoDaddy builders. - Storage: encrypt secrets in save_config; decrypt in get_config. - Idempotent encrypt_legacy_secrets() migrations run on startup, encrypting any pre-existing plaintext in place. Legacy values keep working via the decrypt fallback, so there is no flag day. Namecheap registrar: - RegistrarConnection.config_json column for non-secret extras (username, client_ip). - RegistrarService: Namecheap XML domains.getList (portfolio + expiry), test, and MM/DD/YYYY -> ISO date parsing. - Frontend: namecheap tile is live; the registrar form is provider-aware (GoDaddy key+secret vs Namecheap key + username + whitelisted IP). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>