mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 00:55:09 -07:00
* [Server/Client/Protocol] Add developer staff role Introduce a Developer staff level (proto flag 32, DB admin bit 8) that sits between admin and moderator: no kick/ban/warn/report/admin powers, but gets server log access via a new developer command container family (GET_SERVER_STATS, VIEWLOG_HISTORY) and an idle-timeout exemption. - Protocol: IsDeveloper flag, developer_commands.proto envelope, Command_GetServerStats/Command_GetLogHistory, Response_GetServerStats, Command_AdjustMod.should_be_developer - Servatrice: fail-closed developer dispatcher, uptime snapshot handler, shared log history handler reuse, bit-8 DB mapping - Client: burgundy pawn/badge/labels/sort order, prepareDeveloperCommand, minimal Developer stats tab, log tab access, promote/demote actions Took 24 minutes Took 18 seconds * [Server/Client/Protocol] Address developer role review feedback Address ZeizaZach's review of the developer staff role: - Nudge the developer log query to exclude private chat and sender IPs (the ModeratorCommand path still sees everything). - Deduplicate Command_GetLogHistory into Command_ViewLogHistory, which now extends both ModeratorCommand (ext) and DeveloperCommand (dev_ext); the client picks the DeveloperCommand-scoped extension by extendee, and the server reads it via the extension number. - Pull the uptime snapshot SQL into Servatrice_DatabaseInterface as getLatestUptimeSnapshot() and widen the reported counters to 64-bit. - Document the admin bitfield (1 admin, 2 moderator, 4 judge, 8 developer) and add a server-side test for the developer command path. * Add missing trailing newline to user_context_menu.cpp * Remove stale includes of deleted command_get_log_history proto The Command_GetLogHistory message was folded into Command_ViewLogHistory, which deleted command_get_log_history.proto, but serversocketinterface still #included its generated header. Fresh CI builds fail on the missing file; local builds masked it by reusing a previously generated header. * [Server] Exclude chat rows when private-chat filter is bypassable A developer who omits log_location entirely — or sends only "chat" — leaves chatType, gameType, roomType all false, so getMessageLogHistory skips the target_type clause and returns every row, private messages included. When !allowPrivateChat the server now forces game+room when no surviving location was requested, guaranteeing the query always carries a target_type restriction. [Client] Demote mod+dev to moderator path in log-tab dispatch The developer command family is strictly weaker than the moderator one (no private chat, no sender_ip, ip filter ignored), so granting the developer bit to an existing moderator must not silently strip their capabilities. useDeveloperCommands is now true only when the user holds the developer bit and not the moderator bit. [Client] Hide the IP-address filter for developer log tab users The developer path ignores the ip_address query field server-side. Showing the field lets a developer type an IP and get results that are silently unfiltered by it rather than an empty result set — reads as a broken filter. Hide labelFindIPAddress/findIPAddress alongside the privateChat checkbox. * Developer pawn is silver. * [Client] Fix indentation of merged Card Art Rules / Developer tabs --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
180 lines
4.9 KiB
Protocol Buffer
180 lines
4.9 KiB
Protocol Buffer
syntax = "proto2";
|
|
import "developer_commands.proto";
|
|
message ModeratorCommand {
|
|
enum ModeratorCommandType {
|
|
BAN_FROM_SERVER = 1000;
|
|
BAN_HISTORY = 1001;
|
|
WARN_USER = 1002;
|
|
WARN_HISTORY = 1003;
|
|
WARN_LIST = 1004;
|
|
VIEWLOG_HISTORY = 1005;
|
|
GRANT_REPLAY_ACCESS = 1006;
|
|
FORCE_ACTIVATE_USER = 1007;
|
|
GET_ADMIN_NOTES = 1008;
|
|
UPDATE_ADMIN_NOTES = 1009;
|
|
ADD_CARD_ART_RULE = 1010;
|
|
REMOVE_CARD_ART_RULE = 1011;
|
|
LIST_CARD_ART_RULES = 1012;
|
|
GET_USER_SESSIONS = 1013;
|
|
GET_USER_ALTS = 1014;
|
|
GET_MODERATOR_LAST_LOGINS = 1015;
|
|
RESET_USER_PASSWORD = 1016;
|
|
REMOVE_USER_AVATAR = 1017;
|
|
REPORT_LIST = 1200;
|
|
REPORT_ASSIGN = 1201;
|
|
REPORT_RESOLVE = 1202;
|
|
REPLAY_DOWNLOAD_BY_GAME_ID = 1203;
|
|
REPORT_USER_INFO = 1204;
|
|
REPORT_STATS = 1205;
|
|
}
|
|
extensions 100 to max;
|
|
}
|
|
|
|
message Command_BanFromServer {
|
|
extend ModeratorCommand {
|
|
optional Command_BanFromServer ext = 1000;
|
|
}
|
|
optional string user_name = 1;
|
|
optional string address = 2;
|
|
optional uint32 minutes = 3;
|
|
optional string reason = 4;
|
|
optional string visible_reason = 5;
|
|
optional string clientid = 6;
|
|
optional uint32 remove_messages = 7;
|
|
}
|
|
|
|
message Command_GetBanHistory {
|
|
extend ModeratorCommand {
|
|
optional Command_GetBanHistory ext = 1001;
|
|
}
|
|
optional string user_name = 1;
|
|
}
|
|
|
|
message Command_WarnUser {
|
|
extend ModeratorCommand {
|
|
optional Command_WarnUser ext = 1002;
|
|
}
|
|
|
|
optional string user_name = 1;
|
|
optional string reason = 2;
|
|
optional string clientid = 3;
|
|
optional uint32 remove_messages = 4;
|
|
}
|
|
|
|
message Command_GetWarnHistory {
|
|
extend ModeratorCommand {
|
|
optional Command_GetWarnHistory ext = 1003;
|
|
}
|
|
optional string user_name = 1;
|
|
}
|
|
|
|
message Command_GetWarnList {
|
|
extend ModeratorCommand {
|
|
optional Command_GetWarnList ext = 1004;
|
|
}
|
|
optional string mod_name = 1;
|
|
optional string user_name = 2;
|
|
optional string user_clientid = 3;
|
|
}
|
|
|
|
message Command_ViewLogHistory {
|
|
extend ModeratorCommand {
|
|
optional Command_ViewLogHistory ext = 1005;
|
|
}
|
|
extend DeveloperCommand {
|
|
optional Command_ViewLogHistory dev_ext = 1001;
|
|
}
|
|
optional string user_name = 1; // user that created message
|
|
optional string ip_address = 2; // ip address of user that created message
|
|
optional string game_name = 3; // client id of user that created the message
|
|
optional string game_id = 4; // game number the message was sent to
|
|
optional string message = 5; // raw message that was sent
|
|
repeated string log_location = 6; // destination of message (ex: main room, game room, private chat)
|
|
required uint32 date_range = 7; // the length of time (in minutes) to look back for
|
|
optional uint32 maximum_results = 8; // the maximum number of query results
|
|
}
|
|
|
|
message Command_GrantReplayAccess {
|
|
extend ModeratorCommand {
|
|
optional Command_GrantReplayAccess ext = 1006;
|
|
}
|
|
optional uint32 replay_id = 1;
|
|
optional string moderator_name = 2;
|
|
}
|
|
|
|
message Command_ForceActivateUser {
|
|
extend ModeratorCommand {
|
|
optional Command_ForceActivateUser ext = 1007;
|
|
}
|
|
optional string username_to_activate = 1;
|
|
optional string moderator_name = 2;
|
|
}
|
|
|
|
message Command_GetAdminNotes {
|
|
extend ModeratorCommand {
|
|
optional Command_GetAdminNotes ext = 1008;
|
|
}
|
|
optional string user_name = 1;
|
|
}
|
|
|
|
message Command_UpdateAdminNotes {
|
|
extend ModeratorCommand {
|
|
optional Command_UpdateAdminNotes ext = 1009;
|
|
}
|
|
optional string user_name = 1;
|
|
optional string notes = 2;
|
|
}
|
|
|
|
message Command_AddCardArtRule {
|
|
extend ModeratorCommand {
|
|
optional Command_AddCardArtRule ext = 1010;
|
|
}
|
|
|
|
optional string card_name = 1;
|
|
optional string card_provider_id = 2;
|
|
optional string mode = 3; // "ALLOW" or "DENY"
|
|
optional string reason = 4;
|
|
}
|
|
|
|
message Command_RemoveCardArtRule {
|
|
extend ModeratorCommand {
|
|
optional Command_RemoveCardArtRule ext = 1011;
|
|
}
|
|
|
|
optional string card_name = 1;
|
|
optional string card_provider_id = 2;
|
|
}
|
|
|
|
message Command_ListCardArtRules {
|
|
extend ModeratorCommand {
|
|
optional Command_ListCardArtRules ext = 1012;
|
|
}
|
|
}
|
|
|
|
message Command_GetUserSessions {
|
|
extend ModeratorCommand {
|
|
optional Command_GetUserSessions ext = 1013;
|
|
}
|
|
optional string user_name = 1;
|
|
optional uint32 limit = 2 [default = 110];
|
|
}
|
|
|
|
message Command_GetUserAlts {
|
|
extend ModeratorCommand {
|
|
optional Command_GetUserAlts ext = 1014;
|
|
}
|
|
optional string user_name = 1;
|
|
}
|
|
|
|
message Command_GetModeratorLastLogins {
|
|
extend ModeratorCommand {
|
|
optional Command_GetModeratorLastLogins ext = 1015;
|
|
}
|
|
}
|
|
|
|
message Command_RemoveUserAvatar {
|
|
extend ModeratorCommand {
|
|
optional Command_RemoveUserAvatar ext = 1017;
|
|
}
|
|
optional string user_name = 1;
|
|
}
|