aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Server/Access/WhitelistManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Server/Access/WhitelistManager.h')
-rw-r--r--Minecraft.Server/Access/WhitelistManager.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/Minecraft.Server/Access/WhitelistManager.h b/Minecraft.Server/Access/WhitelistManager.h
new file mode 100644
index 00000000..1c2c5a0b
--- /dev/null
+++ b/Minecraft.Server/Access/WhitelistManager.h
@@ -0,0 +1,64 @@
+#pragma once
+
+#include <string>
+#include <vector>
+
+namespace ServerRuntime
+{
+ namespace Access
+ {
+ struct WhitelistMetadata
+ {
+ std::string created;
+ std::string source;
+ };
+
+ struct WhitelistedPlayerEntry
+ {
+ std::string xuid;
+ std::string name;
+ WhitelistMetadata metadata;
+ };
+
+ /**
+ * whitelist manager
+ *
+ * Files:
+ * - whitelist.json
+ *
+ * Stores and normalizes XUID-based allow entries.
+ */
+ class WhitelistManager
+ {
+ public:
+ explicit WhitelistManager(const std::string &baseDirectory = ".");
+
+ bool EnsureWhitelistFileExists() const;
+ bool Reload();
+ bool Save() const;
+
+ bool LoadPlayers(std::vector<WhitelistedPlayerEntry> *outEntries) const;
+ bool SavePlayers(const std::vector<WhitelistedPlayerEntry> &entries) const;
+
+ const std::vector<WhitelistedPlayerEntry> &GetWhitelistedPlayers() const;
+ bool SnapshotWhitelistedPlayers(std::vector<WhitelistedPlayerEntry> *outEntries) const;
+
+ bool IsPlayerWhitelistedByXuid(const std::string &xuid) const;
+ bool AddPlayer(const WhitelistedPlayerEntry &entry);
+ bool RemovePlayerByXuid(const std::string &xuid);
+
+ std::string GetWhitelistFilePath() const;
+
+ static WhitelistMetadata BuildDefaultMetadata(const char *source = "Server");
+
+ private:
+ static void NormalizeMetadata(WhitelistMetadata *metadata);
+
+ std::string BuildPath(const char *fileName) const;
+
+ private:
+ std::string m_baseDirectory;
+ std::vector<WhitelistedPlayerEntry> m_whitelistedPlayers;
+ };
+ }
+}