diff --git a/include/Network/RegionHandler.h b/include/Network/RegionHandler.h index b791f08..51c82b3 100644 --- a/include/Network/RegionHandler.h +++ b/include/Network/RegionHandler.h @@ -13,8 +13,8 @@ class RegionHandler final { public: RegionHandler() = delete; - static void TopLevelDomainFailed(bool failed); - static std::string RegionToTopLevelDomain(const std::string region); + static void TopLevelDomainFailed(); + static std::string RegionToTopLevelDomain(); private: static inline unsigned int mRegionIndex { 0 }; const static inline std::array mValidTLDs {"beammp.com", "beammp.ru"}; diff --git a/include/Utils.h b/include/Utils.h index 3d0359f..36f3570 100644 --- a/include/Utils.h +++ b/include/Utils.h @@ -336,4 +336,4 @@ namespace Utils { throw std::runtime_error("Game disconnected"); } } - }; +}; diff --git a/src/Network/Core.cpp b/src/Network/Core.cpp index be8eff4..2fa5d58 100644 --- a/src/Network/Core.cpp +++ b/src/Network/Core.cpp @@ -227,10 +227,10 @@ void Parse(std::string Data, SOCKET CSocket) { TCPTerminate = true; Data.clear(); futures.push_back(std::async(std::launch::async, []() { - std::string resp = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/servers-info"); + std::string resp = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/servers-info"); if (resp == "") { - RegionHandler::TopLevelDomainFailed(true); - resp = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/servers-info"); + RegionHandler::TopLevelDomainFailed(); + resp = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/servers-info"); } CoreSend("B" + resp); })); diff --git a/src/Network/Http.cpp b/src/Network/Http.cpp index bb238ec..78bb09a 100644 --- a/src/Network/Http.cpp +++ b/src/Network/Http.cpp @@ -138,8 +138,8 @@ void HTTP::StartProxy() { { "User-Agent", "BeamMP-Launcher/" + GetVer() + GetPatch() }, { "Accept", "*/*" } }; - httplib::Client backend("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region)); - httplib::Client forum("https://forum." + RegionHandler::RegionToTopLevelDomain(options.region)); + httplib::Client backend("https://backend." + RegionHandler::RegionToTopLevelDomain()); + httplib::Client forum("https://forum." + RegionHandler::RegionToTopLevelDomain()); const std::string pattern = ".*"; @@ -218,7 +218,7 @@ void HTTP::StartProxy() { } if (error) { - cli_res = forum.Get("/user_avatar/forum." + RegionHandler::RegionToTopLevelDomain(options.region) + "/user/0/0.png", headers); + cli_res = forum.Get("/user_avatar/forum." + RegionHandler::RegionToTopLevelDomain() + "/user/0/0.png", headers); } } else { diff --git a/src/Network/RegionHandler.cpp b/src/Network/RegionHandler.cpp index 620c0ba..0a65120 100644 --- a/src/Network/RegionHandler.cpp +++ b/src/Network/RegionHandler.cpp @@ -6,17 +6,18 @@ #include "RegionHandler.h" #include "Logger.h" +#include "Options.h" -void RegionHandler::TopLevelDomainFailed(bool failed) +void RegionHandler::TopLevelDomainFailed() { - if (!failed) return; info("Top level domain of " + mValidTLDs[mRegionIndex % mValidTLDs.size()] + " didn't respond correctly , changing domain to " + mValidTLDs[(mRegionIndex + 1) % mValidTLDs.size()]); mRegionIndex++; } -std::string RegionHandler::RegionToTopLevelDomain(const std::string region) +std::string RegionHandler::RegionToTopLevelDomain() { - if (region == "Developer") { + static bool isDeveloperRegion = options.region == "Developer"; + if (isDeveloperRegion) { return "beammp.dev"; } return mValidTLDs[mRegionIndex % mValidTLDs.size()]; // Global diff --git a/src/Options.cpp b/src/Options.cpp index 1d8cd10..9013548 100644 --- a/src/Options.cpp +++ b/src/Options.cpp @@ -115,7 +115,6 @@ void InitOptions(int argc, const char *argv[], Options &options) { "\t--no-launch Skip launching the game (you must launch the game manually)\n" "\t--dev Developer mode, same as --verbose --no-download --no-launch --no-update\n" "\t--user-path Path to BeamNG's User Path\n" - "\t--region Sets a custom region, options are 'Global', and 'Restricted'\n" "\t--game Passes ALL following arguments to the game, see also `--`\n" << std::flush; exit(0); diff --git a/src/Security/Login.cpp b/src/Security/Login.cpp index 4c7843b..2b10366 100644 --- a/src/Security/Login.cpp +++ b/src/Security/Login.cpp @@ -57,10 +57,10 @@ std::string Login(const std::string& fields) { } info("Attempting to authenticate..."); try { - std::string Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain(options.region) + "/userlogin", fields); + std::string Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain() + "/userlogin", fields); if (Buffer == "") { - RegionHandler::TopLevelDomainFailed(true); - Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain(options.region) + "/userlogin", fields); + RegionHandler::TopLevelDomainFailed(); + Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain() + "/userlogin", fields); } if (Buffer.empty()) { @@ -121,10 +121,10 @@ void CheckLocalKey() { } } - Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain(options.region) + "/userlogin", R"({"pk":")" + Buffer + "\"}"); + Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain() + "/userlogin", R"({"pk":")" + Buffer + "\"}"); if (Buffer == "") { - RegionHandler::TopLevelDomainFailed(true); - Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain(options.region) + "/userlogin", R"({"pk":")" + Buffer + "\"}"); + RegionHandler::TopLevelDomainFailed(); + Buffer = HTTP::Post("https://auth." + RegionHandler::RegionToTopLevelDomain() + "/userlogin", R"({"pk":")" + Buffer + "\"}"); } nlohmann::json d = nlohmann::json::parse(Buffer, nullptr, false); diff --git a/src/Startup.cpp b/src/Startup.cpp index bf046e7..b7af3ae 100644 --- a/src/Startup.cpp +++ b/src/Startup.cpp @@ -332,15 +332,15 @@ bool VerifySignature(const std::filesystem::path& filePath) #endif void CheckForUpdates(const std::string& CV) { - std::string LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/sha/launcher?branch=" + Branch + "&pk=" + PublicKey); + std::string LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/sha/launcher?branch=" + Branch + "&pk=" + PublicKey); if (LatestHash == "") { - RegionHandler::TopLevelDomainFailed(true); - LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/sha/launcher?branch=" + Branch + "&pk=" + PublicKey); + RegionHandler::TopLevelDomainFailed(); + LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/sha/launcher?branch=" + Branch + "&pk=" + PublicKey); } - std::string LatestVersion = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/version/launcher?branch=" + Branch + "&pk=" + PublicKey); + std::string LatestVersion = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/version/launcher?branch=" + Branch + "&pk=" + PublicKey); if (LatestVersion == "") { - RegionHandler::TopLevelDomainFailed(true); - LatestVersion = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/version/launcher?branch=" + Branch + "&pk=" + PublicKey); + RegionHandler::TopLevelDomainFailed(); + LatestVersion = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/version/launcher?branch=" + Branch + "&pk=" + PublicKey); } std::regex sha256_pattern(R"(^[a-fA-F0-9]{64}$)"); @@ -367,14 +367,14 @@ void CheckForUpdates(const std::string& CV) { std::wstring DownloadLocation = GetBP() / (beammp_wide("new_") + GetEN()); bool downloadSuccess = false; downloadSuccess = HTTP::Download( - "https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/builds/launcher?download=true" + "https://backend." + RegionHandler::RegionToTopLevelDomain() + "/builds/launcher?download=true" "&pk=" + PublicKey + "&branch=" + Branch, DownloadLocation, LatestHash); if (!downloadSuccess) { - RegionHandler::TopLevelDomainFailed(true); + RegionHandler::TopLevelDomainFailed(); downloadSuccess = HTTP::Download( - "https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/builds/launcher?download=true" + "https://backend." + RegionHandler::RegionToTopLevelDomain() + "/builds/launcher?download=true" "&pk=" + PublicKey + "&branch=" + Branch, DownloadLocation, LatestHash); @@ -532,10 +532,10 @@ void PreGame(const beammp_fs_string& GamePath) { info(beammp_wide("Game user path: ") + beammp_fs_string(GetGamePath())); if (!options.no_download) { - std::string LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/sha/mod?branch=" + Branch + "&pk=" + PublicKey); + std::string LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/sha/mod?branch=" + Branch + "&pk=" + PublicKey); if (LatestHash == "") { - RegionHandler::TopLevelDomainFailed(true); - LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/sha/mod?branch=" + Branch + "&pk=" + PublicKey); + RegionHandler::TopLevelDomainFailed(); + LatestHash = HTTP::Get("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/sha/mod?branch=" + Branch + "&pk=" + PublicKey); } transform(LatestHash.begin(), LatestHash.end(), LatestHash.begin(), ::tolower); LatestHash.erase(std::remove_if(LatestHash.begin(), LatestHash.end(), @@ -570,12 +570,12 @@ void PreGame(const beammp_fs_string& GamePath) { if (FileHash != LatestHash) { info("Downloading BeamMP Update " + LatestHash); - if (!HTTP::Download("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/builds/client?download=true" + if (!HTTP::Download("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/builds/client?download=true" "&pk=" + PublicKey + "&branch=" + Branch, ZipPath, LatestHash)) { - RegionHandler::TopLevelDomainFailed(true); - HTTP::Download("https://backend." + RegionHandler::RegionToTopLevelDomain(options.region) + "/builds/client?download=true" + RegionHandler::TopLevelDomainFailed(); + HTTP::Download("https://backend." + RegionHandler::RegionToTopLevelDomain() + "/builds/client?download=true" "&pk=" + PublicKey + "&branch=" + Branch, ZipPath, LatestHash);