Вход Регистрация
Файл: 3020.ru/file_3020/plugins/recovery.password.php
Строк: 150
<?
if ($level 0) {
  
header('Location: ?func=user.main');
  exit;
}

$email null;
$whats = array('1' => 'Любимое животное''2' => 'Имя школьной учительницы''3' => 'Девичья фамилия матери''4' => 'Любимый город''5' => 'Любимое блюдо');

if (isset(
$_GET['code'])) {
  
$key $sql->esc($_GET['code']);
  
  if (
$sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `token` = '$key'") == 1) {
      
$user_recovery $sql -> fetch("SELECT * FROM `users` WHERE `token` = '$key' LIMIT 1");
    
$codeget md5(date("d:m:Y") . $user_recovery['email'] . $user_recovery['password'] . $user_recovery['login']);
    
    if (
$codeget != $user_recovery['token']) {
      
$sql -> update("UPDATE `users` SET `token` = '0' WHERE `id` = '$user_recovery[id]' LIMIT 1");
      
$err[] = 'К сожалению данная ссылка устарела';
    }
    
    if (!isset(
$err)) {
      
$_SESSION['token'] = $codeget;
    }
  } else {
    
$err[] = 'Неверная ссылка для восстановления доступа';
  }
}

if (isset(
$_SESSION['token'])) {
  
  function 
generatePassword($length=10$complex=3)
{

$min "abcdefghijklmnopqrstuvwxyz";
$num "0123456789";
$maj "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$symb "!@#$%&*()_-=+?";
$chars $min;
if (
$complex >= 2) { $chars .= $num; }
if (
$complex >= 3) { $chars .= $maj; }
if (
$complex >= 4) { $chars .= $symb; }
$password substrstr_shuffle$chars ), 0$length );
return 
$password;

/*
    $return = $chars = null;

    if(strstr($type, 'a-z'))
        $chars .= 'abcdefghijklmnopqrstuvwxyz';
    if(strstr($type, 'A-Z'))
        $chars .= 'ABCDEFGHIJKLMNOPRQSTUVWXYZ';
    if(strstr($type, '0-9'))
        $chars .= '0123456789';

    for($i = 0, $sl = strlen($chars) - 1; $i < $length; $i++)
        $return .= $chars[rand(0,$sl)];

    return $return;
*/
}        
$newpassword generatePassword(10) ;
  
  
/*
    $newpassword = $sql->esc($_POST['pass1']);
    
    if ($_POST['pass1'] && !preg_match("#^([A-z0-9])+$#ui", $_POST['pass1'])) {
        $err[] = 'Пароль должен содержать только английские буквы и цифры';
    }
    
    if ($_POST['pass1'] != $_POST['pass2']) {
        $err[] = 'Пароли не совпадают';
    }
    
    if (strlen2($_POST['pass1']) > 20) {
        $err[] = 'Пароль слишком длинный';
    } elseif (strlen2($_POST['pass1']) < 6) {
        $err[] = 'Пароль слишком короткий';
    } 
  */
  
if ($sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `token` = '$_SESSION[token]'") == 1) {
      
$login $sql -> fetch("SELECT * FROM `users` WHERE `token` = '$_SESSION[token]' LIMIT 1");
  } else {
    
$err[] = 'Сессия для восстановления доступа устарела';
  }
  
    if (!isset(
$err) && isset($login['id'])) {
        
$sql -> update("UPDATE `users` SET `password` = '" md5($newpassword) . "', `token` = '0' WHERE `id` = '$login[id]' LIMIT 1");
    
        if (
function_exists('mail')) {


        
// в этом массиве то, что попадет в наш HTML шаблон письма
    
$array = array('hello' => 'Здравствуйте ' $login['login'], // {hello} . Приветствие  
    
'message' => 'Вы успешно восстановили доступ от Вашего аккаунта на сайте 
    <b>http://' 
$_SERVER['HTTP_HOST'] . '</b>.<br />
            Ваш логин: ' 
$login['login'] . ' [ID ' $login['id'] . ']<br />
            Ваш пароль: <b>'
.$newpassword.'</b>
            '
// обязательно текст письма, но само завизит от того что в шаблоне указано. у меня {message}
    
'linkbutton' => 'http://' $_SERVER['HTTP_HOST'] . '/?func=user.auth'// у меня в шаблоне кнопка, это ссылка в ней {linkbutton}
    
'textbutton' => 'Авторизация' // а это название моей кнопки {textbutton}
    
);

        
$Subject 'Доступ восстановлен';  // обязательно заголовок письма
        
$addAdress $login['email']; // сверх важно!! кому письмо
        
$template 'default'// название шаблона и папки в которой он лежит. Если у вас свой шаблон, напишите название воего 


        // пробуем выслать наше письмо
        
$OutMailer Mailer($array$Subject$addAdress$template);

        if (
$OutMailer === false)
        {

        }
else  echo 
$OutMailer// если есть ошибки, их покажет
}

      
$sql -> insert("INSERT INTO `users_log` (`ua`, `ip`, `time`, `type`, `id_user`) VALUES ('" $sql->esc($ua) . "', '" $sql->esc($iplong) . "', '$time', 'recovery', '$login[id]')");

        
//$sql -> insert("INSERT INTO `users_log` (`ua`, `ip`, `time`, `type`, `id_user`) VALUES ('" . $sql->esc($ua) . "', '" . $sql->esc($ip) . "', '$time', 'recovery', '$login[id]')");
        
$_SESSION['id_user'] = $login['id'];
        
setcookie('id_user'$login['id'], time() + 60 60 24 365);
        
setcookie('pass'cookie_encrypt($newpassword$login['id']), time() + 60 60 24 365);
    }
}

if (isset(
$_POST['email']) && isset($_POST['captcha'])) {
  
  
$email $sql->esc($_POST['email']);
  
  
$captcha = (int) $_POST['captcha'];
  if (
$captcha != $_SESSION['captcha']) {
    
$err[] = 'Неверный код с картинки';
  }
  
  if (!isset(
$err)) {
      if (
$sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `email` = '$email'") == 0) {
          
$err[] = 'Пользователя с таким Email не cуществует';
      } else {
      
$_SESSION['recovery_step'] = '2';
      
$tmp_user =  $sql -> fetch("SELECT * FROM `users` WHERE `email` = '$email' LIMIT 1");
    }
  }
    
  if (isset(
$_POST['keyword'])) {
    
$keyword $sql->esc($_POST['keyword']);
  
    if (!isset(
$err)) {
        if (
$sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `email` = '$email' AND `keyword` = '$keyword'") == 0) {
            
$err[] = 'Неверное секретное слово';
        } else {
        
$_SESSION['recovery_step'] = '3';
        
$tmp_user =  $sql -> fetch("SELECT * FROM `users` WHERE `email` = '$email' AND `keyword` = '$keyword' LIMIT 1");
        
            if (
function_exists('mail')) {
          
$code md5(date("d:m:Y") . $tmp_user['email'] . $tmp_user['password'] . $tmp_user['login']);
          
$sql -> update("UPDATE `users` SET `token` = '$code' WHERE `id` = '$tmp_user[id]' LIMIT 1");
          
            
// в этом массиве то, что попадет в наш HTML шаблон письма
        
$array = array('hello' => 'Здравствуйте Уважаемый, пользователь ' $tmp_user['login'], // {hello} . Приветствие  
    
'message' => 'Вы активировали восстановление пароля<br />
    Для установки нового пароля нажмите на кнопку ниже или скопируйте в буфер ссылку и вставьте ее в адресную строку Вашего браузера:<br /> 
    http://' 
$_SERVER['HTTP_HOST'] . '/?func=recovery.password&code=' $code ' . <br />
    Эта ссылка действительна до конца дня, поторопитесь завершить процедуру восстановления.'

    
'linkbutton' => 'http://' $_SERVER['HTTP_HOST'] . '/?func=recovery.password&code='.$code,
    
'textbutton' => 'Восстановить пароль');

        
$Subject 'Восстановление пароля';  // обязательно заголовок письма
        
$addAdress $tmp_user['email']; // сверх важно!! кому письмо
        
$template 'default'// название шаблона и папки в которой он лежит. Если у вас свой шаблон, напишите название воего 


        // пробуем выслать наше письмо
        
$OutMailer Mailer($array$Subject$addAdress$template);

        if (
$OutMailer === false)
        {

        }
else  echo 
$OutMailer// если есть ошибки, их покажет
}

        
session_destroy();
      }
    }
  }
}

if (!isset(
$_SESSION['recovery_step'])) {
  
$_SESSION['recovery_step'] = 1;
}

$system['title'] = 'Восстановление доступа';
require 
SYS 'header.php';

if (isset(
$login['id'])) {
  
?>
  <div class="alert alert-success">
    <center>
      <img src="<?= ICONS?>big_ok.png" /> <b>Доступ успешно восстановлен!</b><br />
      Вы успешно восстановили пароль от нашего аккаунта, теперь Вы можете пользоваться своим аккаунтом как и прежде!<br />
      Новый Пароль был отправлен к Вам на почту.<br />
      <a href="?func=user.main&amp;log" class="btn">Перейти в кабинет</a>
    </center>
  </div>
  <?
} elseif (isset($_SESSION['token'])) {
?>
    <div class="nav2">
     Сессия для восстановления доступа устарела
     </div>
<?

 
/*
 ?>
  <div class="nav2">
    <form class="form-horizontal" action="?func=recovery.password" method="POST">
    
      <div class="control-group">
        <label class="control-label" for="pass1">Новый пароль</label>
        <div class="controls">
          <input type="password" id="pass1" name="pass1" placeholder="Пароль..">
        </div>
      </div>
      
      <div class="control-group">
        <label class="control-label" for="pass2">Повторите пароль</label>
        <div class="controls">
          <input type="password" id="pass2" name="pass2" placeholder="Повторите пароль..">
        </div>
      </div>
      
      <div class="control-group">
        <div class="controls">
          <button type="submit" class="btn">Изменить</button>
        </div>
      </div>
    </form>
  </div>
 <?
 */
} elseif (isset($code)) {
  
?>
  <div class="alert alert-success">
    <center>
      <img src="<?= ICONS?>big_ok.png" /> <b>Успешное завершение операции!</b><br />
      Ссылка для восстановления пароля выслана вам на E-mail, который указан в вашем аккаунте.<br />
      Если письмо не пришло на основной адрес - проверьте свои другие адреса.<br />
      <a href="/?func=user.auth" class="btn">Перейти к авторизации</a>
    </center>
  </div>
  <?
} else {
?>
<div class="nav2">
  <form class="form-horizontal" action="?func=recovery.password" method="POST">
    <div class="control-group">
      <label class="control-label" for="email">Укажите свой Email</label>
      <div class="controls">
        <input type="text" id="email" name="email" placeholder="Email адрес.." value="<?= text($email)?>">
      </div>
    </div>
    
    <? if (isset($tmp_user['id']) && $_SESSION['recovery_step'] == 2) { ?>
    <div class="control-group">
      <label class="control-label" for="keyword"><b>Вопрос:</b></label>
      <div class="controls">
        <?= $whats[$tmp_user['what_word']]?>
      </div>
    </div>
    
    <div class="control-group">
      <label class="control-label" for="keyword">Ответ</label>
      <div class="controls">
        <input type="keyword" id="keyword" name="keyword" placeholder="Ответ на вопрос..">
      </div>
    </div>
    <? ?>
    
    <div class="control-group">
      <label class="control-label" for="captcha">Код с картинки</label>
      <div class="controls">
       <img src="/_src/captcha.php?sid=<?= mt_rand(1000099999); ?>" id="captcha" class="captcha" /> <input type="text" id="captcha" class="captcha" name="captcha" placeholder="Введите код с картинки..">
      </div>
    </div>
    
    <div class="control-group">
      <div class="controls">
        <button type="submit" class="btn">Продолжить</button>
      </div>
    </div>
  </form>
</div>
<?  

?>
<div class="foot">
&laquo; <a href="?func=user.auth">Авторизация</a>
</div>
Онлайн: 1
Реклама