SnapOtter
db6f7bf38a
feat(enterprise): add IP allowlisting with CIDR matching and Redis cache
Enterprise-gated onRequest hook that restricts API access to
configured CIDR ranges using Node 22's native BlockList.
- Plugin (ip-allowlist.ts): builds a BlockList from the ipAllowlist
setting, caches in-process, syncs across instances via Redis pub/sub.
Exempt paths for health probes, SCIM, SAML/OIDC callbacks.
Handles IPv4-mapped IPv6 (::ffff:x.x.x.x) transparently.
- Admin API (enterprise/ip-allowlist.ts): GET/PUT endpoints gated by
security:manage permission and ip_allowlist feature flag. Validates
CIDRs, prevents self-lockout, emits IP_ALLOWLIST_UPDATED audit event.
- 32 unit tests covering CIDR matching, validation, exempt paths, IPv6,
and edge cases (/0, /32, mapped addresses).
2026-06-13 22:54:06 +08:00
..
2026-05-09 09:02:29 +08:00
2026-05-13 14:18:49 +08:00
2026-06-13 10:17:13 +08:00
2026-06-13 10:15:23 +08:00
2026-04-26 12:03:08 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 10:15:23 +08:00
2026-05-09 09:02:29 +08:00
2026-06-13 10:19:00 +08:00
2026-06-13 10:19:06 +08:00
2026-06-13 16:57:20 +08:00
2026-05-09 09:02:29 +08:00
2026-06-13 16:48:09 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 10:15:23 +08:00
2026-05-09 07:35:27 +08:00
2026-06-13 10:19:47 +08:00
2026-06-13 10:15:23 +08:00
2026-05-09 09:02:29 +08:00
2026-05-06 21:38:12 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 17:07:39 +08:00
2026-06-13 16:35:28 +08:00
2026-06-13 16:20:24 +08:00
2026-06-13 16:22:01 +08:00
2026-06-13 10:36:01 +08:00
2026-05-13 21:33:50 +08:00
2026-06-13 22:20:22 +08:00
2026-05-09 09:02:29 +08:00
2026-06-06 19:37:29 +08:00
2026-05-09 07:35:27 +08:00
2026-05-09 09:02:29 +08:00
2026-06-13 10:15:23 +08:00
2026-05-09 13:03:57 +08:00
2026-05-09 13:03:57 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 22:54:06 +08:00
2026-05-08 16:01:46 +08:00
2026-06-13 22:49:00 +08:00
2026-06-13 10:17:13 +08:00
2026-04-06 12:53:53 +08:00
2026-04-23 17:12:02 +08:00
2026-06-13 10:18:55 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 17:07:39 +08:00
2026-06-13 10:17:13 +08:00
2026-06-13 10:17:13 +08:00
2026-06-13 10:17:13 +08:00
2026-06-13 17:07:39 +08:00
2026-05-09 09:02:29 +08:00
2026-06-13 10:15:23 +08:00
2026-06-06 20:27:48 +08:00
2026-06-06 16:05:59 +08:00
2026-06-13 10:19:47 +08:00
2026-05-09 07:35:27 +08:00
2026-05-09 09:02:29 +08:00
2026-05-09 07:35:27 +08:00
2026-06-13 10:19:06 +08:00
2026-06-13 10:15:23 +08:00
2026-06-13 10:15:23 +08:00
2026-04-22 18:10:04 +08:00
2026-06-13 10:17:13 +08:00
2026-06-13 10:19:06 +08:00
2026-06-13 16:49:47 +08:00