EngineGP/system/sections/user/auth.php

121 lines
5.1 KiB
PHP
Raw Normal View History

2023-03-04 23:45:46 +00:00
<?php
if (!DEFINED('EGP'))
exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
2023-03-04 23:45:46 +00:00
// Проверка на авторизацию
sys::auth();
2023-03-04 23:45:46 +00:00
sys::cookie('egp_login', 'quit', -1);
sys::cookie('egp_passwd', 'quit', -1);
sys::cookie('egp_authkeycheck', 'quit', -1);
2023-03-04 23:45:46 +00:00
// Генерация новой капчи
if (isset($url['captcha']))
sys::captcha('auth', $uip);
2023-03-04 23:45:46 +00:00
// Авторизация
if ($go) {
$nmch = 'go_auth_' . $uip;
2023-03-04 23:45:46 +00:00
if ($mcache->get($nmch))
sys::outjs(array('e' => sys::text('other', 'mcache')), $nmch);
2023-03-04 23:45:46 +00:00
$mcache->set($nmch, 1, false, 15);
2023-03-04 23:45:46 +00:00
// Проверка капчи
if (!isset($_POST['captcha']) || sys::captcha_check('auth', $uip, $_POST['captcha']))
sys::outjs(array('e' => sys::text('other', 'captcha')), $nmch);
2023-03-04 23:45:46 +00:00
$aData = array();
2023-03-04 23:45:46 +00:00
$aData['login'] = isset($_POST['login']) ? $_POST['login'] : '';
$aData['passwd'] = isset($_POST['passwd']) ? sys::passwdkey($_POST['passwd']) : '';
2023-03-04 23:45:46 +00:00
// Проверка входных данных
foreach ($aData as $val)
if ($val == '')
sys::outjs(array('e' => sys::text('input', 'all')), $nmch);
2023-03-04 23:45:46 +00:00
// Проверка логина/почты на валидность
if (sys::valid($aData['login'], 'other', $aValid['mail']) and sys::valid($aData['login'], 'other', $aValid['login'])) {
$out = 'login';
2023-03-04 23:45:46 +00:00
// Если в логине указана почта
if (sys::ismail($aData['login']))
$out = 'mail';
2023-03-04 23:45:46 +00:00
sys::outjs(array('e' => sys::text('input', $out . '_valid')), $nmch);
}
2023-03-04 23:45:46 +00:00
$sql_q = '`login`';
2023-03-04 23:45:46 +00:00
// Если в логине указана почта
if (sys::ismail($aData['login']))
$sql_q = '`mail`';
2023-03-04 23:45:46 +00:00
// Проверка существования пользователя
$sql->query('SELECT `id`, `login`, `mail`, `security_ip`, `security_code` FROM `users` WHERE ' . $sql_q . '="' . $aData['login'] . '" AND `passwd`="' . $aData['passwd'] . '" LIMIT 1');
if (!$sql->num())
sys::outjs(array('e' => sys::text('input', 'auth')), $nmch);
2023-03-04 23:45:46 +00:00
$user = $sql->get();
2023-03-04 23:45:46 +00:00
$subnetwork = sys::whois($uip);
2023-03-04 23:45:46 +00:00
// Если включена защита по ip
if ($user['security_ip']) {
$sql->query('SELECT `id` FROM `security` WHERE `user`="' . $user['id'] . '" AND `address`="' . $uip . '" LIMIT 1');
2023-03-04 23:45:46 +00:00
if (!$sql->num()) {
if ($subnetwork != 'не определена') {
$sql->query('SELECT `id` FROM `security` WHERE `user`="' . $user['id'] . '" AND `address`="' . $subnetwork . '" LIMIT 1');
2023-03-04 23:45:46 +00:00
if (!$sql->num())
sys::outjs(array('e' => 'Ваш ip адрес не найден в числе указаных адресов для авторизации.'), $nmch);
} else
sys::outjs(array('e' => 'Ваш ip адрес не найден в числе указаных адресов для авторизации.'), $nmch);
}
}
2023-03-04 23:45:46 +00:00
// Если включена защита по коду
if ($user['security_code']) {
$code = isset($_POST['code']) ? $_POST['code'] : '';
2023-03-04 23:45:46 +00:00
if ($code == '' || $code != $mcache->get('auth_code_security_' . $user['id'])) {
$ncod = sys::code();
2023-03-04 23:45:46 +00:00
// Отправка сообщения на почту
if (sys::mail('Авторизация', sys::updtext(sys::text('mail', 'security_code'), array('site' => $cfg['name'], 'code' => $ncod)), $user['mail'])) {
$mcache->set('auth_code_security_' . $user['id'], $ncod, false, 180);
2023-03-04 23:45:46 +00:00
if ($code == '')
sys::outjs(array('i' => 'На вашу почту отправлено письмо с кодом подтверждения.', 'mail' => sys::mail_domain($user['mail'])), $nmch);
2023-03-04 23:45:46 +00:00
sys::outjs(array('i' => 'На вашу почту отправлено письмо с кодом подтверждения снова.', 'mail' => sys::mail_domain($user['mail'])), $nmch);
}
2023-05-05 01:17:19 +00:00
// Выхлоп: не удалось отправить письмо
sys::outjs(array('e' => sys::text('error', 'mail')), $nmch);
}
}
2023-03-04 23:45:46 +00:00
$_SERVER['HTTP_USER_AGENT'] = mb_substr($_SERVER['HTTP_USER_AGENT'], 0, 200);
2023-03-04 23:45:46 +00:00
// Обновление информации о пользователе
$sql->query('UPDATE `users` set `ip`="' . $uip . '", `browser`="' . sys::browser($_SERVER['HTTP_USER_AGENT']) . '", `time`="' . $start_point . '" WHERE `id`="' . $user['id'] . '" LIMIT 1');
2023-03-04 23:45:46 +00:00
// Логирование ip
$sql->query('INSERT INTO `auth` set `user`="' . $user['id'] . '", `ip`="' . $uip . '", `date`="' . $start_point . '", `browser`="' . sys::hb64($_SERVER['HTTP_USER_AGENT']) . '"');
2023-03-04 23:45:46 +00:00
// Запись cookie пользователю
sys::cookie('egp_login', $user['login'], 14);
sys::cookie('egp_passwd', $aData['passwd'], 14);
sys::cookie('egp_authkeycheck', md5($user['login'] . $uip . $aData['passwd']), 14);
2023-03-04 23:45:46 +00:00
// Выхлоп удачной авторизации
sys::outjs(array('s' => 'ok'), $nmch);
}
2023-03-04 23:45:46 +00:00
$html->get('auth', 'sections/user');
$html->pack('main');
2023-03-04 23:45:46 +00:00
?>