Clone
3
Phase 6
hobokenchicken edited this page 2026-06-28 19:20:43 -04:00
Phase 6: Security, Permissions & Polish
Phase 6 adds roles & permissions, push notifications, WebAuthn passkeys, and REST API documentation.
Features Implemented
Roles & Permissions
| Feature | Status | Description |
|---|---|---|
| Permission bitflags | ✅ | 11 permissions from VIEW_CHANNEL to SHARE_SCREEN |
| Permission checker | ✅ | Aggregates permissions from all user roles |
| Permission middleware | ✅ | RequirePermission middleware for route protection |
| Role CRUD | ✅ | Create, list, update, delete roles per server |
| Member role assignment | ✅ | Assign/remove roles from members |
| Default @everyone role | ✅ | Seeded on server creation with basic permissions |
| Frontend role manager | ✅ | Role CRUD UI with permission checkboxes |
| Member role assign | ✅ | UI to assign roles to members |
Push Notifications
| Feature | Status | Description |
|---|---|---|
| VAPID key support | ✅ | Backend ready for VAPID keys |
| Push subscription CRUD | ✅ | Subscribe/unsubscribe endpoints |
| Push sender | ✅ | SendPush function for mentioned users |
| Push subscription table | ✅ | DB storage for push subscriptions |
| Frontend push store | ✅ | Subscribe/unsubscribe with VAPID key fetch |
| Settings UI toggle | ✅ | [ENABLE PUSH] / [DISABLE PUSH] in UserSettings |
| Service worker | ✅ | Handles push events and notification clicks |
| Mention parsing | ✅ | Parses @user, @everyone, @role and dispatches push |
WebAuthn Passkeys
| Feature | Status | Description |
|---|---|---|
| Backend complete | ✅ | Full registration and login begin/finish flow |
| Credential storage | ✅ | webauthn_credentials table |
| Challenge store | ✅ | In-memory challenge store with eviction |
| Frontend register | ✅ | [REGISTER PASSKEY] button in UserSettings |
| Frontend login | ✅ | [SIGN IN WITH PASSKEY] button on LoginForm |
REST API Documentation
| Feature | Status | Description |
|---|---|---|
| Swagger annotations | ✅ | Full @Summary/@Router/@Param/@Success/@Security on all handlers |
| Swagger UI | ✅ | Served at /docs endpoint |
| Generated spec | ✅ | docs/swagger.json, docs/swagger.yaml with all endpoints |
| Makefile target | ✅ | make docs to regenerate |
API Endpoints
Roles
# Create role
POST /api/v1/servers/{serverID}/roles
{ "name": "Moderator", "color": "#fe8019", "permissions": 76, "position": 1 }
# List roles
GET /api/v1/servers/{serverID}/roles
# Update role
PATCH /api/v1/servers/{serverID}/roles/{roleID}
# Delete role
DELETE /api/v1/servers/{serverID}/roles/{roleID}
# Assign roles to member
PUT /api/v1/servers/{serverID}/members/{userID}/roles
{ "role_ids": ["uuid1", "uuid2"] }
Push
# Get VAPID public key
GET /api/v1/push/vapid-public-key
# Subscribe to push
POST /api/v1/push/subscribe
{ "endpoint": "...", "p256dh": "...", "auth": "..." }
# Unsubscribe
POST /api/v1/push/unsubscribe
{ "endpoint": "..." }
WebAuthn
# Begin passkey registration
POST /api/v1/auth/webauthn/register/begin
# Finish passkey registration
POST /api/v1/auth/webauthn/register/finish
# Begin passkey login
POST /api/v1/auth/webauthn/login/begin
# Finish passkey login
POST /api/v1/auth/webauthn/login/finish
Swagger UI
Access the interactive API documentation at:
http://localhost:8080/docs
Permission Constants
| Permission | Bit | Value |
|---|---|---|
| VIEW_CHANNEL | 0 | 1 |
| SEND_MESSAGES | 1 | 2 |
| MANAGE_MESSAGES | 2 | 4 |
| KICK_MEMBERS | 3 | 8 |
| BAN_MEMBERS | 4 | 16 |
| MANAGE_SERVER | 5 | 32 |
| MANAGE_CHANNELS | 6 | 64 |
| ADMINISTRATOR | 7 | 128 |
| CONNECT_VOICE | 8 | 256 |
| SPEAK_VOICE | 9 | 512 |
| SHARE_SCREEN | 10 | 1024 |