EngineGP/system/sections/user/auth.php

129 lines
5.4 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-03-04 23:45:46 +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
?>