mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-21 09:05:10 -07:00
Some checks are pending
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker Image / amd64 & arm64 (push) Waiting to run
* [Server/Client/Protocol] Reporting users + moderation queue functionality Took 6 minutes Took 3 minutes Took 8 seconds Took 11 minutes Took 12 minutes Took 7 minutes Took 15 seconds Took 2 minutes Took 1 minute Took 30 seconds Took 16 seconds * CI Fix Took 6 minutes * CI Fix Took 6 minutes * [Protocol] Add moderation investigation commands Adds the protocol layer for the moderation investigation suite: - Command_GetUserSessions/GetUserAlts/GetModeratorLastLogins/ResetUserPassword/RemoveUserAvatar (1013-1017) - Response extensions 1215-1219 with ServerInfo messages for sessions, alts, and staff logins - last_login on Response_ReportUserInfo and warning_il on Response_WarnList Took 2 minutes * [Utility] Add warning categories parser with infraction levels Parses the server's 'officialwarnings' setting (comma-separated, optional '|IL' suffix) into WarningCategory structs so the client can display the infraction level of each warning category. Includes GTest coverage. * [Server] Add moderation investigation tools Implements the server side of the moderation suite: - getUserSessions/getUserAlts/getModeratorLastLogins/removeUserAvatar DB methods - Handlers for all five new commands with audit records (PASSWORD_RESET, REMOVE_USER_AVATAR); password resets return a generated temporary password - cmdGetWarnList now reports per-category infraction levels from the officialwarnings setting; cmdReportUserInfo reports last_login - Update servatrice.ini.example with the warning taxonomy - Password/avatar mutations report RespNameNotFound when the user does not exist * [Client] Add moderation tab with investigate, password reset, and avatar removal - New Moderation tab: search a user to show account info, alternate accounts, login sessions, and staff last logins; actions to reset the user's password (shows the generated temporary password) and remove the user's avatar - 'Investigate user' entry in the user context menu opens the tab pre-loaded for that user - Warning dialog shows the infraction level of each warning category - Tab wired into TabSupervisor with a moderator-gated menu action, shortcut, and tabs.ini persistence (default closed) * [Server/Client/Protocol] Address PR #7091 review: security, bug, and perf fixes Security: - Promote RESET_USER_PASSWORD to admin-only dispatch (was moderator-accessible) - Reject password reset on users with equal/higher privilege than caller - Notify affected user via Event_NotifyUser::CUSTOM when password is reset - Add server-side category whitelist for reports - Drop reporter name fallback in comment/details authorization (ID-only) - Force password change: new DB column + login enforcement + client disconnect Bugs: - XSS via QTextEdit::append() → insertPlainText() in report tab and utils - allNotified initialized to true even with empty recipients list - Warning combo box: use currentData() instead of baked-in display text - Report resolution now records who resolved (resolved_by column + audit) Performance: - IP-correlation subquery: add 6-month window + LIMIT 200 - getUserSessions: clamp limit to 500 Non-blocking: - Palette-aware colors in report_utils.cpp (dark/light mode) - Report list pagination: offset/limit fields + total_count in response - SessionCommand enum gap comment for reserved values 1201-1203 Schema: 36→37 (force_password_change), 37→38 (resolved_by) Took 12 minutes Took 16 seconds * Fix macOs pedantry Took 5 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
233 lines
7.5 KiB
CMake
233 lines
7.5 KiB
CMake
# CMakeLists for common directory
|
|
#
|
|
# provides the protobuf interfaces
|
|
|
|
set(PROTO_FILES
|
|
admin_commands.proto
|
|
card_attributes.proto
|
|
color.proto
|
|
command_attach_card.proto
|
|
command_change_zone_properties.proto
|
|
command_concede.proto
|
|
command_create_arrow.proto
|
|
command_create_counter.proto
|
|
command_create_token.proto
|
|
command_deck_del.proto
|
|
command_deck_del_dir.proto
|
|
command_deck_download.proto
|
|
command_deck_list.proto
|
|
command_deck_new_dir.proto
|
|
command_deck_select.proto
|
|
command_deck_upload.proto
|
|
command_del_counter.proto
|
|
command_delete_arrow.proto
|
|
command_draw_cards.proto
|
|
command_dump_zone.proto
|
|
command_flip_card.proto
|
|
command_game_say.proto
|
|
command_inc_card_counter.proto
|
|
command_inc_counter.proto
|
|
command_kick_from_game.proto
|
|
command_leave_game.proto
|
|
command_move_card.proto
|
|
command_mulligan.proto
|
|
command_next_turn.proto
|
|
command_ready_start.proto
|
|
command_replay_delete_match.proto
|
|
command_replay_download.proto
|
|
command_replay_download_by_game_id.proto
|
|
command_replay_get_code.proto
|
|
command_replay_list.proto
|
|
command_replay_modify_match.proto
|
|
command_replay_submit_code.proto
|
|
command_report.proto
|
|
command_report_add_comment.proto
|
|
command_report_assign.proto
|
|
command_report_details.proto
|
|
command_report_list.proto
|
|
command_report_my_list.proto
|
|
command_report_resolve.proto
|
|
command_report_stats.proto
|
|
command_report_user_info.proto
|
|
command_reveal_cards.proto
|
|
command_reverse_turn.proto
|
|
command_roll_die.proto
|
|
command_set_active_phase.proto
|
|
command_set_card_attr.proto
|
|
command_set_card_counter.proto
|
|
command_set_counter.proto
|
|
command_set_playmat.proto
|
|
command_set_sideboard_lock.proto
|
|
command_set_sideboard_plan.proto
|
|
command_shuffle.proto
|
|
command_undo_draw.proto
|
|
commands.proto
|
|
context_concede.proto
|
|
context_connection_state_changed.proto
|
|
context_deck_select.proto
|
|
context_move_card.proto
|
|
context_mulligan.proto
|
|
context_ping_changed.proto
|
|
context_ready_start.proto
|
|
context_set_sideboard_lock.proto
|
|
context_undo_draw.proto
|
|
event_add_to_list.proto
|
|
event_attach_card.proto
|
|
event_change_zone_properties.proto
|
|
event_connection_closed.proto
|
|
event_create_arrow.proto
|
|
event_create_counter.proto
|
|
event_create_token.proto
|
|
event_del_counter.proto
|
|
event_delete_arrow.proto
|
|
event_destroy_card.proto
|
|
event_draw_cards.proto
|
|
event_dump_zone.proto
|
|
event_flip_card.proto
|
|
event_game_closed.proto
|
|
event_game_host_changed.proto
|
|
event_game_joined.proto
|
|
event_game_log_notice.proto
|
|
event_game_say.proto
|
|
event_game_state_changed.proto
|
|
event_game_state_changed.proto
|
|
event_join.proto
|
|
event_join_room.proto
|
|
event_kicked.proto
|
|
event_leave.proto
|
|
event_leave_room.proto
|
|
event_list_games.proto
|
|
event_list_rooms.proto
|
|
event_move_card.proto
|
|
event_notify_user.proto
|
|
event_player_properties_changed.proto
|
|
event_remove_from_list.proto
|
|
event_remove_messages.proto
|
|
event_replay_added.proto
|
|
event_reveal_cards.proto
|
|
event_reverse_turn.proto
|
|
event_roll_die.proto
|
|
event_room_say.proto
|
|
event_server_complete_list.proto
|
|
event_server_identification.proto
|
|
event_server_message.proto
|
|
event_server_shutdown.proto
|
|
event_set_active_phase.proto
|
|
event_set_active_player.proto
|
|
event_set_card_attr.proto
|
|
event_set_card_counter.proto
|
|
event_set_counter.proto
|
|
event_shuffle.proto
|
|
event_user_joined.proto
|
|
event_user_left.proto
|
|
event_user_message.proto
|
|
game_commands.proto
|
|
game_event.proto
|
|
game_event_container.proto
|
|
game_event_context.proto
|
|
game_replay.proto
|
|
isl_message.proto
|
|
moderator_commands.proto
|
|
move_card_to_zone.proto
|
|
response.proto
|
|
response_activate.proto
|
|
response_adjust_mod.proto
|
|
response_ban_history.proto
|
|
response_card_art_rule_entry.proto
|
|
response_deck_download.proto
|
|
response_deck_list.proto
|
|
response_deck_upload.proto
|
|
response_dump_zone.proto
|
|
response_forgotpasswordrequest.proto
|
|
response_get_admin_notes.proto
|
|
response_get_games_of_user.proto
|
|
response_get_user_info.proto
|
|
response_join_room.proto
|
|
response_list_users.proto
|
|
response_login.proto
|
|
response_password_salt.proto
|
|
response_register.proto
|
|
response_replay_download.proto
|
|
response_replay_download_by_game_id.proto
|
|
response_replay_get_code.proto
|
|
response_replay_list.proto
|
|
response_report_details.proto
|
|
response_report_list.proto
|
|
response_report_my_list.proto
|
|
response_report_stats.proto
|
|
response_report_user_info.proto
|
|
response_moderator_last_logins.proto
|
|
response_remove_user_avatar.proto
|
|
response_reset_user_password.proto
|
|
response_user_alts.proto
|
|
response_user_sessions.proto
|
|
response_viewlog_history.proto
|
|
response_warn_history.proto
|
|
response_warn_list.proto
|
|
room_commands.proto
|
|
room_event.proto
|
|
server_message.proto
|
|
serverinfo_arrow.proto
|
|
serverinfo_ban.proto
|
|
serverinfo_card.proto
|
|
serverinfo_cardcounter.proto
|
|
serverinfo_chat_message.proto
|
|
serverinfo_counter.proto
|
|
serverinfo_deckstorage.proto
|
|
serverinfo_game.proto
|
|
serverinfo_gametype.proto
|
|
serverinfo_moderator_login.proto
|
|
serverinfo_player.proto
|
|
serverinfo_playerping.proto
|
|
serverinfo_playerproperties.proto
|
|
serverinfo_replay.proto
|
|
serverinfo_replay_match.proto
|
|
serverinfo_report.proto
|
|
serverinfo_room.proto
|
|
serverinfo_user.proto
|
|
serverinfo_user_alt.proto
|
|
serverinfo_user_session.proto
|
|
serverinfo_warning.proto
|
|
serverinfo_zone.proto
|
|
session_commands.proto
|
|
session_event.proto
|
|
)
|
|
|
|
if(MSVC)
|
|
set(unused_warning /wd4100)
|
|
else()
|
|
set(unused_warning -Wno-unused-parameter)
|
|
endif()
|
|
|
|
if(${Protobuf_VERSION} VERSION_LESS "3.21.0.0")
|
|
message(STATUS "Using Protobuf Legacy Mode")
|
|
include_directories(${PROTOBUF_INCLUDE_DIRS})
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})
|
|
|
|
add_library(libcockatrice_protocol_pb ${PROTO_SRCS} ${PROTO_HDRS})
|
|
target_compile_options(libcockatrice_protocol_pb PRIVATE ${unused_warning})
|
|
set(libcockatrice_protocol_pb_LIBS ${PROTOBUF_LIBRARIES})
|
|
if(UNIX)
|
|
set(libcockatrice_protocol_pb_LIBS ${libcockatrice_protocol_pb_LIBS} -lpthread)
|
|
endif(UNIX)
|
|
target_link_libraries(libcockatrice_protocol_pb ${libcockatrice_protocol_pb_LIBS})
|
|
|
|
# ubuntu uses an outdated package for protobuf, 3.1.0 is required
|
|
if(${Protobuf_VERSION} VERSION_LESS "3.1.0")
|
|
# remove unused parameter and misleading indentation warnings when compiling to avoid errors
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-unused-parameter -Wno-misleading-indentation")
|
|
message(WARNING "Older protobuf version found (${Protobuf_VERSION} < 3.1.0), "
|
|
"disabled the warnings 'unused-parameter' and 'misleading-indentation' for protobuf generated code "
|
|
"to avoid compilation errors."
|
|
)
|
|
endif()
|
|
else()
|
|
add_library(libcockatrice_protocol_pb ${PROTO_FILES})
|
|
target_compile_options(libcockatrice_protocol_pb PRIVATE ${unused_warning})
|
|
target_link_libraries(libcockatrice_protocol_pb PUBLIC protobuf::libprotobuf)
|
|
set(PROTO_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
target_include_directories(libcockatrice_protocol_pb PUBLIC "${PROTOBUF_INCLUDE_DIRS}")
|
|
|
|
protobuf_generate(TARGET libcockatrice_protocol_pb IMPORT_DIRS "." PROTOC_OUT_DIR "${PROTO_BINARY_DIR}")
|
|
endif()
|