diff --git a/include/Common.h b/include/Common.h index 451966d..18fe84a 100644 --- a/include/Common.h +++ b/include/Common.h @@ -77,6 +77,7 @@ public: int Port { 30814 }; std::string CustomIP {}; bool LogChat { true }; + bool AllowGuests { true }; bool SendErrors { true }; bool SendErrorsMessageEnabled { true }; int HTTPServerPort { 8080 }; diff --git a/src/TConfig.cpp b/src/TConfig.cpp index 73fca54..395ede5 100644 --- a/src/TConfig.cpp +++ b/src/TConfig.cpp @@ -51,6 +51,8 @@ static constexpr std::string_view StrAuthKey = "AuthKey"; static constexpr std::string_view EnvStrAuthKey = "BEAMMP_AUTH_KEY"; static constexpr std::string_view StrLogChat = "LogChat"; static constexpr std::string_view EnvStrLogChat = "BEAMMP_LOG_CHAT"; +static constexpr std::string_view StrAllowGuests = "AllowGuests"; +static constexpr std::string_view EnvStrAllowGuests = "BEAMMP_ALLOW_GUESTS"; static constexpr std::string_view StrPassword = "Password"; // Misc @@ -125,6 +127,8 @@ void TConfig::FlushToFile() { SetComment(data["General"][StrAuthKey.data()].comments(), " AuthKey has to be filled out in order to run the server"); data["General"][StrLogChat.data()] = Application::Settings.LogChat; SetComment(data["General"][StrLogChat.data()].comments(), " Whether to log chat messages in the console / log"); + data["General"][StrAllowGuests.data()] = Application::Settings.AllowGuests; + SetComment(data["General"][StrAllowGuests.data()].comments(), " Whether to allow guests"); data["General"][StrDebug.data()] = Application::Settings.DebugModeEnabled; data["General"][StrPrivate.data()] = Application::Settings.Private; data["General"][StrPort.data()] = Application::Settings.Port; @@ -251,6 +255,7 @@ void TConfig::ParseFromFile(std::string_view name) { TryReadValue(data, "General", StrResourceFolder, EnvStrResourceFolder, Application::Settings.Resource); TryReadValue(data, "General", StrAuthKey, EnvStrAuthKey, Application::Settings.Key); TryReadValue(data, "General", StrLogChat, EnvStrLogChat, Application::Settings.LogChat); + TryReadValue(data, "General", StrAllowGuests, EnvStrAllowGuests, Application::Settings.AllowGuests); TryReadValue(data, "General", StrPassword, "", Application::Settings.Password); // Misc TryReadValue(data, "Misc", StrSendErrors, "", Application::Settings.SendErrors); @@ -299,6 +304,7 @@ void TConfig::PrintDebug() { beammp_debug(std::string(StrDescription) + ": \"" + Application::Settings.ServerDesc + "\""); beammp_debug(std::string(StrTags) + ": " + TagsAsPrettyArray()); beammp_debug(std::string(StrLogChat) + ": \"" + (Application::Settings.LogChat ? "true" : "false") + "\""); + beammp_debug(std::string(StrAllowGuests) + ": \"" + (Application::Settings.AllowGuests ? "true" : "false") + "\""); beammp_debug(std::string(StrResourceFolder) + ": \"" + Application::Settings.Resource + "\""); // special! beammp_debug("Key Length: " + std::to_string(Application::Settings.Key.length()) + ""); diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index 3f064e4..e6a3caa 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -153,6 +153,7 @@ std::string THeartbeatThread::GenerateCall() { << "&clientversion=" << std::to_string(Application::ClientMajorVersion()) + ".0" // FIXME: Wtf. << "&name=" << Application::Settings.ServerName << "&tags=" << Application::Settings.ServerTags + << "&allowguests=" << (Application::Settings.AllowGuests ? "true" : "false") << "&modlist=" << mResourceManager.TrimmedList() << "&modstotalsize=" << mResourceManager.MaxModSize() << "&modstotal=" << mResourceManager.ModsLoaded() diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index e5bd4da..e88ac53 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -389,6 +389,11 @@ std::shared_ptr TNetwork::Authentication(TConnection&& RawConnection) { return false; }); + if (!NotAllowedWithReason && !Application::Settings.AllowGuests && Client->IsGuest()) { //!NotAllowedWithReason because this message has the lowest priority + NotAllowedWithReason = true; + Reason = "No guests are allowed on this server! To join, sign up at: forum.beammp.com."; + } + if (NotAllowed) { ClientKick(*Client, "you are not allowed on the server!"); return {};