Вход Регистрация
Файл: modules/login/index.php
Строк: 104
<?php

/**
 * This file is part of JohnCMS Content Management System.
 *
 * @copyright JohnCMS Community
 * @license   https://opensource.org/licenses/GPL-3.0 GPL-3.0
 * @link      https://johncms.com JohnCMS Project
 */

declare(strict_types=1);

use 
JohncmsSystemHttpRequest;
use 
JohncmsSystemLegacyTools;
use 
JohncmsSystemUsersUser;
use 
JohncmsSystemViewRender;
use 
JohncmsNavChain;

defined('_IN_JOHNCMS') || die('Error: restricted access');

/**
 * @var Request $request
 * @var User $user
 * @var Render $view
 * @var NavChain $nav_chain
 */

$config di('config')['johncms'];
$request di(Request::class);
$user di(User::class);
$view di(Render::class);
$nav_chain di(NavChain::class);

// Регистрируем Namespace для шаблонов модуля
$view->addFolder('login'__DIR__ '/templates/');

$id $request->getPost('id'0FILTER_SANITIZE_NUMBER_INT);
$referer $request->getServer('HTTP_REFERER'$config['homeurl'], FILTER_SANITIZE_SPECIAL_CHARS);

if (
$user->isValid()) {
    
////////////////////////////////////////////////////////////
    // Выход с сайта                                          //
    ////////////////////////////////////////////////////////////
    
if (isset($_POST['logout'])) {
        
// Выход с сайта: удаляем COOKIE и очищаем сессию
        
setcookie('cuid'''time() - 3600'/');
        
setcookie('cups'''time() - 3600'/');
        
$_SESSION = [];
        
header('Location: /');
        exit;
    }
    
$nav_chain->add(__('Personal'), '/profile/?act=office');
    
$nav_chain->add(__('Logout'));
    
// Показываем запрос на подтверждение выхода с сайта
    
echo $view->render('login::logout', ['referer' => $referer]);
} else {
    
////////////////////////////////////////////////////////////
    // Вход на сайт                                           //
    ////////////////////////////////////////////////////////////

    /** @var PDO $db */
    
$db di(PDO::class);

    
/** @var Tools $tools */
    
$tools di(Tools::class);

    
$nav_chain->add(__('Login'));

    
$error = [];
    
$captcha false;
    
$display_form 1;
    
$user_login $request->getPost('n'nullFILTER_SANITIZE_STRING);
    
$user_pass $request->getPost('p'nullFILTER_SANITIZE_STRING);
    
$captchaCode $request->getPost('code'nullFILTER_SANITIZE_STRING);

    if (empty(
$user_login)) {
        
$error[] = __('You have not entered login');
    }

    if (empty(
$user_pass)) {
        
$error[] = __('You have not entered password');
    }

    if (! 
$error) {
        
// Запрос в базу на юзера
        
$stmt $db->prepare('SELECT * FROM `users` WHERE `name_lat` = ? LIMIT 1');
        
$stmt->execute([$tools->rusLat($user_login)]);

        if (
$stmt->rowCount()) {
            
$loginUser = new User($stmt->fetch());

            if (
$loginUser->failed_login 2) {
                if (
$captchaCode) {
                    if (
mb_strlen($captchaCode) > && strtolower($captchaCode) === strtolower($_SESSION['code'])) {
                        
// Если введен правильный проверочный код
                        
$captcha true;
                    } else {
                        
// Если проверочный код указан неверно
                        
$error[] = __('The security code is not correct');
                    }

                    unset(
$_SESSION['code']);
                } else {
                    
// Показываем CAPTCHA
                    
$display_form 0;
                    
$code = (string) new MobicmsCaptchaCode();
                    
$_SESSION['code'] = $code;
                    echo 
$view->render(
                        
'login::captcha',
                        [
                            
'captcha'    => new MobicmsCaptchaImage($code),
                            
'user_login' => $user_login,
                            
'user_pass'  => $user_pass,
                            
'id'         => $loginUser->id,
                        ]
                    );
                }
            }

            if (
$loginUser->failed_login || $captcha) {
                if (
md5(md5($user_pass)) == $loginUser->password) {
                    
// Если логин удачный
                    
$display_form 0;
                    
$db->exec("UPDATE `users` SET `failed_login` = '0' WHERE `id` = " $loginUser->id);

                    if (! 
$loginUser->preg) {
                        
// Показываем сообщение о неподтвержденной регистрации
                        
echo $view->render('login::confirm');
                    } else {
                        
// Если все проверки прошли удачно, подготавливаем вход на сайт
                        
setcookie('cuid', (string) $loginUser->idtime() + 3600 24 365'/');
                        
setcookie('cups'md5($user_pass), time() + 3600 24 365'/');

                        
$db->exec("UPDATE `users` SET `sestime` = '" time() . "' WHERE `id` = " $loginUser->id);
                        
header('Location: /');
                        exit;
                    }
                } else {
                    
// Если логин неудачный
                    
if ($loginUser->failed_login 3) {
                        
// Прибавляем к счетчику неудачных логинов
                        
$failed_login $loginUser->failed_login 1;
                        
$db->exec("UPDATE `users` SET `failed_login` = '" $failed_login "' WHERE `id` = " $loginUser->id);
                    }

                    
$error[] = __('Authorization failed');
                }
            }
        } else {
            
$error[] = __('Authorization failed');
        }
    }

    if (
$display_form) {
        
// Показываем LOGIN форму
        
echo $view->render(
            
'login::login',
            [
                
'error'      => isset($_POST['login']) ? $error : [],
                
'user_login' => $user_login ?? '',
            ]
        );
    }
}
Онлайн: 0
Реклама