mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-09 11:33:25 -08:00
* [Server] Let users fetch their own private chat history Players lose their private conversations on reconnect or on another device. Servatrice can already log private messages, but only moderators can read the logs. Add Command_GetPrivateChatHistory / Response_PrivateChatHistory so a registered user can page through their own logged conversation with one other user. Operators opt in with logging/allow_user_chat_history (default off, and log_user_msg_chat must be on). The caller is matched by account id so reused guest or deleted-account names can't read older messages; only time, sender name and text are returned. Pages hold 1..200 messages and never split a second, since log_time has 1-second resolution. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [Server] Harden private chat history identity matching Match both participants by account id and name so a federated user's remote id cannot collide with a local account, and stop storing foreign ids in the local chat log. Extract the paging assembly into a pure helper and cover the whole-second boundary rules with gtests. --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Lukas Brübach <44814898+BruebachL@users.noreply.github.com>
259 lines
8.4 KiB
CMake
259 lines
8.4 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_download_public.proto
|
|
command_deck_list.proto
|
|
command_deck_list_other_user.proto
|
|
command_deck_new_dir.proto
|
|
command_deck_select.proto
|
|
command_deck_set_visibility.proto
|
|
command_deck_share_create.proto
|
|
command_deck_share_download.proto
|
|
command_deck_share_list.proto
|
|
command_deck_share_list_mine.proto
|
|
command_deck_share_remove.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_get_private_chat_history.proto
|
|
command_get_server_stats.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_reopen.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_player_order.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
|
|
developer_commands.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_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_order_changed.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_channel_say.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_share_create.proto
|
|
response_deck_share_download.proto
|
|
response_deck_share_list.proto
|
|
response_deck_share_list_mine.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_server_stats.proto
|
|
response_get_user_info.proto
|
|
response_join_room.proto
|
|
response_list_users.proto
|
|
response_login.proto
|
|
response_password_salt.proto
|
|
response_private_chat_history.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_remove_user_banner.proto
|
|
response_clear_blacklisted_banners.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_deck_share_item.proto
|
|
serverinfo_deck_share_summary.proto
|
|
serverinfo_deckstorage.proto
|
|
serverinfo_game.proto
|
|
serverinfo_gametype.proto
|
|
serverinfo_moderator_login.proto
|
|
serverinfo_player.proto
|
|
serverinfo_playerping.proto
|
|
serverinfo_playerproperties.proto
|
|
serverinfo_private_chat_message.proto
|
|
serverinfo_replay.proto
|
|
serverinfo_replay_match.proto
|
|
serverinfo_report.proto
|
|
serverinfo_room.proto
|
|
serverinfo_room_channel.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()
|