ddnet/src/engine/server/authmanager.h
heinrich5991 1ebb4f89a6 Reopen: Add a flag for rcon login via username (#800)
This uses an extended protocol message to signal that rcon
authentication might require a username, allowing the client to enable
the username prompt.

Add a forgotten logout on key update
2017-07-24 21:43:55 +02:00

53 lines
1.3 KiB
C++

#ifndef ENGINE_SERVER_AUTH_MANAGER_H
#define ENGINE_SERVER_AUTH_MANAGER_H
#include <base/tl/array.h>
#define MD5_BYTES 16
#define SALT_BYTES 8
class CAuthManager
{
private:
enum
{
AUTHED_NO = 0,
AUTHED_HELPER,
AUTHED_MOD,
AUTHED_ADMIN
};
struct CKey
{
char m_aIdent[64];
unsigned char m_aPw[MD5_BYTES];
unsigned char m_aSalt[SALT_BYTES];
int m_Level;
};
array<CKey> m_aKeys;
int m_aDefault[3];
bool m_Generated;
public:
typedef void (*FListCallback)(const char *pIdent, int Level, void *pUser);
CAuthManager();
void Init();
int AddKeyHash(const char *pIdent, const unsigned char *pHash, const unsigned char *pSalt, int AuthLevel);
int AddKey(const char *pIdent, const char *pPw, int AuthLevel);
int RemoveKey(int Slot); // Returns the old key slot that is now in the named one.
int FindKey(const char *pIdent);
bool CheckKey(int Slot, const char *pPw);
int DefaultKey(int AuthLevel);
int KeyLevel(int Slot);
const char *KeyIdent(int Slot);
void UpdateKeyHash(int Slot, const unsigned char *pHash, const unsigned char *pSalt, int AuthLevel);
void UpdateKey(int Slot, const char *pPw, int AuthLevel);
void ListKeys(FListCallback pfnListCallbac, void *pUser);
void AddDefaultKey(int Level, const char *pPw);
bool IsGenerated();
int NumNonDefaultKeys();
};
#endif //ENGINE_SERVER_AUTH_MANAGER_H