From 568413489410a0212d136b1d3f400e0467f6999d Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Sun, 8 Aug 2021 21:01:56 +0200 Subject: [PATCH] Sentry: report any issue with backend.beammp or auth.beammp responses --- CMakeLists.txt | 2 ++ include/Sentry.h | 2 ++ src/Sentry.cpp | 17 ++++++++++++++++- src/THeartbeatThread.cpp | 6 ++++++ src/TNetwork.cpp | 7 ++++++- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 096cfb3..3870bf4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,7 +84,9 @@ if (UNIX) elseif (WIN32) add_definitions(/DSECRET_SENTRY_URL="${BEAMMP_SECRET_SENTRY_URL}") include(FindLua) + message(STATUS "Looking for libz") find_package(ZLIB REQUIRED) + message(STATUS "Looking for RapidJSON") find_package(RapidJSON CONFIG REQUIRED) target_include_directories(BeamMP-Server PRIVATE ${RAPIDJSON_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}) target_link_libraries(BeamMP-Server PRIVATE ws2_32 ZLIB::ZLIB ${LUA_LIBRARIES} ${OPENSSL_LIBRARIES} commandline sioclient_tls) diff --git a/include/Sentry.h b/include/Sentry.h index 6a58dd0..1c259a7 100644 --- a/include/Sentry.h +++ b/include/Sentry.h @@ -13,6 +13,8 @@ public: ~TSentry(); void Log(sentry_level_t level, const std::string& logger, const std::string& text); + void AddExtra(const std::string& key, const sentry_value_t& value); + void AddExtra(const std::string& key, const std::string& value); void LogException(const std::exception& e, const std::string& file, const std::string& line); void AddErrorBreadcrumb(const std::string& msg, const std::string& file, const std::string& line); diff --git a/src/Sentry.cpp b/src/Sentry.cpp index 66f7173..27d98cb 100644 --- a/src/Sentry.cpp +++ b/src/Sentry.cpp @@ -25,7 +25,22 @@ void TSentry::Log(sentry_level_t level, const std::string& logger, const std::st if (!mValid) { return; } - sentry_capture_event(sentry_value_new_message_event(level, logger.c_str(), text.c_str())); + auto Msg = sentry_value_new_message_event(level, logger.c_str(), text.c_str()); + sentry_capture_event(Msg); +} + +void TSentry::AddExtra(const std::string& key, const sentry_value_t& value) { + if (!mValid) { + return; + } + sentry_set_extra(key.c_str(), value); +} + +void TSentry::AddExtra(const std::string& key, const std::string& value) { + if (!mValid) { + return; + } + AddExtra(key.c_str(), sentry_value_new_string(value.c_str())); } void TSentry::LogException(const std::exception& e, const std::string& file, const std::string& line) { diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index ca22780..dc3d75a 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -45,6 +45,12 @@ void THeartbeatThread::operator()() { if (T.substr(0, 2) != "20") { warn("Backend system refused server! Server might not show in the public list"); debug("server returned \"" + T + "\""); + if (T.size() > std::string("YOU_SHALL_NOT_PASS").size() + && Application::Settings.Key.size() == 36) { + Sentry.AddExtra("response", T); + Sentry.AddExtra("body", Body); + Sentry.Log(SENTRY_LEVEL_ERROR, "default", "wrong backend response format"); + } isAuth = false; } } diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index 5dbb640..fcf8274 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -280,8 +280,10 @@ void TNetwork::Authentication(SOCKET TCPSock) { return; } + auto RequestString = R"({"key":")" + Rc + "\"}"; + if (!Rc.empty()) { - Rc = Http::POST(Application::GetBackendUrlForAuth(), "/pkToUser", {}, R"({"key":")" + Rc + "\"}", true); + Rc = Http::POST(Application::GetBackendUrlForAuth(), "/pkToUser", {}, RequestString, true); } json::Document AuthResponse; @@ -294,6 +296,9 @@ void TNetwork::Authentication(SOCKET TCPSock) { if (!AuthResponse.IsObject()) { ClientKick(*Client, "Backend returned invalid auth response format."); error("Backend returned invalid auth response format. This should never happen."); + Sentry.AddExtra("response", Rc); + Sentry.AddExtra("key", RequestString); + Sentry.Log(SENTRY_LEVEL_ERROR, "default", "wrong backend response format"); return; }