Просмотр файла libarea-0.9/app/Content/Check/Registration.php

Размер файла: 3.36Kb
<?php

declare(strict_types=1);

namespace App\Content\Сheck;

use App\Models\Auth\AuthModel;
use App\Content\Сheck\EmailSpam;
use App\Content\Integration\Google;
use Msg;

use Respect\Validation\Validator as v;

class Registration
{
    public static function rules(array $data, string $reg_ip, int $inv_uid)
    {
        $invitation_code = $data['invitation_code'] ?? false;
        $redirect = $invitation_code ? '/register/invite/' . $invitation_code : url('register');

        // Check ip for ban
        // Запрет Ip на бан
        if (is_array(AuthModel::repeatIpBanRegistration($reg_ip))) {
            Msg::redirect(__('msg.multiple_accounts'), 'error', $redirect);
        }


        // Let's check the verification code
        // Проверим код проверки
        if (!$invitation_code) {
            if (config('integration', 'captcha')) {
                if (!Google::checkCaptchaCode()) {
                    Msg::redirect(__('msg.code_error'), 'error', $redirect);
                }
            }
            // Если хакинг формы (If form hacking)
            $inv_uid = 0;
        }

        self::checkLogin($data['login'], $redirect);

        self::checkEmail($data['email'], $redirect);

        // Let's check the password
        // Проверим пароль
        if (v::stringType()->length(8, 32)->validate($data['password']) === false) {
            Msg::redirect(__('msg.string_length', ['name' => '«' . __('msg.password') . '»']), 'error', $redirect);
        }

        if (substr_count($data['password'], ' ') > 0) {
            Msg::redirect(__('msg.password_spaces'), 'error', $redirect);
        }

        if ($data['password'] != $data['password_confirm']) {
            Msg::redirect(__('msg.pass_match_err'), 'error', $redirect);
        }

        return $inv_uid;
    }

    /**
     * Check login
     * Проверим login
     *
     * @param string $login
     * @param string $redirect
     * @return void
     */
    public static function checkLogin(string $login, string $redirect)
    {
        if (v::alnum()->length(3, 12)->validate($login) === false) {
            Msg::redirect(__('msg.string_length', ['name' => '«' . __('msg.nickname') . '»']), 'error', $redirect);
        }

        if (in_array($login, config('stop-nickname', 'list'))) {
            Msg::redirect(__('msg.nick_exist'), 'error', $redirect);
        }

        if (is_array(AuthModel::checkRepetitions($login, 'login'))) {
            Msg::redirect(__('msg.nick_exist'), 'error', $redirect);
        }
    }

    /**
     * Check Email
     * Проверим Email
     *
     * @param string $email
     * @param string $redirect
     * @return void
     */
    public static function checkEmail(string $email, string $redirect)
    {
        if (v::email()->isValid($email) === false) {
            Msg::redirect(__('msg.email_correctness'), 'error', $redirect);
        }

        if (EmailSpam::index($email) === true) {
            Msg::redirect(__('msg.email_forbidden'), 'error', $redirect);
        }

        if (is_array(AuthModel::checkRepetitions($email, 'email'))) {
            Msg::redirect(__('msg.email_replay'), 'error', $redirect);
        }

        $arr = explode('@', $email);
        if (in_array(array_pop($arr), config('stop-email', 'list'))) {
            Msg::redirect(__('msg.email_replay'), 'error', $redirect);
        }
    }
}