refactor: rename FileAllowlist to ManualAllowlist

"File" described the storage, which is the least interesting thing about
it. The distinction from LoginAllowlist is provenance: one is declared by
an operator, the other is earned by authenticating. Both are IP
allowlists, so IpAllowlist would not have separated them either.

"Manual" matches vocabulary already in the subsystem -- BanReasons.Manual
is the operator-declared ban, and the docs already describe this list as
"an operator said so".

Also moves both files into Network/ManualAllowlist/, mirroring
Network/LoginAllowlist/. They no longer belong under Blocklist/ now that
the config is decoupled and BanExemptions is the consumer that cannot be
served any other way. Namespace is unchanged, so no using directives move.

Configuration/ip-allowlist.json keeps its name: it is named for the
ip-allowlist*.txt files it governs, whose names the generator owns, and
that grouping is what an operator browsing Configuration/ actually sees.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kamron Batman 2026-08-13 21:26:06 -07:00
parent b8b5a1e0c9
commit bd187bd252
No known key found for this signature in database
GPG key ID: 7D81DF26D9A5D94A
11 changed files with 53 additions and 53 deletions

View file

@ -75,7 +75,7 @@ public record BlocklistSettings
/// <summary>
/// Deprecated: moved to <c>files</c> in <c>ip-allowlist.json</c>, because the blocklist is only one of
/// two consumers. Still bound so <see cref="FileAllowlist"/> can warn an operator who set it here
/// two consumers. Still bound so <see cref="ManualAllowlist"/> can warn an operator who set it here
/// instead of dropping the carve-out silently. Null when absent, which is the normal case.
/// </summary>
[JsonPropertyName("allowlistFiles")]