3
* EngineGP (https://enginegp.ru or https://enginegp.com)
5
* @copyright Copyright (c) 2018-present Solovev Sergei <inbox@seansolovev.ru>
7
* @link https://github.com/EngineGPDev/EngineGP for the canonical source repository
9
* @license https://github.com/EngineGPDev/EngineGP/blob/main/LICENSE MIT License
16
exit(header('Refresh: 0; URL=http://' . $_SERVER['HTTP_HOST'] . '/404'));
19
// Подключение filp/whoops
20
$whoops = new \Whoops\Run();
21
$prettyPageHandler = new \Whoops\Handler\PrettyPageHandler();
22
foreach ($cfg['whoops']['blacklist'] as $key => $secrets) {
23
foreach ($secrets as $secret) {
24
$prettyPageHandler->blacklist($key, $secret);
27
$whoops->pushHandler($prettyPageHandler);
28
// логи в консоль браузера
29
$loggingInConsole = new \Whoops\Handler\PlainTextHandler();
30
$loggingInConsole->loggerOnly(true);
31
$loggingInConsole->setLogger((new \Monolog\Logger('EngineGP', [(new \Monolog\Handler\BrowserConsoleHandler())->setFormatter((new \Monolog\Formatter\LineFormatter(null, null, true)))])));
32
$whoops->pushHandler($loggingInConsole);
34
$loggingInFile = new \Whoops\Handler\PlainTextHandler();
35
$loggingInFile->loggerOnly(true);
36
$loggingInFile->setLogger((new \Monolog\Logger('EngineGP', [(new \Monolog\Handler\StreamHandler(ROOT . '/logs/enginegp.log'))->setFormatter((new \Monolog\Formatter\LineFormatter(null, null, true)))])));
37
$whoops->pushHandler($loggingInFile);
41
$url = is_array(sys::url()) ? sys::url() : [];
42
$route = sys::url(false);
43
$section = $url['section'] ?? false;
45
$id = array_key_exists('id', $url) ? sys::int($url['id']) : false;
46
$go = array_key_exists('go', $url);
47
$page = array_key_exists('page', $url) ? sys::int($url['page']) : 1;
48
$route = $route == '' ? 'index' : $route;
51
if (isset($_GET['account'])) {
52
$_SESSION['referrer'] = sys::int($_GET['account']);
58
// Получение токена из куки
59
$refreshToken = $_COOKIE['refresh_token'] ?? null;
61
// Порог обновления токена
62
$refreshThreshold = 86400 * 7;
67
$decodedJwt = JWT::decode($refreshToken, new Key($_ENV['JWT_KEY'], 'HS256'));
70
$user['id'] = $decodedJwt->id;
72
// Если токен истекает менее чем через 7 дней, создаём новый
73
if ($decodedJwt->exp - $start_point < $refreshThreshold) {
76
'iat' => $start_point,
77
'exp' => $start_point + 86400 * 30,
80
// Генерация JWT токена
81
$refreshToken = JWT::encode($payload, $_ENV['JWT_KEY'], 'HS256');
83
// Обновление куки с новым токеном
84
setcookie('refresh_token', $refreshToken, [
85
'expires' => $start_point + 86400 * 30,
87
'domain' => $_SERVER['HTTP_HOST'],
88
'samesite' => 'Strict',
92
// Получение информации о пользователе из базы данных
93
$sql->query('SELECT `id`, `login`, `balance`, `group`, `level`, `time` FROM `users` WHERE `id`="' . $user['id'] . '" LIMIT 1');
97
// Обновление активности
98
if ($user['time'] + 10 < $start_point) {
99
$sql->query('UPDATE `users` set `time`="' . $start_point . '" WHERE `id`="' . $user['id'] . '" LIMIT 1');
104
} catch (Exception $e) {
105
// Если токен недействителен, удаляем куку
106
setcookie('refresh_token', '', [
107
'expires' => $start_point - 3600,
109
'domain' => $_SERVER['HTTP_HOST'],
110
'samesite' => 'Strict',
122
$html->nav($cfg['name'], $cfg['http']);
124
include(DATA . 'header.php');
127
if (in_array($route, $aRoute)) {
128
include(ENG . $route . '.php');
130
include(ENG . '404.php');
134
if (isset($html->arr['main'])) {
145
$cfg['http'] . 'template/js/',
146
$cfg['http'] . 'template/css/',
147
$cfg['http'] . 'template/images/',
152
// Онлайн игроков (общее количество всех игроков)
154
//$aop = $mcache->get('all_online_players'); //Если ваш хостинг чувствует себя плохо из за чрезмерной нагрузки от данного модуля, то включите кеширование, раскомментировав этот кусочек кода
156
$sql->query('SELECT SUM(`online`) FROM `servers` WHERE `status`="working" OR `status`="change"');
159
$aop = $sum['SUM(`online`)'];
161
$mcache->set('all_online_players', $aop, false, 1);
166
$html->set('title', $title . ' | ' . $cfg['name']);
167
$html->set('description', sys::head('description'));
168
$html->set('keywords', sys::head('keywords'));
169
$html->set('home', $cfg['http']);
170
$html->set('js', $cfg['http'] . 'template/js/');
171
$html->set('css', $cfg['http'] . 'template/css/');
172
$html->set('img', $cfg['http'] . 'template/images/');
173
$html->set('aop', $aop);
174
$html->set('cur', $cfg['currency']);
178
// Здесь вы можете использовать информацию о пользователе, например, $user['balance']
179
$html->set('login', $user['login']);
180
$html->set('balance', round($user['balance'], 2));
181
$html->set('other_menu', $html->arr['vmenu'] ?? '');
183
// Если пользователь не авторизован, выполните необходимые действия
184
$html->set('other_menu', '');
187
$html->set('nav', $html->arr['nav'] ?? '', true);
188
$html->set('main', $html->arr['main'] ?? '', true);
190
$sql->query('SELECT `id`, `login`, `time` FROM `users` ORDER BY `id` ASC');
191
$online = '<span style="padding:0 5px;">';
192
while ($staff = $sql->get()) {
193
if ($staff['time'] + 15 > $start_point) {
194
$online .= $staff['login'] . ', ';
200
$html->set('online_users', $online);
205
// Проверка наличия игрового сервера
206
$servers = $sql->query('(SELECT `id` FROM `servers` WHERE `user`="' . $user['id'] . '" LIMIT 1) UNION (SELECT `id` FROM `owners` WHERE `user`="' . $user['id'] . '" LIMIT 1)');
209
$html->unitall('servers', 'all', 1, 1);
211
$html->unitall('servers', 'all', 0, 1);
214
$html->unitall('auth', 'all', 1, 1);
215
$html->unitall('admin', 'all', $user['group'] == 'admin', 1);
216
$html->unitall('support', 'all', $user['group'] == 'support', 1);
218
$html->unitall('auth', 'all', 0, 1);
219
$html->unitall('servers', 'all', 0, 1);
220
$html->unitall('admin', 'all', 0, 1);
221
$html->unitall('support', 'all', 0, 1);