· 8 years ago · May 23, 2018, 08:44 PM
1//Ðужен ещё TOPT плагин, он еÑть в архиве
2/*==============================================================================
3
4 Google Security by using TOTP plugin
5 g_security.inc v0.0.1
6 Author: #Djuga
7 Copyright (c) 2018 Dmitriy Djuga (#Djuga)
8==============================================================================*/
9
10#if defined G_SECURITY
11 #endinput
12#endif
13
14#define G_SECURITY
15
16#if __Pawn >= 0x3A && defined __PawnBuild
17 #if __Pawn > 0x3A || __PawnBuild >= 2
18 #define static_enum static enum
19 #endif
20#endif
21#if !defined static_enum
22 #define static_enum enum
23#endif
24
25
26#if !defined GoogleAuthenticatorCode
27 native GoogleAuthenticatorCode(key[], tm);
28#endif
29
30static
31 bool:inc_gPlayerHasProtection[MAX_PLAYERS char],
32 inc_gPlayerSecretKey[MAX_PLAYERS][17],
33 inc_string[193],
34 inc_gLetters[32][] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y","Z","2", "3", "4", "5", "6", "7"};
35
36static_enum
37{
38 INC_DLG_FIRST_STEP = 32765,
39 INC_DLG_SECOND_STEP,
40 INC_DLG_GOOGLE_AUTH
41};
42
43stock ShowGoogleAuth(playerid)
44{
45 if(false == inc_gPlayerHasProtection{playerid})
46 return 0;
47
48 ShowPlayerDialog(playerid, INC_DLG_GOOGLE_AUTH, DIALOG_STYLE_INPUT, "Google Autherization", "Введите Ñекретный ключ из приложениÑ", "Далее", "Отмена");
49
50 return 1;
51}
52
53#if defined CMD
54CMD:sprotection(playerid)
55{
56 if(true == inc_gPlayerHasProtection{playerid})
57 return SendClientMessage(playerid, -1, "У Ð²Ð°Ñ ÑƒÐ¶Ðµ подключена защита! Ð”Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ /oprotection");
58
59 ShowPlayerDialog(playerid, INC_DLG_FIRST_STEP, DIALOG_STYLE_MSGBOX, "Google Authenticator", "Ð’Ñ‹ ÑобираетеÑÑŒ подключить защиту Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Google Authenticator'a\nÐ”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ \"Далее\"", "Далее", "Отмена");
60
61 return 1;
62}
63
64CMD:oprotection(playerid)
65{
66 if(false == inc_gPlayerHasProtection{playerid})
67 return SendClientMessage(playerid, -1, "У Ð²Ð°Ñ Ð½Ðµ подключена Ð´Ð°Ð½Ð½Ð°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð°!");
68
69 format(inc_string, sizeof inc_string, "DELETE FROM `google_protect` WHERE `gKey` = '%s'", inc_gPlayerSecretKey[playerid]);
70
71 #if defined cache_get_value_int /*r41+*/
72 mysql_query(MYSQL_DEFAULT_HANDLE, inc_string, false);
73 #else
74 #if defined cache_get_row_int
75 mysql_query(1, inc_string, false);
76 #endif
77 #endif
78
79 return 1;
80}
81
82#else
83
84public OnPlayerCommandText(playerid, cmdtext[])
85{
86 #if defined s_OnPlayerCommandText
87 s_OnPlayerCommandText(playerid, cmdtext);
88 #endif
89
90 if(0 == strcmp(cmdtext, "/sprotection", true))
91 {
92 if(true == inc_gPlayerHasProtection{playerid})
93 return SendClientMessage(playerid, -1, "У Ð²Ð°Ñ ÑƒÐ¶Ðµ подключена защита! Ð”Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ /oprotection");
94
95 ShowPlayerDialog(playerid, INC_DLG_FIRST_STEP, DIALOG_STYLE_MSGBOX, "Google Authenticator", "Ð’Ñ‹ ÑобираетеÑÑŒ подключить защиту Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Google Authenticator'a\nÐ”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ \"Далее\"", "Далее", "Отмена");
96
97 return 1;
98 }
99
100 else if(0 == strcmp(cmdtext, "/oprotection", true))
101 {
102 if(false == inc_gPlayerHasProtection{playerid})
103 return SendClientMessage(playerid, -1, "У Ð²Ð°Ñ Ð½Ðµ подключена Ð´Ð°Ð½Ð½Ð°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð°!");
104
105 format(inc_string, sizeof inc_string, "DELETE FROM `google_protect` WHERE `gKey` = '%s'", inc_gPlayerSecretKey[playerid]);
106
107 #if defined cache_get_value_int /*r41+*/
108 mysql_query(MYSQL_DEFAULT_HANDLE, inc_string, false);
109 #else
110 #if defined cache_get_row_int
111 mysql_query(1, inc_string, false);
112 #endif
113 #endif
114
115 return 1;
116 }
117
118 return 1;
119}
120
121#endif
122
123#if defined _ALS_OnPlayerCommandText
124 #undef OnPlayerCommandText
125#else
126 #define _ALS_OnPlayerCommandText
127#endif
128
129#define OnPlayerCommandText s_OnPlayerCommandText
130
131forward s_OnPlayerCommandText(playerid, cmdtext[]);
132
133public OnGameModeInit()
134{
135
136 #if defined s_OnGameModeInit
137 s_OnGameModeInit();
138 #endif
139
140 #if defined cache_get_value_int /*r41+*/
141 mysql_query(MYSQL_DEFAULT_HANDLE, "CREATE TABLE IF NOT EXISTS google_protect ( gName varchar(24), gKey varchar(17)) ENGINE=InnoDB;", false);
142 #else
143 #if defined cache_get_row_int
144 mysql_query(1, "CREATE TABLE IF NOT EXISTS google_protect ( gName varchar(24), gKey varchar(17)) ENGINE=InnoDB;", false);
145 #endif
146 #endif
147
148 return 1;
149
150}
151
152#if defined _ALS_OnGameModeInit
153 #undef OnGameModeInit
154#else
155 #define _ALS_OnGameModeInit
156#endif
157
158#define OnGameModeInit s_OnGameModeInit
159
160forward s_OnGameModeInit();
161
162public OnPlayerConnect(playerid)
163{
164
165 GetPlayerName(playerid, inc_string, MAX_PLAYER_NAME);
166
167 format(inc_string, sizeof inc_string,"SELECT * FROM `google_protect` WHERE `gName` = '%s'", inc_string);
168 #if defined cache_get_value_int /*r41+*/
169 mysql_tquery(MYSQL_DEFAULT_HANDLE, inc_string, "@__inc_GetPlayerData", "i", playerid);
170 #else
171 #if defined cache_get_row_int
172 mysql_tquery(1, inc_string, "@__inc_GetPlayerData", "i", playerid);
173 #endif
174 #endif
175
176 #if defined s_OnPlayerConnect
177 return s_OnPlayerConnect(playerid);
178 #endif
179}
180
181#if defined _ALS_OnPlayerConnect
182 #undef OnPlayerConnect
183#else
184 #define _ALS_OnPlayerConnect
185#endif
186
187
188#define OnPlayerConnect s_OnPlayerConnect
189
190forward s_OnPlayerConnect(playerid);
191
192@__inc_GetPlayerData(playerid);
193@__inc_GetPlayerData(playerid)
194{
195 #if defined cache_get_value_name /*r41+*/
196 new
197 rows;
198
199 cache_get_row_count(rows);
200
201 if(0 == rows)
202 {
203 inc_gPlayerHasProtection{playerid} = false;
204
205 return 1;
206 }
207
208 cache_get_value_name(0, "gKey", inc_gPlayerSecretKey[playerid], 17);
209 #else
210 #if defined cache_get_field_content
211 new
212 rows,
213 fields;
214
215 cache_get_data(rows, fields);
216
217 if(0 == rows)
218 return 1;
219
220 cache_get_field_content(0, "gKey", inc_gPlayerSecretKey[playerid], 1, 17);
221 #endif
222 #endif
223
224 inc_gPlayerHasProtection{playerid} = true;
225
226 return 1;
227
228}
229
230public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
231{
232
233 switch(dialogid)
234 {
235 case INC_DLG_FIRST_STEP:
236 {
237 if(0 == response)
238 return 1;
239
240 inc_gPlayerSecretKey[playerid][0] = EOS;
241
242 for(new i; i < 17; i++)
243 strcat(inc_gPlayerSecretKey[playerid], inc_gLetters[random(sizeof inc_gLetters)]);
244
245 format(inc_string, sizeof inc_string, "1. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° Ñкачайте Google Authenticator.\n2. Затем введитье данный код в приложение: \"%s\"\n3. ПоÑле ввода кода, введить 6-ти значный код, который поÑвилÑÑ Ñƒ Ð²Ð°Ñ Ð½Ð° Ñкране.", inc_gPlayerSecretKey[playerid]);
246
247 ShowPlayerDialog(playerid, INC_DLG_SECOND_STEP, DIALOG_STYLE_INPUT , "Google Authenticator", inc_string, "Далее", "Отмена");
248 }
249
250 case INC_DLG_SECOND_STEP:
251 {
252 if(0 == response)
253 return 1;
254
255 new
256 google_key = GoogleAuthenticatorCode(inc_gPlayerSecretKey[playerid], gettime());
257
258 if(google_key != strval(inputtext))
259 {
260 SendClientMessage(playerid, -1, "Ðеверный пароль Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ!");
261
262 ShowPlayerDialog(playerid, INC_DLG_SECOND_STEP, DIALOG_STYLE_INPUT , "Google Authenticator", "Введите 6-ти значный код из приложениÑ", "Далее", "Отмена");
263
264 return 1;
265 }
266
267 GetPlayerName(playerid, inc_string, MAX_PLAYER_NAME);
268
269 format(inc_string, sizeof inc_string, "INSERT INTO `google_protect` (`gName`, `gKey`) VALUES ('%s', '%s')", inc_string, inc_gPlayerSecretKey[playerid]);
270
271 #if defined cache_get_value_int /*r41+*/
272 mysql_query(MYSQL_DEFAULT_HANDLE, inc_string, false);
273 #else
274 #if defined cache_get_row_int
275 mysql_query(1, inc_string, false);
276 #endif
277 #endif
278
279 SendClientMessage(playerid, -1, "Ð’Ñ‹ уÑпешно уÑтановили Ñебе Google Authenticator!");
280 }
281
282 case INC_DLG_GOOGLE_AUTH:
283 {
284 if(0 == response)
285 Kick(playerid);
286
287 new
288 google_key = GoogleAuthenticatorCode(inc_gPlayerSecretKey[playerid], gettime());
289
290 if(google_key != strval(inputtext))
291 {
292 SendClientMessage(playerid, -1, "Ðеверный пароль Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ!");
293
294 Kick(playerid);
295
296 return 1;
297 }
298
299 SendClientMessage(playerid, -1, "Ð’Ñ‹ уÑпешно авторизовалиÑÑŒ!");
300 }
301 }
302
303 #if defined s_OnDialogResponse
304 return s_OnDialogResponse(playerid, dialogid, response, listitem, inputtext);
305 #endif
306}
307
308#if defined _ALS_OnDialogResponse
309 #undef OnDialogResponse
310#else
311 #define _ALS_OnDialogResponse
312#endif
313
314#define OnDialogResponse s_OnDialogResponse
315
316forward s_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);