feat(admission): add scheduled group access
This commit is contained in:
@@ -16,7 +16,7 @@ The bot creates private login links in response to `/register` and `/account`. D
|
||||
|
||||
Velocity sends the authenticated Java UUID, current username, source IP, server ID, request ID, and occurrence time. The API matches UUID first. Username fallback is allowed only when the stored account has no UUID, after which UUID and canonical username are updated.
|
||||
|
||||
The admission decision is fail closed. Unknown players, disabled effective groups, disallowed confirmed VPN/proxy/Tor connections, invalid responses, expired requests, authentication failures, and unavailable API responses are denied. Registration, group-access, and anonymized-network denials use independent operator-configured messages; transport and service failures retain the plugin's local fallback. After admission succeeds, `PostLoginEvent` reports a confirmed proxy connection through a fresh, authenticated, replay-protected request. Connection telemetry is best effort and never disconnects an already admitted player.
|
||||
The admission decision is fail closed. Unknown players, disabled effective groups, out-of-window scheduled groups, disallowed confirmed VPN/proxy/Tor connections, invalid responses, expired requests, authentication failures, and unavailable API responses are denied. Policy order is fixed: registration, enabled effective group, recurring UTC schedule, then anonymized-network exception. Zero schedule windows mean no time restriction; configured starts are inclusive and ends are exclusive. Scheduling is checked only at login and never disconnects an admitted player. Registration, group-access, schedule, and anonymized-network denials use independent operator-configured static templates; validated variables provide player, group, and next-window UTC guidance without executable expressions. Transport and service failures retain the plugin's local fallback. After admission succeeds, `PostLoginEvent` reports a confirmed proxy connection through a fresh, authenticated, replay-protected request. Connection telemetry is best effort and never disconnects an already admitted player.
|
||||
|
||||
## Trust boundaries
|
||||
|
||||
@@ -32,6 +32,7 @@ The admission decision is fail closed. Unknown players, disabled effective group
|
||||
- A Discord user ID maps to one user.
|
||||
- An active Minecraft UUID or case-insensitive username maps to one account.
|
||||
- A user has at most one active primary Minecraft account.
|
||||
- Group schedule boundaries are integer UTC minutes of the recurring Monday-based week; malformed or overlapping persisted windows fail closed during admission.
|
||||
- Removed accounts are soft deleted to retain audit history.
|
||||
- Audit events are CloudEvents-shaped, append-only application records.
|
||||
- `published_at` reserves an outbox-style path for later Kafka publishing.
|
||||
|
||||
Reference in New Issue
Block a user