- Admin domain panel gains a blocked-domains textarea (one domain per line); entries and all their subdomains are refused by mgr.AddDomain — the single add path — using label-boundary matching (example.co.uk blocks a.example.co.uk but not forexample.co.uk). Existing domains are untouched; only the add path is guarded. - Save is per-line validated: invalid lines are skipped and reported by their 1-based line numbers in a flash banner, the rest are saved. - Migration v5 seeds a default list (mozilla/github/aws/microsoft/apple/ google/etc.) only when the settings key was never written, so admin edits or a full clear are never re-seeded. - normalizeDomain is rewritten around explicit rules shared by the add path and the blocked list: lowercase, strip all trailing dots, reject any character outside [a-z0-9.-] (never silently strip — pasting a URL is an error), must end with a letter (excludes dotted-quad IPs), must contain a dot (no single-word names), each label non-empty/<=63 and starting+ending with a letter or digit (consecutive hyphens mid-label like xn--p1ai stay legal), total <= 253. No TLD validation. - Tests: db round-trip + v5 seed (fresh/reopen/admin-edit/preexisting-key), matching semantics, parse/save partial validation, validation rules. - docs: architecture.md blocked-domain section.
Documentation
Technical documentation for vpsmgr. All docs are in English.
| Doc | What it covers |
|---|---|
| architecture.md | System design: components, storage, network, security, traffic, image, install/uninstall lifecycle |
| configuration.md | Full reference for /etc/vpsmgr/config.yaml |
| ipv6.md | IPv6 pass-through design: deterministic addresses, prefix support, routing, installer flow |
| development.md | Building, testing, releasing, conventions |
See also AGENTS.md at the repo root — short version aimed at AI coding agents.