DDraceNetwork Documentation
Loading...
Searching...
No Matches
authmanager.h
Go to the documentation of this file.
1#ifndef ENGINE_SERVER_AUTHMANAGER_H
2#define ENGINE_SERVER_AUTHMANAGER_H
3
4#include <base/hash.h>
5#include <base/system.h>
6
8
9#include <string>
10#include <unordered_map>
11#include <vector>
12
13#define SALT_BYTES 8
14
15namespace RoleName
16{
17 inline const char *const ADMIN = "admin";
18 inline const char *const MODERATOR = "moderator";
19 inline const char *const HELPER = "helper";
20} // namespace RoleName
21
22namespace RoleRank
23{
24 static constexpr int ADMIN = AUTHED_ADMIN;
25 static constexpr int MODERATOR = AUTHED_MOD;
26 static constexpr int HELPER = AUTHED_HELPER;
27 static constexpr int NONE = AUTHED_NO;
28} // namespace RoleRank
29
31{
32 char m_aName[64];
34
35public:
36 // Name of the rcon role. For example "admin".
37 const char *Name() const { return m_aName; }
38
39 // The rank determines how powerful the role is
40 // compared to other roles.
41 // Higher rank means more power.
42 // Roles with lower rank can never kick roles with higher rank.
43 // Roles with higher rank can see commands executed by roles with lower rank
44 // but not vice versa.
45 int Rank() const { return m_Rank; }
46
47 CRconRole(const char *pName, int Rank) :
49 {
50 str_copy(m_aName, pName);
51 }
52};
53
55{
56private:
57 class CKey
58 {
59 public:
60 char m_aIdent[64];
62 unsigned char m_aSalt[SALT_BYTES];
63 CRconRole *m_pRole = nullptr;
64 };
65 std::vector<CKey> m_vKeys;
66 std::unordered_map<std::string, CRconRole> m_Roles;
67
68 int m_aDefault[3];
70
71public:
72 static const char *AuthLevelToRoleName(int AuthLevel);
73
74 typedef void (*FListCallback)(const char *pIdent, const char *pRoleName, void *pUser);
75
77
78 void Init();
79 int AddKeyHash(const char *pIdent, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName);
80 int AddKey(const char *pIdent, const char *pPw, const char *pRoleName);
81 void RemoveKey(int Slot);
82 int FindKey(const char *pIdent) const;
83 bool CheckKey(int Slot, const char *pPw) const;
84
85private:
86 int DefaultIndex(int AuthLevel) const;
87
88public:
89 int DefaultKey(const char *pRoleName) const;
90 int KeyLevel(int Slot) const;
91 const char *KeyIdent(int Slot) const;
92 bool IsValidIdent(const char *pIdent) const;
93 void UpdateKeyHash(int Slot, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName);
94 void UpdateKey(int Slot, const char *pPw, const char *pRoleName);
95 void ListKeys(FListCallback pfnListCallback, void *pUser);
96 void AddDefaultKey(const char *pRoleName, const char *pPw);
97 bool IsGenerated() const;
98 int NumNonDefaultKeys() const;
99 CRconRole *FindRole(const char *pName);
100 bool AddRole(const char *pName, int Rank);
101};
102
103#endif //ENGINE_SERVER_AUTHMANAGER_H
#define SALT_BYTES
Definition authmanager.h:13
Definition authmanager.h:58
unsigned char m_aSalt[8]
Definition authmanager.h:62
MD5_DIGEST m_Pw
Definition authmanager.h:61
char m_aIdent[64]
Definition authmanager.h:60
CRconRole * m_pRole
Definition authmanager.h:63
static const char * AuthLevelToRoleName(int AuthLevel)
Definition authmanager.cpp:14
void(* FListCallback)(const char *pIdent, const char *pRoleName, void *pUser)
Definition authmanager.h:74
const char * KeyIdent(int Slot) const
Definition authmanager.cpp:165
bool IsGenerated() const
Definition authmanager.cpp:217
int m_aDefault[3]
Definition authmanager.h:68
int DefaultIndex(int AuthLevel) const
Definition authmanager.cpp:142
CRconRole * FindRole(const char *pName)
Definition authmanager.cpp:230
int KeyLevel(int Slot) const
Definition authmanager.cpp:158
int AddKey(const char *pIdent, const char *pPw, const char *pRoleName)
Definition authmanager.cpp:101
void RemoveKey(int Slot)
Definition authmanager.cpp:109
bool IsValidIdent(const char *pIdent) const
Definition authmanager.cpp:172
CAuthManager()
Definition authmanager.cpp:51
void Init()
Definition authmanager.cpp:63
bool AddRole(const char *pName, int Rank)
Definition authmanager.cpp:238
void UpdateKey(int Slot, const char *pPw, const char *pRoleName)
Definition authmanager.cpp:188
int DefaultKey(const char *pRoleName) const
Definition authmanager.cpp:147
void AddDefaultKey(const char *pRoleName, const char *pPw)
Definition authmanager.cpp:205
std::unordered_map< std::string, CRconRole > m_Roles
Definition authmanager.h:66
std::vector< CKey > m_vKeys
Definition authmanager.h:65
int NumNonDefaultKeys() const
Definition authmanager.cpp:222
void ListKeys(FListCallback pfnListCallback, void *pUser)
Definition authmanager.cpp:199
bool m_Generated
Definition authmanager.h:69
int AddKeyHash(const char *pIdent, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName)
Definition authmanager.cpp:85
bool CheckKey(int Slot, const char *pPw) const
Definition authmanager.cpp:135
void UpdateKeyHash(int Slot, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName)
Definition authmanager.cpp:177
int FindKey(const char *pIdent) const
Definition authmanager.cpp:126
Definition authmanager.h:31
const char * Name() const
Definition authmanager.h:37
int Rank() const
Definition authmanager.h:45
char m_aName[64]
Definition authmanager.h:32
CRconRole(const char *pName, int Rank)
Definition authmanager.h:47
int m_Rank
Definition authmanager.h:33
@ AUTHED_MOD
Definition protocol.h:80
@ AUTHED_ADMIN
Definition protocol.h:81
@ AUTHED_HELPER
Definition protocol.h:79
@ AUTHED_NO
Definition protocol.h:78
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:6
Definition authmanager.h:16
const char *const ADMIN
Definition authmanager.h:17
const char *const MODERATOR
Definition authmanager.h:18
const char *const HELPER
Definition authmanager.h:19
Definition authmanager.h:23
static constexpr int HELPER
Definition authmanager.h:26
static constexpr int ADMIN
Definition authmanager.h:24
static constexpr int NONE
Definition authmanager.h:27
static constexpr int MODERATOR
Definition authmanager.h:25
Definition hash.h:20