<?php
# определение данных
$post = array(); // массив пост - данных
$form = false; // имя формы
$go = false; // переадресация
####################
####################
# проверка отправки формы, конечный этап, восстановление по умолчанию
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['recovery'])) { $post['restore'] = 'stopped';
# проверка данных
$post['id'] = (isset($_POST['id']) && $FUNC->filter($_POST['id'], 'int')) ? $_POST['id'] : 'stopped'; // идентификатор
$post['token'] = (isset($_POST['hash']) && $FUNC->filter($_POST['hash'], 'var')) ? $_POST['hash'] : 'stopped'; // токен
$post['pass'] = (isset($_POST['pass']) && $USER->filter($_POST['pass'], 'pass', DATA['pass'])) ? $_POST['pass'] : 'stopped'; // пароль
$post['restore'] = ($post['id'] != 'stopped' && $post['token'] != 'stopped' && $post['pass'] != 'stopped' && db_exist($DB, 'users', 'id',
array('id' => $post['id'], 'pass;!=' => NULL)) && db_exist($DB, 'tokens', 'id', array('time;>' => time(), 'token' => $post['token'],
'type' => 'recov', 'user' => $post['id']))) ? 'true' : 'stopped'; // возможность восстановления
$post['token'] = (isset($_POST['token']) && $_POST['token'] == TOKEN) ? 'true' : 'stopped'; // токен
# определение наличия ошибок
if (in_array('stopped', $post)) { $_POST['recovery'] = 'ok'; $recovery = true; // показ формы с паролем
$value = (isset($_POST['pass']) && $USER->filter($_POST['pass'], 'pass', DATA['pass'])) ? ' value="'. $_POST['pass'] .'"': false; // указанный пароль
# отсутствие ошибок
} else {
# обработка данных, в базе данных
db_delete($DB, 'tokens', array('token' => $post['token'], 'type' => 'recov', 'user' => $post['id'])); // удаление токена
db_update($DB, 'users', array('pass' => $FUNC->hashing($_POST['pass'])), array ('id' => $post['id'])); // обновление пароля
# данные авторизации
$hash = $FUNC->random(20); // случайная строка
$num = $FUNC->random(9, true); // случайный номер
$browser = $FUNC->browser(AGENT); // браузер
$device = $FUNC->device(AGENT); // используемое устройство
$os = $FUNC->os(AGENT); // операционная система
$ip = $FUNC->ip(IP); // ip - адрес клиента
$auth = $hash .'z'. $num; // данные авторизации
$FUNC->sess('auth', $auth); // запись авторизации
db_delete($DB, 'auths', array('user' => $post['id'])); // чистка авторизаций
# запись авторизации в базу данных
db_create($DB, 'auths', array('browser' => $browser, 'device' => $device, 'hash' => $hash, 'ip' => $ip, 'num' => $num, 'os' => $os, 'user' => $post['id']));
# переадресация в игру
$go = '/garden'; } }
####################
####################
# проверка отправки формы, начальный этап, восстановление по умолчанию
elseif ($_SERVER['REQUEST_METHOD'] == 'POST') { $post['recovery'] = 'stopped';
# проверка данных
$post['email'] = (isset($_POST['email']) && $USER->filter($_POST['email'], 'email')) ? $_POST['email'] : 'stopped'; // e-mail
$post['recovery'] = ($post['email'] != 'stopped' && db_exist($DB, 'users', 'id', array('email' => $post['email'], 'pass;!=' => NULL))) ? 'true' : 'stopped'; // наличие аккаунта
# определение наличия ошибок
if (in_array('stopped', $post)) { $recovery = true; // показ формы восстановления
$value = (isset($_POST['email']) && !empty($_POST['email'])) ? ' value="'. $_POST['email'] .'"': false; // указанный e-mail
# отсутствие ошибок
} else { $token = $FUNC->random(50); // токен
# обработка данных активации
$user = db_output($DB, 'users', array('id','email'), array('email' => $post['email'])); // данные пользователя
db_delete($DB, 'tokens', array('type' => 'recov', 'user' => $user['id'])); // чистка токенов
db_create($DB, 'tokens', array('time' => time() + DATA['token'], 'token' => $token, 'type' => 'recov', 'user' => $user['id'])); // создание активации
# отправка e-mail с активацией
$message = '<h2>Восстановление доступа в онлайн - игре "'. SERV['name'] .'"!</h2><p>Для восстановления аккаунта перейдите по ссылке:
<a href="https://'. SERV['host'] .'/recovery/'. $user['id'] .'/token/'. $token .'">восстановить</a></p>'; // сообщение
$headers = "From: ". SERV['name'] ." ". SERV['email'] ." \r\n"; // заголовок, от кого письмо
$headers .= "Content-type: text/html; charset=utf-8 \r\n"; // заголовок, кодировка
mail($user['email'], 'Восстановление', $message, $headers); } } // отправка письма
?>