Cockatrice/servatrice/migrations
BruebachL 05dcde69db
[Server] Gate room channels on privilege levels (#7477)
* [Server] Gate room channels on privilege levels

* [Server] Filter channel catalog per user, split read/write gating, add banners

- Server_Room::getInfo() now takes the requesting user and only lists
  channels that user may read. Previously every room member received the
  full catalog (e.g. the moderators channel) while message delivery was
  already gated, so restricted channels were visible but silent.
- Split channel access into mayReadChannel/mayWriteChannel: history
  replay, catalog listing, and event fan-out use the read level
  (access_level); Command_RoomChannelSay uses the write level
  (write_access_level, falling back to the read level when unset).
- Plumb write_access_level and banner_message through both room sources
  (SQL rooms_channels table and config-file channels via writeaccess
  and banner keys).
- Schema 38 -> 39: add write_access_level (NULL means inherit the read
  level) and banner_message columns; also widen access_level to the
  full six-value privilege enum to match the 37 -> 38 migration.

* Fixup: evaluate channel access per user flag instead of ladder

User flags are independent bits: IsDeveloper does not imply
IsModerator/IsAdmin, so developer-only users must not reach
moderator/admin channels. Replace the userPrivilegeLevel ladder with
hasChannelPrivilege: moderator channels need IsModerator (admins hold
it alongside IsAdmin), admin channels need IsAdmin, developer channels
need IsDeveloper or IsAdmin, judge channels admit IsJudge/IsModerator.
Covers catalog filtering, history replay, write gating and fan-out,
and corrects the ini example and proto docs.

* [Server] Make channel privilege helpers static per review

* [Server] Fail closed on unknown channel access levels per review

- roomChannelAccessFromKey returns nullopt for unknown keywords
  instead of silently falling back to Public
- skip channels with unknown read/write levels with qWarning, empty
  read defaults to Public, empty write means no override
- mayWriteChannel now also requires read access so write-below-read
  configs cannot post into invisible channels

* [Server] Remove stray conflict marker in channel replay comment

* [Server] Fix servatrice.cpp formatting per clang-format-18

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
Co-authored-by: BruebachL <bruebachl@cockatrice.example>
2026-10-16 22:46:38 +02:00
..
servatrice_0000_to_0001.sql Implement migrations; fix #153 2015-05-31 17:36:15 +02:00
servatrice_0001_to_0002.sql Refactor servatrice email send 2015-07-25 18:48:34 +02:00
servatrice_0002_to_0003.sql Add database migration script for client id 2015-08-09 08:47:21 -04:00
servatrice_0003_to_0004.sql Add clientid field to sessions table. 2015-08-11 12:45:04 -04:00
servatrice_0004_to_0005.sql Add ability to ban by client id 2015-08-14 00:06:37 -04:00
servatrice_0005_to_0006.sql Add last_login column to user table and populate upon login 2015-08-15 03:00:34 -04:00
servatrice_0006_to_0007.sql Define permission levels for rooms 2015-08-15 21:00:51 -04:00
servatrice_0007_to_0008.sql Added user analytics table to database 2015-09-08 14:56:10 -04:00
servatrice_0008_to_0009.sql Added chat history to a room that is displayed on join. 2015-09-14 17:54:04 -04:00
servatrice_0009_to_0010.sql Added official warning messages moderators can use to inform users 2015-09-22 22:27:46 -04:00
servatrice_0010_to_0011.sql Updated cockatrice_warnings table to use id column as primary key 2015-09-25 07:35:23 -04:00
servatrice_0011_to_0012.sql Updating schema version to 12 and adding migration script. 2015-11-08 03:05:12 -08:00
servatrice_0012_to_0013.sql Move schema to Innodb and add FKs 2016-02-17 21:24:28 +01:00
servatrice_0013_to_0014.sql Implementation of websockets in servatrice and test js client 2016-06-26 19:38:53 +02:00
servatrice_0014_to_0015.sql Update servatrice to respect server id when doing room information lookups 2016-07-21 09:09:06 -04:00
servatrice_0015_to_0016.sql Update maint script files 2016-07-21 10:38:46 -04:00
servatrice_0016_to_0017.sql fix #2118 (#2119) 2016-08-02 21:58:56 -04:00
servatrice_0017_to_0018.sql Added user privilege level (#2228) 2016-10-26 02:07:42 -04:00
servatrice_0018_to_0019.sql Update sessions table columns for consistency (#2299) 2016-12-08 10:43:11 +01:00
servatrice_0019_to_0020.sql Added privilege level start/end columns (#2328) 2016-12-30 16:45:28 -08:00
servatrice_0020_to_0021.sql Simpler forgot password functionality (#2393) 2017-02-15 17:41:40 -05:00
servatrice_0021_to_0022.sql Server audit table (#2423) 2017-02-25 13:48:31 -05:00
servatrice_0022_to_0023.sql Smarter rooms (#2484) 2017-03-22 21:45:16 -04:00
servatrice_0023_to_0024.sql Even out db collation to utfmb4_unicode_ci; fix #2835 ; fix #2218 (#2915) 2018-01-13 04:02:22 -05:00
servatrice_0024_to_0025.sql log moderation stats in the uptime table (#3215) 2018-05-02 17:31:54 -04:00
servatrice_0025_to_0026.sql ensure column ordering is consistent (#3249) 2018-05-18 18:07:39 -04:00
servatrice_0026_to_0027.sql Issue 3015 - store timestamp when password is reset (#3863) 2019-11-22 23:52:45 -05:00
servatrice_0027_to_0028.sql deprecate the gender property from the protocol entirely (#4496) 2021-12-14 01:51:57 -05:00
servatrice_0028_to_0029.sql add database migration from blob to mediumblob (#4568) 2022-02-09 20:11:13 +01:00
servatrice_0029_to_0030.sql Support Mod/Admin Notes Section (#5361) 2024-12-28 18:05:49 +00:00
servatrice_0030_to_0031.sql Improve Database Backup Speed (#5400) 2025-01-01 00:28:57 -05:00
servatrice_0031_to_0032.sql Support more indices (#5503) 2025-01-20 01:42:24 -05:00
servatrice_0032_to_0033.sql Support more indices (#5505) 2025-01-25 04:16:41 +00:00
servatrice_0033_to_0034.sql Add custom server-side pawn colors (#5543) 2025-02-02 03:25:25 +00:00
servatrice_0034_to_0035.sql [UserListDelegate] Consider providerId (#7018) 2026-06-27 11:23:55 -04:00
servatrice_0035_to_0036.sql [Server/Client/Protocol] Reporting users + moderation queue functionality (#7091) 2026-08-21 15:00:13 +02:00
servatrice_0036_to_0037.sql [Server] Add deck share links and public deck visibility (#7241) 2026-09-20 20:22:16 +02:00
servatrice_0037_to_0038.sql [Server] Add room chat channels with per-channel fan-out and history (#7476) 2026-10-16 22:46:38 +02:00
servatrice_0038_to_0039.sql [Server] Gate room channels on privilege levels (#7477) 2026-10-16 22:46:38 +02:00