From 3d3d2c2a13a292a9093ad3029563a1c543a07ab7 Mon Sep 17 00:00:00 2001 From: BobTheBob <32057864+BobTheBob9@users.noreply.github.com> Date: Sat, 13 Nov 2021 18:37:46 +0000 Subject: client auth token support --- NorthstarDedicatedTest/masterserver.cpp | 10 +++++++--- NorthstarDedicatedTest/masterserver.h | 1 + NorthstarDedicatedTest/misccommands.cpp | 2 +- NorthstarDedicatedTest/scriptmodmenu.cpp | 18 +++++++++--------- NorthstarDedicatedTest/scriptserverbrowser.cpp | 4 ++-- NorthstarDedicatedTest/securitypatches.cpp | 1 + 6 files changed, 21 insertions(+), 15 deletions(-) (limited to 'NorthstarDedicatedTest') diff --git a/NorthstarDedicatedTest/masterserver.cpp b/NorthstarDedicatedTest/masterserver.cpp index 9ac88667..1d639f28 100644 --- a/NorthstarDedicatedTest/masterserver.cpp +++ b/NorthstarDedicatedTest/masterserver.cpp @@ -84,7 +84,7 @@ void MasterServerManager::AuthenticateOriginWithMasterServer(char* uid, char* or spdlog::info("Trying to authenticate with northstar masterserver for user {} {}", uidStr, tokenStr); - if (auto result = http.Get(fmt::format("/client/origin_auth?uid={}&token={}", uidStr, tokenStr).c_str())) + if (auto result = http.Get(fmt::format("/client/origin_auth?id={}&token={}", uidStr, tokenStr).c_str())) { m_successfullyConnected = true; @@ -103,8 +103,12 @@ void MasterServerManager::AuthenticateOriginWithMasterServer(char* uid, char* or goto REQUEST_END_CLEANUP; } - if (originAuthInfo["success"].IsTrue()) + if (originAuthInfo["success"].IsTrue() && originAuthInfo.HasMember("token") && originAuthInfo["token"].IsString()) + { + strncpy(m_ownClientAuthToken, originAuthInfo["token"].GetString(), sizeof(m_ownClientAuthToken)); + m_ownClientAuthToken[sizeof(m_ownClientAuthToken) - 1] = 0; spdlog::info("Northstar origin authentication completed successfully!"); + } else spdlog::error("Northstar origin authentication failed"); } @@ -324,7 +328,7 @@ void MasterServerManager::AuthenticateWithOwnServer(char* uid, char* playerToken goto REQUEST_END_CLEANUP; } - newAuthData.pdata[i++] = byte.GetUint(); + newAuthData.pdata[i++] = (char)byte.GetUint(); } std::lock_guard guard(g_ServerAuthenticationManager->m_authDataMutex); diff --git a/NorthstarDedicatedTest/masterserver.h b/NorthstarDedicatedTest/masterserver.h index 911555d1..97f5bdce 100644 --- a/NorthstarDedicatedTest/masterserver.h +++ b/NorthstarDedicatedTest/masterserver.h @@ -48,6 +48,7 @@ private: public: char m_ownServerId[33]; + char m_ownClientAuthToken[33]; bool m_bOriginAuthWithMasterServerDone = false; bool m_bOriginAuthWithMasterServerInProgress = false; diff --git a/NorthstarDedicatedTest/misccommands.cpp b/NorthstarDedicatedTest/misccommands.cpp index cc6f816d..f7ccbe2c 100644 --- a/NorthstarDedicatedTest/misccommands.cpp +++ b/NorthstarDedicatedTest/misccommands.cpp @@ -19,7 +19,7 @@ void SelfAuthAndLeaveToLobbyCommand(const CCommand& arg) // hack for special case where we're on a local server, so we erase our own newly created auth data on disconnect g_MasterServerManager->m_bNewgameAfterSelfAuth = true; - g_MasterServerManager->AuthenticateWithOwnServer(g_LocalPlayerUserID, (char*)""); + g_MasterServerManager->AuthenticateWithOwnServer(g_LocalPlayerUserID, g_MasterServerManager->m_ownClientAuthToken); } void EndSelfAuthAndLeaveToLobbyCommand(const CCommand& arg) diff --git a/NorthstarDedicatedTest/scriptmodmenu.cpp b/NorthstarDedicatedTest/scriptmodmenu.cpp index 141fdf75..d7c675ea 100644 --- a/NorthstarDedicatedTest/scriptmodmenu.cpp +++ b/NorthstarDedicatedTest/scriptmodmenu.cpp @@ -5,7 +5,7 @@ #include "dedicated.h" // array NSGetModNames() -SQInteger SQ_GetModNames(void* sqvm) +SQRESULT SQ_GetModNames(void* sqvm) { ClientSq_newarray(sqvm, 0); @@ -19,7 +19,7 @@ SQInteger SQ_GetModNames(void* sqvm) } // bool NSIsModEnabled(string modName) -SQInteger SQ_IsModEnabled(void* sqvm) +SQRESULT SQ_IsModEnabled(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -37,7 +37,7 @@ SQInteger SQ_IsModEnabled(void* sqvm) } // void NSSetModEnabled(string modName, bool enabled) -SQInteger SQ_SetModEnabled(void* sqvm) +SQRESULT SQ_SetModEnabled(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); const SQBool enabled = ClientSq_getbool(sqvm, 2); @@ -56,7 +56,7 @@ SQInteger SQ_SetModEnabled(void* sqvm) } // string NSGetModDescriptionByModName(string modName) -SQInteger SQ_GetModDescription(void* sqvm) +SQRESULT SQ_GetModDescription(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -74,7 +74,7 @@ SQInteger SQ_GetModDescription(void* sqvm) } // string NSGetModVersionByModName(string modName) -SQInteger SQ_GetModVersion(void* sqvm) +SQRESULT SQ_GetModVersion(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -92,7 +92,7 @@ SQInteger SQ_GetModVersion(void* sqvm) } // string NSGetModDownloadLinkByModName(string modName) -SQInteger SQ_GetModDownloadLink(void* sqvm) +SQRESULT SQ_GetModDownloadLink(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -110,7 +110,7 @@ SQInteger SQ_GetModDownloadLink(void* sqvm) } // int NSGetModLoadPriority(string modName) -SQInteger SQ_GetModLoadPriority(void* sqvm) +SQRESULT SQ_GetModLoadPriority(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -128,7 +128,7 @@ SQInteger SQ_GetModLoadPriority(void* sqvm) } // bool NSIsModRequiredOnClient(string modName) -SQInteger SQ_IsModRequiredOnClient(void* sqvm) +SQRESULT SQ_IsModRequiredOnClient(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); @@ -146,7 +146,7 @@ SQInteger SQ_IsModRequiredOnClient(void* sqvm) } // array NSGetModConvarsByModName(string modName) -SQInteger SQ_GetModConvars(void* sqvm) +SQRESULT SQ_GetModConvars(void* sqvm) { const SQChar* modName = ClientSq_getstring(sqvm, 1); ClientSq_newarray(sqvm, 0); diff --git a/NorthstarDedicatedTest/scriptserverbrowser.cpp b/NorthstarDedicatedTest/scriptserverbrowser.cpp index 096e84df..1cc4e62e 100644 --- a/NorthstarDedicatedTest/scriptserverbrowser.cpp +++ b/NorthstarDedicatedTest/scriptserverbrowser.cpp @@ -243,7 +243,7 @@ SQRESULT SQ_TryAuthWithServer(void* sqvm) g_ServerAuthenticationManager->WritePersistentData(pair.first); // do auth - g_MasterServerManager->AuthenticateWithServer(g_LocalPlayerUserID, (char*)"", g_MasterServerManager->m_remoteServers[serverIndex].id, (char*)password); + g_MasterServerManager->AuthenticateWithServer(g_LocalPlayerUserID, g_MasterServerManager->m_ownClientAuthToken, g_MasterServerManager->m_remoteServers[serverIndex].id, (char*)password); return SQRESULT_NULL; } @@ -286,7 +286,7 @@ SQRESULT SQ_ConnectToAuthedServer(void* sqvm) SQRESULT SQ_TryAuthWithLocalServer(void* sqvm) { // do auth request - g_MasterServerManager->AuthenticateWithOwnServer(g_LocalPlayerUserID, (char*)""); + g_MasterServerManager->AuthenticateWithOwnServer(g_LocalPlayerUserID, g_MasterServerManager->m_ownClientAuthToken); return SQRESULT_NULL; } diff --git a/NorthstarDedicatedTest/securitypatches.cpp b/NorthstarDedicatedTest/securitypatches.cpp index cbb5a292..dacc075c 100644 --- a/NorthstarDedicatedTest/securitypatches.cpp +++ b/NorthstarDedicatedTest/securitypatches.cpp @@ -27,6 +27,7 @@ void InitialiseClientEngineSecurityPatches(HMODULE baseAddress) ENABLER_CREATEHOOK(hook, (char*)baseAddress + 0x1C6360, &IsValveModHook, reinterpret_cast(&IsValveMod)); // patches to make commands run from client/ui script still work + // note: this is likely preventable in a nicer way? test prolly { void* ptr = (char*)baseAddress + 0x4FB65; TempReadWrite rw(ptr); -- cgit v1.2.3