Просмотр файла siwap.ru/AJAX/login/forgot.php

Размер файла: 3.81Kb
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/system/App.php');

if($sys->isAjax() && $_SERVER['REQUEST_METHOD'] == 'POST')
{
	$stage = isset($_GET['stage']) && !empty($_GET['stage']) ? intval($_GET['stage']) : 1;
	
	if ($stage == 1)
	{
		$login = isset($_POST['login']) && !empty($_POST['login']) ? $sys->protect($_POST['login']) : null;
		
		if (empty($login))
		{
			$json = [
				'error' => 1,
				'comment' => 'Вы не ввели логин/телефон'
			];
		}
		elseif (!preg_match('|^[a-zA-Z0-9_-]+$|i', $login))
		{
			$json = [
				'error' => 1,
				'comment' => 'Не корректный логин/телефон'
			];
		}
		else
		{
			$checkUser = Base::get('user', 'login = :login or number = :number', [
				'login' => $login,
				'number' => $login
			]);
			
			if (!$checkUser)
			{
				$json = [
					'error' => 1,
					'comment' => 'Пользователь с таким логином/телефоном не найден'
				];
			}
			else
			{
				$pincode = random_int(000000, 99999999);
				
				Base::add('forgot', [
					'time' => TIME,
					'user_id' => $checkUser['id'],
					'pincode' => $pincode,
					'hash' => md5($checkUser['id'].$pincode)
				]);
				
				$sendForgotResponse = $aero->send("Пин-код: ".$pincode."\r\n".$_SERVER['HTTP_HOST'], $checkUser['number']);
				
				if (!empty($sendForgotResponse) && $sendForgotResponse->success == true)
				{
					$json = [
						'success' => 1,
						'comment' => 'Пин-код отправлен, введите его в форме ниже',
						'hash' => md5($checkUser['id'].$pincode)
					];
				}
				else
				{
					$core->setLog($sendForgotResponse);
					
					$json = [
						'error' => 1,
						'comment' => "Смс не отправилось на ваш номер!<br> Возможные причины: <br>1) Вы не верно указали номер.<br>2) Ваш номер занесен в черный список. <br>3) Технические причины. <br>Пожалуйста, обратитесь в службу поддержки!"
					];
				}
			}
		}
	}
	elseif ($stage == 2)
	{
		$hash = isset($_POST['hash']) && !empty($_POST['hash']) ? $sys->protect($_POST['hash']) : null;
		$pincode = isset($_POST['pincode']) && !empty($_POST['pincode']) ? $sys->protect($_POST['pincode']) : null;
		$newPassword = isset($_POST['password']) && !empty(trim($_POST['password'])) ? $sys->protect($_POST['password']) : null;
		
		if (empty($hash))
		{
			$json = [
				'error' => 1,
				'comment' => 'Хеш не указан'
			];
		}
		elseif (empty($pincode))
		{
			$json = [
				'error' => 1,
				'comment' => 'Введите пин-код',
			];
		}
		elseif (empty($newPassword))
		{
			$json = [
				'error' => 1,
				'comment' => 'Введите пароль',
			];
		}
		else
		{
			$checkHash = Base::get('forgot', 'recovered <> 1 AND hash = :hash', [
				'hash' => $hash,
			]);
			
			if (!$checkHash)
			{
				$json = [
					'error' => 1,
					'comment' => 'Сессия истекла, попробуйте еще раз',
				];
			}
			else
			{
				
				if ($checkHash['pincode'] != $pincode)
				{
					$json = [
						'error' => 1,
						'comment' => 'Пин-код не верный, либо время действия истекло',
					];
				}
				else
				{
					Base::update('user', $checkHash['user_id'], [
						'password' => $newPassword
					]);
					
					Base::update('forgot', $checkHash['id'], [
						'recovered' => 1,
					]);
					
					$json = [
						'success' => 1,
						'comment' => 'Пароль успешно сменен',
					];
				}
			}
		}
	}
}
else
{
	$json = ['error' => 1, 'comment' => '404 Bad Request'];
}
echo json_encode($json, JSON_UNESCAPED_UNICODE);