diff --git a/include/Settings.h b/include/Settings.h index 461b491..8ee3ffc 100644 --- a/include/Settings.h +++ b/include/Settings.h @@ -71,6 +71,7 @@ struct Settings { Misc_SendErrorsShowMessage, Misc_SendErrors, Misc_ImScaredOfUpdates, + Misc_UpdateReminderTime, // [General] General_Description, @@ -84,7 +85,8 @@ struct Settings { General_MaxCars, General_LogChat, General_ResourceFolder, - General_Debug + General_Debug, + General_AllowGuests }; Sync> SettingsMap; diff --git a/src/Settings.cpp b/src/Settings.cpp index af33786..191d4fc 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -35,9 +35,11 @@ Settings::Settings(){ { General_LogChat, true }, { General_ResourceFolder, std::string("Resources") }, { General_Debug, false }, + { General_AllowGuests, true }, { Misc_SendErrorsShowMessage, true }, { Misc_SendErrors, true }, - { Misc_ImScaredOfUpdates, true } + { Misc_ImScaredOfUpdates, true }, + { Misc_UpdateReminderTime, "30s"} }; InputAccessMapping = std::unordered_map { @@ -53,9 +55,11 @@ Settings::Settings(){ { { "General", "LogChat" }, { General_LogChat, READ_ONLY } }, { { "General", "ResourceFolder" }, { General_ResourceFolder, READ_ONLY } }, { { "General", "Debug" }, { General_Debug, READ_WRITE } }, + { { "General", "AllowGuests"}, { General_AllowGuests, READ_WRITE } }, { { "Misc", "SendErrorsShowMessage" }, { Misc_SendErrorsShowMessage, READ_WRITE } }, { { "Misc", "SendErrors" }, { Misc_SendErrors, READ_WRITE } }, - { { "Misc", "ImScaredOfUpdates" }, { Misc_ImScaredOfUpdates, READ_WRITE } } + { { "Misc", "ImScaredOfUpdates" }, { Misc_ImScaredOfUpdates, READ_WRITE } }, + { { "Misc", "UpdateReminderTime" }, {Misc_UpdateReminderTime, READ_WRITE} } }; diff --git a/src/TConfig.cpp b/src/TConfig.cpp index d144989..959ad82 100644 --- a/src/TConfig.cpp +++ b/src/TConfig.cpp @@ -132,7 +132,7 @@ void TConfig::FlushToFile() { SetComment(data["General"][StrLogChat.data()].comments(), " Whether to log chat messages in the console / log"); data["General"][StrDebug.data()] = Application::Settings.getAsBool(Settings::Key::General_Debug); data["General"][StrPrivate.data()] = Application::Settings.getAsBool(Settings::Key::General_Private); - data["General"][StrAllowGuests.data()] = Application::Settings.AllowGuests; + data["General"][StrAllowGuests.data()] = Application::Settings.getAsBool(Settings::Key::General_AllowGuests); SetComment(data["General"][StrAllowGuests.data()].comments(), " Whether to allow guests"); data["General"][StrPort.data()] = Application::Settings.getAsInt(Settings::Key::General_Port); data["General"][StrName.data()] = Application::Settings.getAsString(Settings::Key::General_Name); @@ -149,7 +149,7 @@ void TConfig::FlushToFile() { data["Misc"][StrHideUpdateMessages.data()] = Application::Settings.getAsBool(Settings::Key::Misc_ImScaredOfUpdates); SetComment(data["Misc"][StrHideUpdateMessages.data()].comments(), " Hides the periodic update message which notifies you of a new server version. You should really keep this on and always update as soon as possible. For more information visit https://wiki.beammp.com/en/home/server-maintenance#updating-the-server. An update message will always appear at startup regardless."); data["Misc"][StrSendErrors.data()] = Application::Settings.getAsBool(Settings::Key::Misc_SendErrors); - data["Misc"][StrUpdateReminderTime.data()] = Application::Settings.UpdateReminderTime; + data["Misc"][StrUpdateReminderTime.data()] = Application::Settings.getAsString(Settings::Key::Misc_UpdateReminderTime); SetComment(data["Misc"][StrUpdateReminderTime.data()].comments(), " Specifies the time between update reminders. You can use any of \"s, min, h, d\" at the end to specify the units seconds, minutes, hours or days. So 30d or 0.5min will print the update message every 30 days or half a minute."); SetComment(data["Misc"][StrSendErrors.data()].comments(), " If SendErrors is `true`, the server will send helpful info about crashes and other issues back to the BeamMP developers. This info may include your config, who is on your server at the time of the error, and similar general information. This kind of data is vital in helping us diagnose and fix issues faster. This has no impact on server performance. You can opt-out of this system by setting this to `false`"); data["Misc"][StrSendErrorsMessageEnabled.data()] = Application::Settings.getAsBool(Settings::Key::Misc_SendErrorsShowMessage); @@ -267,12 +267,12 @@ void TConfig::ParseFromFile(std::string_view name) { TryReadValue(data, "General", StrResourceFolder, EnvStrResourceFolder, Settings::Key::General_ResourceFolder); TryReadValue(data, "General", StrAuthKey, EnvStrAuthKey, Settings::Key::General_AuthKey); TryReadValue(data, "General", StrLogChat, EnvStrLogChat, Settings::Key::General_LogChat); - TryReadValue(data, "General", StrAllowGuests, EnvStrAllowGuests, Application::Settings.AllowGuests); + TryReadValue(data, "General", StrAllowGuests, EnvStrAllowGuests, Settings::Key::General_AllowGuests); // Misc TryReadValue(data, "Misc", StrSendErrors, "", Settings::Key::Misc_SendErrors); - TryReadValue(data, "Misc", StrHideUpdateMessages, "", Settings::Misc_ImScaredOfUpdates); - TryReadValue(data, "Misc", StrSendErrorsMessageEnabled, "", Settings::Misc_SendErrorsShowMessage); - TryReadValue(data, "Misc", StrUpdateReminderTime, "", Application::Settings.UpdateReminderTime); + TryReadValue(data, "Misc", StrHideUpdateMessages, "", Settings::Key::Misc_ImScaredOfUpdates); + TryReadValue(data, "Misc", StrSendErrorsMessageEnabled, "", Settings::Key::Misc_SendErrorsShowMessage); + TryReadValue(data, "Misc", StrUpdateReminderTime, "", Settings::Key::Misc_UpdateReminderTime); } catch (const std::exception& err) { beammp_error("Error parsing config file value: " + std::string(err.what())); @@ -317,7 +317,7 @@ void TConfig::PrintDebug() { beammp_debug(std::string(StrTags) + ": " + TagsAsPrettyArray()); beammp_debug(std::string(StrLogChat) + ": \"" + (Application::Settings.getAsBool(Settings::Key::General_LogChat) ? "true" : "false") + "\""); beammp_debug(std::string(StrResourceFolder) + ": \"" + Application::Settings.getAsString(Settings::Key::General_ResourceFolder) + "\""); - beammp_debug(std::string(StrAllowGuests) + ": \"" + (Application::Settings.AllowGuests ? "true" : "false") + "\""); + beammp_debug(std::string(StrAllowGuests) + ": \"" + (Application::Settings.getAsBool(Settings::Key::General_AllowGuests) ? "true" : "false") + "\""); // special! beammp_debug("Key Length: " + std::to_string(Application::Settings.getAsString(Settings::Key::General_AuthKey).length()) + ""); } diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index fb40669..a7f37c6 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -40,7 +40,7 @@ void THeartbeatThread::operator()() { static std::chrono::high_resolution_clock::time_point LastUpdateReminderTime = std::chrono::high_resolution_clock::now(); bool isAuth = false; std::chrono::high_resolution_clock::duration UpdateReminderTimePassed; - auto UpdateReminderTimeout = ChronoWrapper::TimeFromStringWithLiteral(Application::Settings.UpdateReminderTime); + auto UpdateReminderTimeout = ChronoWrapper::TimeFromStringWithLiteral(Application::Settings.getAsString(Settings::Key::Misc_UpdateReminderTime)); while (!Application::IsShuttingDown()) { Body = GenerateCall(); // a hot-change occurs when a setting has changed, to update the backend of that change. @@ -129,7 +129,7 @@ void THeartbeatThread::operator()() { if (isAuth || Application::Settings.getAsBool(Settings::Key::General_Private)) { Application::SetSubsystemStatus("Heartbeat", Application::Status::Good); } - if (!Application::Settings.HideUpdateMessages && UpdateReminderTimePassed.count() > UpdateReminderTimeout.count()) { + if (!Application::Settings.getAsBool(Settings::Key::Misc_ImScaredOfUpdates) && UpdateReminderTimePassed.count() > UpdateReminderTimeout.count()) { LastUpdateReminderTime = std::chrono::high_resolution_clock::now(); Application::CheckForUpdates(); } @@ -149,7 +149,7 @@ std::string THeartbeatThread::GenerateCall() { << "&clientversion=" << std::to_string(Application::ClientMajorVersion()) + ".0" // FIXME: Wtf. << "&name=" << Application::Settings.getAsString(Settings::Key::General_Name) << "&tags=" << Application::Settings.getAsString(Settings::Key::General_Tags) - << "&guests=" << (Application::Settings.AllowGuests ? "true" : "false") + << "&guests=" << (Application::Settings.getAsBool(Settings::Key::General_AllowGuests) ? "true" : "false") << "&modlist=" << mResourceManager.TrimmedList() << "&modstotalsize=" << mResourceManager.MaxModSize() << "&modstotal=" << mResourceManager.ModsLoaded() diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index a142f75..65f0c97 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -290,7 +290,7 @@ std::shared_ptr TNetwork::Authentication(TConnection&& RawConnection) { } std::string Key(reinterpret_cast(Data.data()), Data.size()); - std::string AuthKey = Application::Settings.Key; + std::string AuthKey = Application::Settings.getAsString(Settings::Key::General_AuthKey); std::string ClientIp = Client->GetIdentifiers().at("ip"); nlohmann::json AuthReq {}; @@ -373,7 +373,7 @@ std::shared_ptr TNetwork::Authentication(TConnection&& RawConnection) { return false; }); - if (!NotAllowedWithReason && !Application::Settings.AllowGuests && Client->IsGuest()) { //!NotAllowedWithReason because this message has the lowest priority + if (!NotAllowedWithReason && !Application::Settings.getAsBool(Settings::Key::General_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."; }