aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/bansystem.cpp
diff options
context:
space:
mode:
authorGeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com>2022-08-25 00:24:18 +0200
committerGitHub <noreply@github.com>2022-08-24 23:24:18 +0100
commite289eaa1f7a77de79bcc640b055f8d28cf1d66ea (patch)
tree38e0a4ce97fca9d9e054f7cdce8f4b24a466e25e /NorthstarDLL/bansystem.cpp
parent1fa0c550770612f1873a5304dc0ee0ba2811f8fd (diff)
downloadNorthstarLauncher-e289eaa1f7a77de79bcc640b055f8d28cf1d66ea.tar.gz
NorthstarLauncher-e289eaa1f7a77de79bcc640b055f8d28cf1d66ea.zip
Update refactor (#250)
* Add PR template * Update CI folder location * Delete startup args txt files * Add editorconfig file (#246) * Add editorconfig file It's a cross-editor compatible config file that defines certain editor behaviour (e.g. adding/removing newline at end of file) It is supported by major editors like Visual Studio (Code) and by version control providers like GitHub. Should end the constant adding/removing of final newline in PRs * More settings - unicode by default - trim newlines - use tabs for indentation (ugh) * Ignore folder rename (#245) * Hot reload banlist on player join (#233) * added banlist hotreload * fix formatting * didnt append, cleared whole file oopsie * unfuckedunban not rewriting file * fixed not checking for new line Co-authored-by: ScureX <47725553+ScureX@users.noreply.github.com>
Diffstat (limited to 'NorthstarDLL/bansystem.cpp')
-rw-r--r--NorthstarDLL/bansystem.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/NorthstarDLL/bansystem.cpp b/NorthstarDLL/bansystem.cpp
index 4a5ef30b..922077d5 100644
--- a/NorthstarDLL/bansystem.cpp
+++ b/NorthstarDLL/bansystem.cpp
@@ -46,8 +46,24 @@ void ServerBanSystem::OpenBanlist()
banlistStream.close();
}
- // open write stream for banlist
- m_sBanlistStream.open(GetNorthstarPrefix() + "/banlist.txt", std::ofstream::out | std::ofstream::binary | std::ofstream::app);
+ // open write stream for banlist // dont do this to allow for all time access
+ // m_sBanlistStream.open(GetNorthstarPrefix() + "/banlist.txt", std::ofstream::out | std::ofstream::binary | std::ofstream::app);
+}
+
+void ServerBanSystem::ReloadBanlist()
+{
+ std::ifstream fsBanlist(GetNorthstarPrefix() + "/banlist.txt");
+
+ if (!fsBanlist.fail())
+ {
+ std::string line;
+ // since we wanna use this as the reload func we need to clear the list
+ m_vBannedUids.clear();
+ while (std::getline(fsBanlist, line))
+ m_vBannedUids.push_back(strtoull(line.c_str(), nullptr, 10));
+
+ fsBanlist.close();
+ }
}
void ServerBanSystem::ClearBanlist()
@@ -57,6 +73,7 @@ void ServerBanSystem::ClearBanlist()
// reopen the file, don't provide std::ofstream::app so it clears on open
m_sBanlistStream.close();
m_sBanlistStream.open(GetNorthstarPrefix() + "/banlist.txt", std::ofstream::out | std::ofstream::binary);
+ m_sBanlistStream.close();
}
void ServerBanSystem::BanUID(uint64_t uid)
@@ -66,11 +83,13 @@ void ServerBanSystem::BanUID(uint64_t uid)
std::string content((std::istreambuf_iterator<char>(fsBanlist)), (std::istreambuf_iterator<char>()));
fsBanlist.close();
+ m_sBanlistStream.open(GetNorthstarPrefix() + "/banlist.txt", std::ofstream::out | std::ofstream::binary | std::ofstream::app);
if (content.back() != '\n')
m_sBanlistStream << std::endl;
m_vBannedUids.push_back(uid);
m_sBanlistStream << std::to_string(uid) << std::endl;
+ m_sBanlistStream.close();
spdlog::info("{} was banned", uid);
}
@@ -150,11 +169,13 @@ void ServerBanSystem::UnbanUID(uint64_t uid)
for (std::string updatedLine : banlistText)
m_sBanlistStream << updatedLine << std::endl;
+ m_sBanlistStream.close();
spdlog::info("{} was unbanned", uid);
}
bool ServerBanSystem::IsUIDAllowed(uint64_t uid)
{
+ ReloadBanlist(); // Reload to have up to date list on join
return std::find(m_vBannedUids.begin(), m_vBannedUids.end(), uid) == m_vBannedUids.end();
}