DDNet 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/str.h>
6
7#include <generated/protocol.h>
8
9#include <optional>
10#include <string>
11#include <unordered_map>
12#include <vector>
13
14#define SALT_BYTES 8
15
16namespace RoleName
17{
18 inline const char *const ADMIN = "admin";
19 inline const char *const MODERATOR = "moderator";
20 inline const char *const HELPER = "helper";
21} // namespace RoleName
22
23namespace RoleRank
24{
25 static constexpr int ADMIN = AUTHED_ADMIN;
26 static constexpr int MODERATOR = AUTHED_MOD;
27 static constexpr int HELPER = AUTHED_HELPER;
28 static constexpr int NONE = AUTHED_NO;
29} // namespace RoleRank
30
32{
33 char m_aName[64];
35
36public:
37 // Name of the rcon role. For example "admin".
38 const char *Name() const { return m_aName; }
39
40 // The rank determines how powerful the role is
41 // compared to other roles.
42 // Higher rank means more power.
43 // Roles with lower rank can never kick roles with higher rank.
44 // Roles with higher rank can see commands executed by roles with lower rank
45 // but not vice versa.
46 int Rank() const { return m_Rank; }
47
48 // admin is the strongest role with full access
49 bool IsAdmin() const { return m_Rank == RoleRank::ADMIN; }
50
51 CRconRole(const char *pName, int Rank) :
53 {
54 str_copy(m_aName, pName);
55 }
56};
57
59{
60private:
61 class CKey
62 {
63 public:
64 char m_aIdent[64];
66 unsigned char m_aSalt[SALT_BYTES];
67 CRconRole *m_pRole = nullptr;
68 };
69 std::vector<CKey> m_vKeys;
70 std::unordered_map<std::string, CRconRole> m_Roles;
71
72 int m_aDefault[3];
74
75public:
76 static const char *AuthLevelToRoleName(int AuthLevel);
77 static std::optional<int> RoleNameToAuthLevel(const char *pRoleName);
78
79 typedef void (*FListCallback)(const char *pIdent, const char *pRoleName, void *pUser);
80
82
83 void Init();
84 int AddKeyHash(const char *pIdent, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName);
85 int AddKey(const char *pIdent, const char *pPw, const char *pRoleName);
86 void RemoveKey(int Slot);
87 int FindKey(const char *pIdent) const;
88 bool CheckKey(int Slot, const char *pPw) const;
89
90private:
91 int DefaultIndex(int AuthLevel) const;
92
93public:
94 int DefaultKey(const char *pRoleName) const;
95 int KeyLevel(int Slot) const;
96 const char *KeyIdent(int Slot) const;
97 bool IsValidIdent(const char *pIdent) const;
98 void UpdateKeyHash(int Slot, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName);
99 void UpdateKey(int Slot, const char *pPw, const char *pRoleName);
100 void ListKeys(FListCallback pfnListCallback, void *pUser);
101 void AddDefaultKey(const char *pRoleName, const char *pPw);
102 bool IsGenerated() const;
103 int NumNonDefaultKeys() const;
104 CRconRole *FindRole(const char *pName);
105 bool AddRole(const char *pName, int Rank);
106};
107
108#endif // ENGINE_SERVER_AUTHMANAGER_H
#define SALT_BYTES
Definition authmanager.h:14
Definition authmanager.h:62
unsigned char m_aSalt[8]
Definition authmanager.h:66
MD5_DIGEST m_Pw
Definition authmanager.h:65
char m_aIdent[64]
Definition authmanager.h:64
CRconRole * m_pRole
Definition authmanager.h:67
static const char * AuthLevelToRoleName(int AuthLevel)
Definition authmanager.cpp:19
void(*) FListCallback(const char *pIdent, const char *pRoleName, void *pUser)
Definition authmanager.h:79
const char * KeyIdent(int Slot) const
Definition authmanager.cpp:170
bool IsGenerated() const
Definition authmanager.cpp:222
int m_aDefault[3]
Definition authmanager.h:72
int DefaultIndex(int AuthLevel) const
Definition authmanager.cpp:147
CRconRole * FindRole(const char *pName)
Definition authmanager.cpp:235
int KeyLevel(int Slot) const
Definition authmanager.cpp:163
int AddKey(const char *pIdent, const char *pPw, const char *pRoleName)
Definition authmanager.cpp:106
void RemoveKey(int Slot)
Definition authmanager.cpp:114
bool IsValidIdent(const char *pIdent) const
Definition authmanager.cpp:177
static std::optional< int > RoleNameToAuthLevel(const char *pRoleName)
Definition authmanager.cpp:34
CAuthManager()
Definition authmanager.cpp:56
void Init()
Definition authmanager.cpp:68
bool AddRole(const char *pName, int Rank)
Definition authmanager.cpp:243
void UpdateKey(int Slot, const char *pPw, const char *pRoleName)
Definition authmanager.cpp:193
int DefaultKey(const char *pRoleName) const
Definition authmanager.cpp:152
void AddDefaultKey(const char *pRoleName, const char *pPw)
Definition authmanager.cpp:210
std::unordered_map< std::string, CRconRole > m_Roles
Definition authmanager.h:70
std::vector< CKey > m_vKeys
Definition authmanager.h:69
int NumNonDefaultKeys() const
Definition authmanager.cpp:227
void ListKeys(FListCallback pfnListCallback, void *pUser)
Definition authmanager.cpp:204
bool m_Generated
Definition authmanager.h:73
int AddKeyHash(const char *pIdent, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName)
Definition authmanager.cpp:90
bool CheckKey(int Slot, const char *pPw) const
Definition authmanager.cpp:140
void UpdateKeyHash(int Slot, MD5_DIGEST Hash, const unsigned char *pSalt, const char *pRoleName)
Definition authmanager.cpp:182
int FindKey(const char *pIdent) const
Definition authmanager.cpp:131
Definition authmanager.h:32
const char * Name() const
Definition authmanager.h:38
int Rank() const
Definition authmanager.h:46
bool IsAdmin() const
Definition authmanager.h:49
char m_aName[64]
Definition authmanager.h:33
CRconRole(const char *pName, int Rank)
Definition authmanager.h:51
int m_Rank
Definition authmanager.h:34
int str_copy(char *dst, const char *src, int dst_size)
Definition str.cpp:18
Definition authmanager.h:17
const char *const ADMIN
Definition authmanager.h:18
const char *const MODERATOR
Definition authmanager.h:19
const char *const HELPER
Definition authmanager.h:20
Definition authmanager.h:24
static constexpr int HELPER
Definition authmanager.h:27
static constexpr int ADMIN
Definition authmanager.h:25
static constexpr int NONE
Definition authmanager.h:28
static constexpr int MODERATOR
Definition authmanager.h:26
Definition hash.h:17