aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Server/Access/WhitelistManager.h
blob: 1c2c5a0b57d29ca524d31489f8e6190b9044b833 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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;
		};
	}
}