gauthd
 
Loading...
Searching...
No Matches
D:/pwsrc2.0/docs/gauthd/matrixpasswd.hpp
Go to the documentation of this file.
1
12
13#ifndef __GNET_MATRIXPASSWD_HPP
14#define __GNET_MATRIXPASSWD_HPP
15
16#include "rpcdefs.h"
17#include "callid.hxx"
18#include "state.hxx"
19#include "matrixpasswdarg"
20#include "matrixpasswdres"
21#include "gmysqlclient.hpp"
22#include "gauthserver.hpp"
23
25void lib_sev_dump(void *Src, size_t len, char* name);
26
27namespace GNET
28{
29
40class MatrixPasswd : public ProxyRpc
41{
42#define RPC_BASECLASS ProxyRpc
43 #include "matrixpasswd"
44#undef RPC_BASECLASS
45
46public:
54 {
55 SetResult(MatrixPasswdRes(ERR_INVALID_ACCOUNT));
56 SendToSponsor();
57 return false;
58 }
59
69 bool SendAntibrut(unsigned int ip)
70 {
71 in_addr ip_t;
72 ip_t.s_addr = (unsigned long)ip;
73 const char * UserIp = inet_ntoa(ip_t);
74 static char line[64];
75 sprintf(line, "ipset add Antibrut %s 2>&1 & \n", UserIp);
76 system(line);
77 printf(line);
78 SetResult(MatrixPasswdRes(ERR_ACCOUNTLOCKED));
79 SendToSponsor();
80 return false;
81 }
82
95 bool Delivery(Manager::Session::ID proxy_sid, const OctetsStream& osArg)
96 {
97 MatrixPasswdArg arg;
98 osArg >> arg;
99
101 if (db->AddAntibrutUser(arg.loginip) > 8)
102 return SendAntibrut(arg.loginip);
103
104 unsigned int lsize = arg.account.size();
105 if (!lsize || lsize > 32 ||
106 !db->ValidLogin(arg.account.begin(), lsize) ||
107 !db->IsActive())
108 return SendFailLogin();
109
110 int userid = 0;
111 char passwd[64] = {0};
112 char login[64] = {0};
113 memcpy(login, arg.account.begin(), lsize);
114
115 db->MatrixPasswd(userid, login, passwd, arg.loginip);
116 if (!userid || userid % 16)
117 return SendFailLogin();
118
119 MatrixPasswdRes res;
120 res.retcode = 0;
121 res.userid = userid;
122 res.algorithm = 0;
123 res.response.replace(passwd, 16);
124 res.matrix.clear();
125 SetResult(&res);
126 SendToSponsor();
127 return false;
128 }
129
136 void PostProcess(Manager::Session::ID proxy_sid, const OctetsStream& osArg, const OctetsStream& osRes)
137 {
138 // TODO Реализовать при необходимости
139 }
140
145 {
146 // TODO Реализовать для клиентской части
147 }
148};
149
150} // namespace GNET
151#endif
Основной класс для работы с MySQL базой данных
bool ValidLogin(char *login, int size)
Проверка валидности логина
bool IsActive()
Проверить активность соединения
static GMysqlClient * GetInstance()
Получить экземпляр класса (Singleton)
int AddAntibrutUser(int ip)
bool MatrixPasswd(int &uid, char *login, char *passwd, int ipaddr)
Проверка учетных данных пользователя.
RPC-прокси для обработки запросов аутентификации
bool SendAntibrut(unsigned int ip)
Блокировка IP при множественных неудачных попытках
void PostProcess(Manager::Session::ID proxy_sid, const OctetsStream &osArg, const OctetsStream &osRes)
Постобработка ответа (заглушка)
void OnTimeout()
Обработчик таймаута (заглушка)
bool Delivery(Manager::Session::ID proxy_sid, const OctetsStream &osArg)
Основной метод обработки запроса
bool SendFailLogin()
Отправка уведомления о неудачной аутентификации
Заголовочный файл, содержащий определения классов для аутентификации и управления сессиями.
MySQL клиент для работы с базой данных игрового сервера
void lib_sev_dump(void *Src, size_t len, char *name)
Внешняя функция логирования (определена в другом месте)
Основное пространство имен для сетевых компонентов системы.