You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p><a href="https://db-ip.com/">IP Geolocation by DB-IP</a></p>
26579
+
<p>Country and ASN data licensed CC BY 4.0 by the Number Resource Organization (NRO).</p>
26580
+
</section>
26561
26581
</article>
26562
26582
```
26563
26583
26584
+
**GeoIP attribution content above is canonical β see PART 19: GEOIP β "License & Attribution" for the source of these notices; do not let this copy drift if that section is ever updated.**
26585
+
26564
26586
**Note:** Tor address is NOT shown here. Tor access is available via:
26565
26587
- **Footer**: "Tor Support" link β `/server/help#tor-access` (shown when Tor is enabled)
26566
26588
- **Footer**: "I2P Support" link β `/server/help#i2p-access` (shown when I2P is enabled and running)
@@ -27826,7 +27848,7 @@ Every project MUST include these scheduled tasks:
27826
27848
| `ssl_renewal` | Daily at 03:00 | Renew `{config_dir}/ssl/letsencrypt/{fqdn}/` certs 7 days before expiry | No |
| `cve_update` | Daily at 05:00 | Download/update CVE (NVD) and Trivy vulnerability databases β trivy has no separate scheduled task despite its own directory/config; this task owns it too | Yes |
27830
27852
| `update_check` | Daily at 06:00 | Check release channel for a newer version β notify-only unless `update.auto_install: true` (default false); honors `update.defer_days` | Yes |
27831
27853
| `token_cleanup` | Every 15 minutes | Remove expired API tokens and sessions | No |
27832
27854
| `log_rotation` | Daily at 00:00 | Rotate and compress old logs | No |
@@ -28221,7 +28243,7 @@ All databases come from [sapics/ip-location-db](https://github.com/sapics/ip-loc
28221
28243
| Country | CC BY 4.0 | NRO (RIR whois + geofeed + ASN data, merged) |
28222
28244
| City | CC BY 4.0 | DB-IP |
28223
28245
28224
-
**Required, verbatim, on a page reachable from every screen that displays GeoIP-derived data (e.g. an "About" or footer link) AND in `LICENSE.md`'s third-party attribution section (see PART 2):**
28246
+
**Required, verbatim, on `/server/about` (see "Standard Pages" β /server/about) AND in `LICENSE.md`'s third-party attribution section (see PART 2):**
28225
28247
28226
28248
```html
28227
28249
<a href="https://db-ip.com/">IP Geolocation by DB-IP</a>
@@ -28257,6 +28279,11 @@ server:
28257
28279
deny_countries: []
28258
28280
allow_countries: []
28259
28281
28282
+
# Named, operator-authored country lists for reuse across allow/deny
28283
+
# fields and environments. Ships empty β see "Country Blocking Presets"
28284
+
# below for why no preset is bundled by default.
28285
+
presets: {}
28286
+
28260
28287
# Which databases to download and use - all three are CC BY 4.0 and
28261
28288
# require the attribution above whenever their data is used
28262
28289
databases:
@@ -28274,6 +28301,7 @@ server:
28274
28301
| `geoip.dir` | Directory the downloaded `.mmdb` files live in |
28275
28302
| `geoip.deny_countries` | ISO 3166-1 alpha-2 codes to block; all others allowed |
28276
28303
| `geoip.allow_countries` | ISO 3166-1 alpha-2 codes to allow exclusively; wins if both lists are set |
28304
+
| `geoip.presets` | Named operator-authored country lists (`name -> []code`), for reuse; empty by default β see Country Blocking Presets |
28277
28305
| `geoip.databases.asn` | Enable ASN lookups |
28278
28306
| `geoip.databases.country` | Enable country lookups |
28279
28307
| `geoip.databases.city` | Enable city lookups |
@@ -28294,6 +28322,32 @@ server:
28294
28322
- Tor exit nodes are evaluated by exit-node country, not by any inferred user origin
28295
28323
- Private/internal IPs (RFC 1918, RFC 4193, loopback) are never looked up or country-blocked
28296
28324
28325
+
## Country Blocking Presets (Operator-Defined, Never Auto-Applied)
28326
+
28327
+
**The admin panel MUST let operators save the current `deny_countries` or
28328
+
`allow_countries` selection as a named, reusable preset** (`geoip.presets`,
28329
+
`name -> []code`) β so a list built once can be reapplied to other
28330
+
allow/deny fields or exported/imported across environments without
28331
+
hand-retyping ISO codes each time.
28332
+
28333
+
**No preset ships pre-populated, and this project MUST NOT bundle a
28334
+
hardcoded regulatory country list (e.g. "OFAC sanctioned", "FATF high-risk")
28335
+
as a built-in default.** Every project in this family stays server-agnostic
28336
+
about jurisdiction and use case β sanctions/regulatory lists change over
28337
+
time, differ by regime, and a template-bundled list presented as current
28338
+
compliance guidance would go stale silently and could be relied on past the
28339
+
point it's accurate. That is the same "outcome asserted, mechanism/accuracy
28340
+
unverified" shape already fixed elsewhere in this spec (CVE CPE filtering,
28341
+
Trivy DB source) β bundling a specific sanctions list here would reintroduce
28342
+
it in a compliance-sensitive form.
28343
+
28344
+
**Preset rules:**
28345
+
- A preset is only ever a name plus the country codes the operator entered β the project never fetches, infers, or auto-suggests preset contents from any external source
28346
+
- `deny_countries: []` / `allow_countries: []` remain the defaults on every fresh install regardless of what presets exist β allow all, deny none, unchanged by this feature
28347
+
- Selecting a preset in the admin UI only pre-fills `deny_countries`/`allow_countries` for the operator to review and save; it is never applied automatically or silently
28348
+
- If an operator needs a compliance-driven blocklist, they build and save it themselves as a preset, sourced from their own current legal/compliance review β never from a template default
28349
+
- Presets are a pure config-reuse convenience; the actually-enforced behavior is always driven by `deny_countries`/`allow_countries` at the time of the request, never by the preset name itself
0 commit comments