Cuberite
A lightweight, fast and extensible game server for Minecraft
RankManager.h
Go to the documentation of this file.
1 
2 // RankManager.h
3 
4 // Declares the cRankManager class that represents the rank manager responsible for assigning permissions and message visuals to players
5 
6 
7 
8 
9 #pragma once
10 
11 #include "SQLiteCpp/Database.h"
12 #include "SQLiteCpp/Transaction.h"
13 
14 
15 
16 
17 class cUUID;
18 class cMojangAPI;
19 
20 
21 
22 
23 
25 {
26 public:
31  {
32  public:
33  cMassChangeLock(cRankManager & a_RankManager) :
34  m_Lock(a_RankManager.m_CS),
35  m_Transaction(a_RankManager.m_DB)
36  {
37  }
38 
40  {
41  m_Transaction.commit();
42  }
43 
44  protected:
46  SQLite::Transaction m_Transaction;
47  };
48 
49 
51  cRankManager(void);
52 
53  ~cRankManager();
54 
57  void Initialize(cMojangAPI & a_MojangAPI);
58 
61  AString GetPlayerRankName(const cUUID & a_PlayerUUID);
62 
65  AString GetPlayerName(const cUUID & a_PlayerUUID);
66 
68  AStringVector GetPlayerGroups(const cUUID & a_PlayerUUID);
69 
72  AStringVector GetPlayerPermissions(const cUUID & a_PlayerUUID);
73 
76  AStringVector GetPlayerRestrictions(const cUUID & a_PlayerUUID);
77 
80  AStringVector GetRankGroups(const AString & a_RankName);
81 
84  AStringVector GetGroupPermissions(const AString & a_GroupName);
85 
88  AStringVector GetGroupRestrictions(const AString & a_GroupName);
89 
92  AStringVector GetRankPermissions(const AString & a_RankName);
93 
96  AStringVector GetRankRestrictions(const AString & a_RankName);
97 
99  std::vector<cUUID> GetAllPlayerUUIDs(void);
100 
103 
106 
109 
112 
115 
118  bool GetPlayerMsgVisuals(
119  const cUUID & a_PlayerUUID,
120  AString & a_MsgPrefix,
121  AString & a_MsgSuffix,
122  AString & a_MsgNameColorCode
123  );
124 
126  void AddRank(
127  const AString & a_RankName,
128  const AString & a_MsgPrefix,
129  const AString & a_MsgSuffix,
130  const AString & a_MsgNameColorCode
131  );
132 
134  void AddGroup(const AString & a_GroupName);
135 
137  void AddGroups(const AStringVector & a_GroupNames);
138 
142  bool AddGroupToRank(const AString & a_GroupName, const AString & a_RankName);
143 
147  bool AddPermissionToGroup(const AString & a_Permission, const AString & a_GroupName);
148 
152  bool AddRestrictionToGroup(const AString & a_Restriction, const AString & a_GroupName);
153 
157  bool AddPermissionsToGroup(const AStringVector & a_Permissions, const AString & a_GroupName);
158 
162  bool AddRestrictionsToGroup(const AStringVector & a_Restrictions, const AString & a_GroupName);
163 
170  void RemoveRank(const AString & a_RankName, const AString & a_ReplacementRankName);
171 
174  void RemoveGroup(const AString & a_GroupName);
175 
178  void RemoveGroupFromRank(const AString & a_GroupName, const AString & a_RankName);
179 
181  void RemovePermissionFromGroup(const AString & a_Permission, const AString & a_GroupName);
182 
184  void RemoveRestrictionFromGroup(const AString & a_Restriction, const AString & a_GroupName);
185 
190  bool RenameRank(const AString & a_OldName, const AString & a_NewName);
191 
195  bool RenameGroup(const AString & a_OldName, const AString & a_NewName);
196 
202  void SetPlayerRank(const cUUID & a_PlayerUUID, const AString & a_PlayerName, const AString & a_RankName);
203 
208  void RemovePlayerRank(const cUUID & a_PlayerUUID);
209 
211  void SetRankVisuals(
212  const AString & a_RankName,
213  const AString & a_MsgPrefix,
214  const AString & a_MsgSuffix,
215  const AString & a_MsgNameColorCode
216  );
217 
220  bool GetRankVisuals(
221  const AString & a_RankName,
222  AString & a_MsgPrefix,
223  AString & a_MsgSuffix,
224  AString & a_MsgNameColorCode
225  );
226 
228  bool RankExists(const AString & a_RankName);
229 
231  bool GroupExists(const AString & a_GroupName);
232 
234  bool IsPlayerRankSet(const cUUID & a_PlayerUUID);
235 
237  bool IsGroupInRank(const AString & a_GroupName, const AString & a_RankName);
238 
240  bool IsPermissionInGroup(const AString & a_Permission, const AString & a_GroupName);
241 
243  bool IsRestrictionInGroup(const AString & a_Restriction, const AString & a_GroupName);
244 
246  void NotifyNameUUID(const AString & a_PlayerName, const cUUID & a_UUID);
247 
250  bool SetDefaultRank(const AString & a_RankName);
251 
253  const AString & GetDefaultRank(void) const { return m_DefaultRank; }
254 
257  void ClearPlayerRanks(void);
258 
260  bool UpdatePlayerName(const cUUID & a_PlayerUUID, const AString & a_NewPlayerName);
261 
262 protected:
263 
265  SQLite::Database m_DB;
266 
269 
272 
275 
279 
280 
282  bool AreDBTablesEmpty(void);
283 
286  bool IsDBTableEmpty(const AString & a_TableName);
287 
289  void CreateDefaults(void);
290 
292  bool DoesColumnExist(const char * a_TableName, const char * a_ColumnName);
293 
296  void CreateColumnIfNotExists(const char * a_TableName, const char * a_ColumnName, const char * a_ColumnType = "");
297 } ;
298 
299 
300 
301 
cMojangAPI
Definition: MojangAPI.h:33
cRankManager::AddPermissionToGroup
bool AddPermissionToGroup(const AString &a_Permission, const AString &a_GroupName)
Adds the specified permission to the specified permission group.
Definition: RankManager.cpp:743
cRankManager::GetPlayerName
AString GetPlayerName(const cUUID &a_PlayerUUID)
Returns the last name that the specified player has.
Definition: RankManager.cpp:123
cUUID
Definition: UUID.h:10
cRankManager::AddGroups
void AddGroups(const AStringVector &a_GroupNames)
Bulk-adds groups.
Definition: RankManager.cpp:622
cRankManager::AddRank
void AddRank(const AString &a_RankName, const AString &a_MsgPrefix, const AString &a_MsgSuffix, const AString &a_MsgNameColorCode)
Adds a new rank.
Definition: RankManager.cpp:534
cRankManager::GetAllRestrictions
AStringVector GetAllRestrictions(void)
Returns all the distinct restrictions that are stored in the DB.
Definition: RankManager.cpp:471
cRankManager::cMassChangeLock::m_Transaction
SQLite::Transaction m_Transaction
Definition: RankManager.h:46
cRankManager::m_DefaultRank
AString m_DefaultRank
The name of the default rank.
Definition: RankManager.h:268
cRankManager::AddGroupToRank
bool AddGroupToRank(const AString &a_GroupName, const AString &a_RankName)
Adds the specified permission group to the specified rank.
Definition: RankManager.cpp:665
cRankManager::cMassChangeLock
Acquire this lock to perform mass changes.
Definition: RankManager.h:30
cRankManager::cMassChangeLock::m_Lock
cCSLock m_Lock
Definition: RankManager.h:45
cRankManager::DoesColumnExist
bool DoesColumnExist(const char *a_TableName, const char *a_ColumnName)
Returns true if the specified column exists in the specified table.
Definition: RankManager.cpp:1900
cRankManager::GetAllGroups
AStringVector GetAllGroups(void)
Returns the names of all permission groups.
Definition: RankManager.cpp:421
cRankManager::RenameGroup
bool RenameGroup(const AString &a_OldName, const AString &a_NewName)
Renames the specified group.
Definition: RankManager.cpp:1336
cRankManager::~cRankManager
~cRankManager()
Definition: RankManager.cpp:29
cRankManager::GetRankGroups
AStringVector GetRankGroups(const AString &a_RankName)
Returns the names of groups that the specified rank has assigned to it.
Definition: RankManager.cpp:212
cRankManager::SetRankVisuals
void SetRankVisuals(const AString &a_RankName, const AString &a_MsgPrefix, const AString &a_MsgSuffix, const AString &a_MsgNameColorCode)
Sets the message visuals of an existing rank.
Definition: RankManager.cpp:1464
cRankManager::RankExists
bool RankExists(const AString &a_RankName)
Returns true iff the specified rank exists in the DB.
Definition: RankManager.cpp:1531
cRankManager
Definition: RankManager.h:24
cRankManager::CreateDefaults
void CreateDefaults(void)
Creates a default set of ranks / groups / permissions.
Definition: RankManager.cpp:1861
cRankManager::m_IsInitialized
bool m_IsInitialized
Set to true once the manager is initialized.
Definition: RankManager.h:274
cRankManager::cMassChangeLock::~cMassChangeLock
~cMassChangeLock()
Definition: RankManager.h:39
cRankManager::ClearPlayerRanks
void ClearPlayerRanks(void)
Removes all player ranks from the database.
Definition: RankManager.cpp:1778
cRankManager::AddGroup
void AddGroup(const AString &a_GroupName)
Adds a new permission group.
Definition: RankManager.cpp:582
cRankManager::RemoveRestrictionFromGroup
void RemoveRestrictionFromGroup(const AString &a_Restriction, const AString &a_GroupName)
Removes the specified restriction from the specified group.
Definition: RankManager.cpp:1246
cRankManager::cMassChangeLock::cMassChangeLock
cMassChangeLock(cRankManager &a_RankManager)
Definition: RankManager.h:33
cRankManager::GetAllPermissions
AStringVector GetAllPermissions(void)
Returns all the distinct permissions that are stored in the DB.
Definition: RankManager.cpp:446
cRankManager::NotifyNameUUID
void NotifyNameUUID(const AString &a_PlayerName, const cUUID &a_UUID)
Called by cMojangAPI whenever the playername-uuid pairing is discovered.
Definition: RankManager.cpp:1705
cRankManager::m_DB
SQLite::Database m_DB
The database storage for all the data.
Definition: RankManager.h:265
cRankManager::GetPlayerMsgVisuals
bool GetPlayerMsgVisuals(const cUUID &a_PlayerUUID, AString &a_MsgPrefix, AString &a_MsgSuffix, AString &a_MsgNameColorCode)
Returns the message visuals (prefix, postfix, color) for the specified player.
Definition: RankManager.cpp:511
cRankManager::GetRankVisuals
bool GetRankVisuals(const AString &a_RankName, AString &a_MsgPrefix, AString &a_MsgSuffix, AString &a_MsgNameColorCode)
Returns the message visuals of an existing rank.
Definition: RankManager.cpp:1496
cRankManager::RemoveGroupFromRank
void RemoveGroupFromRank(const AString &a_GroupName, const AString &a_RankName)
Removes the specified group from the specified rank.
Definition: RankManager.cpp:1154
cRankManager::SetDefaultRank
bool SetDefaultRank(const AString &a_RankName)
Sets the specified rank as the default rank.
Definition: RankManager.cpp:1727
cRankManager::GetRankRestrictions
AStringVector GetRankRestrictions(const AString &a_RankName)
Returns all restrictions that the specified rank has assigned to it, through all its groups.
Definition: RankManager.cpp:334
cRankManager::GetPlayerGroups
AStringVector GetPlayerGroups(const cUUID &a_PlayerUUID)
Returns the names of Groups that the specified player has assigned to them.
Definition: RankManager.cpp:150
cRankManager::RenameRank
bool RenameRank(const AString &a_OldName, const AString &a_NewName)
Renames the specified rank.
Definition: RankManager.cpp:1286
cRankManager::CreateColumnIfNotExists
void CreateColumnIfNotExists(const char *a_TableName, const char *a_ColumnName, const char *a_ColumnType="")
If the specified table doesn't contain the specified column, it is added to the table.
Definition: RankManager.cpp:1933
cRankManager::GetAllPlayerUUIDs
std::vector< cUUID > GetAllPlayerUUIDs(void)
Returns the uuids of all defined players.
Definition: RankManager.cpp:365
cRankManager::IsPlayerRankSet
bool IsPlayerRankSet(const cUUID &a_PlayerUUID)
Returns true iff the specified player has a rank assigned to them in the DB.
Definition: RankManager.cpp:1583
cRankManager::Initialize
void Initialize(cMojangAPI &a_MojangAPI)
Initializes the rank manager.
Definition: RankManager.cpp:41
cRankManager::UpdatePlayerName
bool UpdatePlayerName(const cUUID &a_PlayerUUID, const AString &a_NewPlayerName)
Updates the playername that is saved with this uuid.
Definition: RankManager.cpp:1798
cRankManager::IsPermissionInGroup
bool IsPermissionInGroup(const AString &a_Permission, const AString &a_GroupName)
Returns true iff the specified group contains the specified permission.
Definition: RankManager.cpp:1643
cRankManager::GetRankPermissions
AStringVector GetRankPermissions(const AString &a_RankName)
Returns all permissions that the specified rank has assigned to it, through all its groups.
Definition: RankManager.cpp:303
cRankManager::RemovePermissionFromGroup
void RemovePermissionFromGroup(const AString &a_Permission, const AString &a_GroupName)
Removes the specified permission from the specified group.
Definition: RankManager.cpp:1206
cRankManager::AreDBTablesEmpty
bool AreDBTablesEmpty(void)
Returns true if all the DB tables are empty, indicating a fresh new install.
Definition: RankManager.cpp:1827
cCSLock
RAII for cCriticalSection - locks the CS on creation, unlocks on destruction.
Definition: CriticalSection.h:52
cRankManager::SetPlayerRank
void SetPlayerRank(const cUUID &a_PlayerUUID, const AString &a_PlayerName, const AString &a_RankName)
Sets the specified player's rank.
Definition: RankManager.cpp:1377
cRankManager::GetPlayerPermissions
AStringVector GetPlayerPermissions(const cUUID &a_PlayerUUID)
Returns the permissions that the specified player has assigned to them.
Definition: RankManager.cpp:184
cRankManager::AddPermissionsToGroup
bool AddPermissionsToGroup(const AStringVector &a_Permissions, const AString &a_GroupName)
Adds the specified permissions to the specified permission group.
Definition: RankManager.cpp:877
cRankManager::AddRestrictionsToGroup
bool AddRestrictionsToGroup(const AStringVector &a_Restrictions, const AString &a_GroupName)
Adds the specified restrictions to the specified group.
Definition: RankManager.cpp:947
cRankManager::GetPlayerRankName
AString GetPlayerRankName(const cUUID &a_PlayerUUID)
Returns the name of the rank that the specified player has assigned to them.
Definition: RankManager.cpp:95
cCriticalSection
Definition: CriticalSection.h:8
cRankManager::IsGroupInRank
bool IsGroupInRank(const AString &a_GroupName, const AString &a_RankName)
Returns true iff the specified rank contains the specified group.
Definition: RankManager.cpp:1611
cRankManager::GetAllPermissionsRestrictions
AStringVector GetAllPermissionsRestrictions(void)
Returns all the distinct permissions and restrictions that are stored in the DB.
Definition: RankManager.cpp:496
cRankManager::IsRestrictionInGroup
bool IsRestrictionInGroup(const AString &a_Restriction, const AString &a_GroupName)
Returns true iff the specified group contains the specified restriction.
Definition: RankManager.cpp:1674
cRankManager::RemoveGroup
void RemoveGroup(const AString &a_GroupName)
Removes the specified group completely.
Definition: RankManager.cpp:1103
cRankManager::GetAllRanks
AStringVector GetAllRanks(void)
Returns the names of all defined ranks.
Definition: RankManager.cpp:396
cRankManager::GetGroupPermissions
AStringVector GetGroupPermissions(const AString &a_GroupName)
Returns the permissions that the specified group has assigned to it.
Definition: RankManager.cpp:243
cRankManager::m_MojangAPI
cMojangAPI * m_MojangAPI
The MojangAPI instance that is used for keeping player names and UUIDs in sync.
Definition: RankManager.h:278
cRankManager::GroupExists
bool GroupExists(const AString &a_GroupName)
Returns true iff the specified group exists in the DB.
Definition: RankManager.cpp:1557
cRankManager::AddRestrictionToGroup
bool AddRestrictionToGroup(const AString &a_Restriction, const AString &a_GroupName)
Adds the specified restriction to the specified group.
Definition: RankManager.cpp:810
cRankManager::GetGroupRestrictions
AStringVector GetGroupRestrictions(const AString &a_GroupName)
Returns the restrictions that the specified group has assigned to it.
Definition: RankManager.cpp:273
AString
std::string AString
Definition: StringUtils.h:11
cRankManager::IsDBTableEmpty
bool IsDBTableEmpty(const AString &a_TableName)
Returns true iff the specified DB table is empty.
Definition: RankManager.cpp:1843
cRankManager::cRankManager
cRankManager(void)
Creates the rank manager.
Definition: RankManager.cpp:18
cRankManager::GetDefaultRank
const AString & GetDefaultRank(void) const
Returns the name of the default rank.
Definition: RankManager.h:253
cRankManager::m_CS
cCriticalSection m_CS
The mutex protecting m_DB and m_DefaultRank against multi-threaded access.
Definition: RankManager.h:271
cRankManager::RemovePlayerRank
void RemovePlayerRank(const cUUID &a_PlayerUUID)
Removes the player's rank assignment.
Definition: RankManager.cpp:1439
cRankManager::RemoveRank
void RemoveRank(const AString &a_RankName, const AString &a_ReplacementRankName)
Removes the specified rank.
Definition: RankManager.cpp:1017
AStringVector
std::vector< AString > AStringVector
Definition: StringUtils.h:12
cRankManager::GetPlayerRestrictions
AStringVector GetPlayerRestrictions(const cUUID &a_PlayerUUID)
Returns the restrictions that the specified player has assigned to them.
Definition: RankManager.cpp:198