<?php $action = trim($_POST['action']); $email = trim($_POST['email']); if ($action == "send") { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php"; if (preg_match("/^[-^!#\$%&'*+\\/=?`{|}~.\\w]+@[-a-zA-Z0-9]+(\\.[-a-zA-Z0-9]+)+\$/", $email)) { $sm = new smail(); $error = $sm->remind($email); } else { $error = "Поле заполнено некорректно"; } } $no_banner = 1; $header = "header.php"; $footer = "footer.html"; $content = "wrongpass_inner.php"; include "template.php";
function RemindByEmail($email, $rnd, $captchanum, $role) { global $DB; session_start(); $objResponse = new xajaxResponse(); $captcha = new captcha($captchanum); $error_type = ''; $show_role = false; if (!$captcha->checkNumber(trim($rnd))) { $error = 'Вы ввели неверную комбинацию символов. Попробуйте еще раз'; $error_type = 'captcha'; } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php'; $email = trim(stripslashes($email)); if (preg_match("/^[-^!#\$%&'*+\\/=?`{|}~.\\w]+@[-a-zA-Z0-9]+(\\.[-a-zA-Z0-9]+)+\$/", $email)) { $error_type = 'email'; $ok_type = 'email'; // email require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $u = new users(); $u->GetUser($email, true, $email); if (!$u->uid) { $error = 'E-mail не зарегистрирован. Укажите корректный логин/телефон/e-mail.'; } else { if ($u->is_banned) { $error = 'Аккаунт с этим адресом заблокирован. К сожалению, вы не можете восстановить к нему доступ.'; } else { if ($u->isRemindByPhoneOnly($u->login)) { $ok_type = 'phone'; $reqv = sbr_meta::getUserReqvs($u->uid); $ureqv = $reqv[$reqv['form_type']]; $phone = $ureqv['mob_phone']; $passwd = users::ResetPasswordSMS($u->uid, $phone); $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd))); if ($sms_gate->getHTTPCode() == 200) { // OK ТЕЛЕФОН } else { $error = 'Ошибка отправки СМС на указанный номер'; } } else { $sm = new smail(); $sm->remind($u->email); } } } } elseif (preg_match("/^\\+\\d{1,}\$/", $email) || preg_match("/^\\d{1,}\$/", $email)) { $error_type = 'email'; $ok_type = 'phone'; // телефон if (!preg_match("/^\\+\\d{1,}\$/", $email)) { $email = '+' . $email; } $phone = $email; $safety_frl = (int) $role !== 2 ? sbr_meta::findSafetyPhone($phone, 'frl') : array(); $safety_emp = (int) $role !== 1 ? sbr_meta::findSafetyPhone($phone, 'emp') : array(); $safety = null; if (!empty($safety_emp) && !empty($safety_frl)) { $error = 'Номер телефона привязан к двум аккаунтам. Пожалуйста, укажите, к какому аккаунту вы хотите восстановить доступ.'; $show_role = true; } elseif (empty($safety_emp) && empty($safety_frl)) { $error = 'Номер не связан ни с одним аккаунтом. Укажите корректный логин/телефон/e-mail.'; } else { $safety = !empty($safety_frl) ? $safety_frl : $safety_emp; $u = new users(); $u->GetUserByUID($safety['uid']); if ($u->is_banned) { $error = 'Аккаунт с этим номером заблокирован. К сожалению, вы не можете восстановить к нему доступ.'; } else { $passwd = users::ResetPasswordSMS($safety['uid'], $phone); $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd))); if ($sms_gate->getHTTPCode() == 200) { // OK ТЕЛЕФОН } else { $error = 'Ошибка отправки СМС на указанный номер'; } } } } else { $error_type = 'email'; $ok_type = 'email'; // логин require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $login = $email; $u = new users(); $u->GetUser($login); if (!$u->uid) { $error = 'Логин не зарегистрирован. Укажите корректный логин/телефон/e-mail.'; } else { if ($u->is_banned) { $error = 'Аккаунт с этим логином заблокирован. К сожалению, вы не можете восстановить к нему доступ.'; } else { if ($u->isRemindByPhoneOnly($u->login)) { $ok_type = 'phone'; $error_type = 'email'; $reqv = sbr_meta::getUserReqvs($u->uid); $ureqv = $reqv[$reqv['form_type']]; $phone = $ureqv['mob_phone']; $passwd = users::ResetPasswordSMS($u->uid, $phone); $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS(preg_replace('/-LOGIN-/', $u->login, $sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd))); if ($sms_gate->getHTTPCode() == 200) { // OK ТЕЛЕФОН } else { $error = 'Ошибка отправки СМС на указанный номер'; } } else { $sm = new smail(); $sm->remind($u->email); } } } } } if ($error) { if (!$show_role) { $captcha->setNumber(); $objResponse->assign('image_rnd', 'src', '/image.php?num=' . $captchanum . '&t=' . time()); $objResponse->assign('remind_captcha', 'value', ''); } $objResponse->assign('remind_' . $error_type . '_error_txt', 'innerHTML', $error); $objResponse->script('$("remind_' . $error_type . '_error").removeClass("b-shadow_hide");'); $objResponse->assign('remind_email', 'value', $email); $objResponse->script("\$('remind_button_email').addClass('b-button_disabled')"); $objResponse->script('$("block_role").' . ($show_role ? 'remove' : 'add') . 'Class("b-layout_hide");'); } else { switch ($ok_type) { case 'phone': $objResponse->script("\$('email_remind').hide();"); $objResponse->script("\$('remind_ok_phone').show();"); $objResponse->script("\$('remind_ok_phone_txt').set('html', '" . preg_replace("/^(\\+\\d{1,})\\d{4}(\\d{2})\$/", '$1****$2', $phone) . "');"); break; case 'email': $objResponse->script("\$('email_remind').hide();"); $objResponse->script("\$('remind_ok_email').show();"); $a = explode('@', $u->email); $b = explode('.', $a[1]); $c = substr($b[0], 0, 1) . '****' . substr($b[0], strlen($b[0]) - 1, 1); if ($b[1]) { foreach ($b as $k => $v) { if ($k != 0) { $c .= '.' . $b[$k]; } } } $email = substr($a[0], 0, 2) . '****' . substr($a[0], strlen($a[0]) - 2, 2) . '@' . $c; $objResponse->script("\$('remind_ok_email_txt').set('html', '" . $email . "');"); break; } } return $objResponse; }
/** * Забыли пароль. Телефон. * * @param array $aParams массив входящих данных * @return array $aResult ответ */ protected function x____users_forgot_email($aParams = array()) { $this->_validDevice($aParams); $sLogin = __paramValue('string', $aParams['username'], null, true); if (!empty($sLogin)) { require_once ABS_PATH . '/classes/users.php'; $oUser = new users(); if (preg_match("/^[-^!#\$%&'*+\\/=?`{|}~.\\w]+@[-a-zA-Z0-9]+(\\.[-a-zA-Z0-9]+)+\$/", $sLogin)) { $err = $oUser->GetUser($sLogin, true, $sLogin); } else { $err = $oUser->GetUser($sLogin); } if ($oUser->uid) { if (!users::isRemindByPhoneOnly($sLogin)) { require_once ABS_PATH . '/classes/smail.php'; $sm = new smail(); $error = $sm->remind($oUser->email); if ($error) { $this->error(EXTERNAL_ERR_SERVER_ERROR); } } else { $this->error(EXTERNAL_ERR_REMIND_PHONE_ONLY); } } else { $this->error(EXTERNAL_ERR_USER_NOTFOUND); } } else { $this->error(EXTERNAL_ERR_EMPTY_USERNAME); } return array(); }