Commit Graph

10 Commits

Author SHA1 Message Date
3nd3r 9570283ad8 Fix #10: Persist bans and mutes to database
- Add Ban and Mute models to models.py
- Load persisted bans/mutes from DB on app startup in create_app()
- Persist ban to DB on mod_ban and mod_kickban
- Persist/delete mute to DB on mod_mute toggle
- Bans and mutes now survive server restarts
2026-04-12 12:59:20 -05:00
3nd3r b38eb01e27 Fix #7: Replace CORS wildcard with configurable origins
- cors_allowed_origins now uses CORS_ORIGINS from config (default: None)
- None restricts to same-origin only, blocking cross-site WebSocket hijacking
- Set CORS_ORIGINS in config.json or env var to allow specific domains
2026-04-12 12:55:58 -05:00
3nd3r cdfbb666b9 Fix #5: Fix broken E2E encryption for user-to-user PMs
- User-to-user PMs now use a server-derived shared room key (HMAC-SHA256)
  instead of each user's personal PBKDF2 key (which differed per user,
  making cross-user decryption impossible)
- Server sends room_key in pm_ready, pm_invite, and pm/history responses
- crypto.js: add importKeyBase64() for importing server-provided keys
- chat.js: use sharedKey for encrypt/decrypt in user-to-user PMs
- Violet AI transit encryption still uses personal key (unchanged)
- PM history decryption now handles errors gracefully per-message
- Encodes otherUser in history URL to prevent injection
2026-04-12 12:54:09 -05:00
3nd3r a0a96addb6 Fix #4: Don't broadcast PM invite when target is Violet
- Only emit pm_invite when target_sid exists (real user)
- Violet has no socket session, so emitting to None would broadcast
  to all connected clients, leaking who is chatting with the AI
2026-04-12 12:51:55 -05:00
3nd3r 8da91ebf70 Fix #2: Validate PM room join authorization
- Track pending PM invitations per socket session
- pm_accept now rejects room joins unless user has a valid invite
- Clean up pending invites on disconnect
- Prevents eavesdropping on other users' PM conversations
2026-04-12 12:50:47 -05:00
3nd3r 99859f009f Fix #1+#8: Extract shared config module, unify JWT secret
- Create config.py with shared constants, AES-GCM helpers, and JWT helpers
- app.py and routes.py now import from the single source of truth
- Eliminates JWT secret mismatch (routes.py had hardcoded default)
- Removes all duplicate _issue_jwt, _verify_jwt, _aesgcm_encrypt,
  _aesgcm_decrypt definitions
- start.py also uses shared config loader
2026-04-12 12:49:44 -05:00
Antigravity bff5afc366 Implement JSON config system and AI PM integration 2026-04-12 18:09:05 +01:00
Antigravity 1537d8518e Fix syntax error in pm_message 2026-04-12 18:05:42 +01:00
Antigravity 2a3f22a051 Update AI model to valid Ollama path 2026-04-12 18:04:21 +01:00
ComputerTech ad510c57e1 Initial commit: SexyChat (Aphrodite) v1.0 2026-04-12 17:55:40 +01:00