Skip to content
Permalink
Browse files

валидация логина и капчи

  • Loading branch information...
aVadim483 committed May 9, 2013
1 parent 556dbd7 commit b1ad857b238c16e7137168573cbcd2971906faa7
@@ -16,18 +16,15 @@
*/
class ActionCaptcha extends Action {
/**
* Инициализация
*
*/
/**
* Инициализация
*
*/
public function Init() {
//$this->Viewer_SetResponseAjax('json');
$this->SetDefaultEvent('index');
}
/**
* Регистрация евентов
*
*/
protected function RegisterEvent() {
$this->AddEvent('index', 'EventIndex');
}
@@ -37,4 +34,6 @@ public function EventIndex() {
$this->Session_Set('captcha_keystring', $oCaptcha->getKeyString());
exit;
}
}
}
// EOF
@@ -56,13 +56,11 @@ protected function RegisterEvent() {
* Ajax авторизация
*/
protected function EventAjaxLogin() {
/**
* Устанавливаем формат Ajax ответа
*/
// * Устанавливаем формат Ajax ответа
$this->Viewer_SetResponseAjax('json');
/**
* Проверяем передачу логина пароля через POST
*/
// * Проверяем передачу логина пароля через POST
$sUserLogin = $this->GetPost('login');
$sUserPassword = $this->GetPost('password');
if (!$sUserLogin || !$sUserPassword) {
@@ -101,13 +99,11 @@ protected function EventAjaxLogin() {
return;
}
$bRemember = getRequest('remember', false) ? true : false;
/**
* Авторизуем
*/
// * Авторизуем
$this->User_Authorization($oUser, $bRemember);
/**
* Определяем редирект
*/
// * Определяем редирект
$sUrl = Config::Get('module.user.redirect_after_login');
if (getRequestStr('return-path')) {
$sUrl = getRequestStr('return-path');
@@ -136,12 +132,12 @@ protected function EventReactivation() {
protected function EventAjaxReactivation() {
$this->Viewer_SetResponseAjax('json');
if ((func_check(getRequestStr('mail'), 'mail') && $oUser = $this->User_GetUserByMail(getRequestStr('mail')))) {
if ((F::CheckVal(getRequestStr('mail'), 'mail') && $oUser = $this->User_GetUserByMail(getRequestStr('mail')))) {
if ($oUser->getActivate()) {
$this->Message_AddErrorSingle($this->Lang_Get('registration_activate_error_reactivate'));
return;
} else {
$oUser->setActivateKey(md5(func_generator() . time()));
$oUser->setActivateKey(F::RandomStr());
if ($this->User_Update($oUser)) {
$this->Message_AddNotice($this->Lang_Get('reactivation_send_link'));
$this->Notify_SendReactivationCode($oUser);
@@ -159,9 +155,8 @@ protected function EventAjaxReactivation() {
*
*/
protected function EventLogin() {
/**
* Если уже авторизирован
*/
// * Если уже авторизирован
if ($this->User_GetUserCurrent()) {
Router::Location(Config::Get('path.root.web') . '/');
}
@@ -175,28 +170,30 @@ protected function EventLogin() {
protected function EventExit() {
$this->Security_ValidateSendForm();
$this->User_Logout();
$this->Viewer_Assign('bRefreshToHome', true);
if (isset($_SERVER['HTTP_REFERER']) && F::File_IsLocalUrl($_SERVER['HTTP_REFERER'])) {
Router::Location($_SERVER['HTTP_REFERER']);
exit;
} else {
$this->Viewer_Assign('bRefreshToHome', true);
}
}
/**
* Ajax запрос на восстановление пароля
*/
protected function EventAjaxReminder() {
/**
* Устанвливаем формат Ajax ответа
*/
// * Устанвливаем формат Ajax ответа
$this->Viewer_SetResponseAjax('json');
/**
* Пользователь с таким емайлом существует?
*/
if ((func_check(getRequestStr('mail'), 'mail') && $oUser = $this->User_GetUserByMail(getRequestStr('mail')))) {
/**
* Формируем и отправляем ссылку на смену пароля
*/
// * Пользователь с таким емайлом существует?
if ((F::CheckVal(getRequestStr('mail'), 'mail') && $oUser = $this->User_GetUserByMail(getRequestStr('mail')))) {
// * Формируем и отправляем ссылку на смену пароля
$oReminder = Engine::GetEntity('User_Reminder');
$oReminder->setCode(func_generator(32));
$oReminder->setDateAdd(date("Y-m-d H:i:s"));
$oReminder->setDateExpire(date("Y-m-d H:i:s", time() + 60 * 60 * 24 * 7));
$oReminder->setCode(F::RandomStr(32));
$oReminder->setDateAdd(date('Y-m-d H:i:s'));
$oReminder->setDateExpire(date('Y-m-d H:i:s', time() + 60 * 60 * 24 * 7));
$oReminder->setDateUsed(null);
$oReminder->setIsUsed(0);
$oReminder->setUserId($oUser->getId());
@@ -214,25 +211,22 @@ protected function EventAjaxReminder() {
*
*/
protected function EventReminder() {
/**
* Устанавливаем title страницы
*/
// * Устанавливаем title страницы
$this->Viewer_AddHtmlTitle($this->Lang_Get('password_reminder'));
/**
* Проверка кода на восстановление пароля и генерация нового пароля
*/
if (func_check($this->GetParam(0), 'md5')) {
/**
* Проверка кода подтверждения
*/
// * Проверка кода на восстановление пароля и генерация нового пароля
if (F::CheckVal($this->GetParam(0), 'md5')) {
// * Проверка кода подтверждения
if ($oReminder = $this->User_GetReminderByCode($this->GetParam(0))) {
if (!$oReminder->getIsUsed() && strtotime($oReminder->getDateExpire()) > time()
&& $oUser = $this->User_GetUserById($oReminder->getUserId())
) {
$sNewPassword = func_generator(7);
$sNewPassword = F::RandomStr(7);
$oUser->setPassword($sNewPassword, true);
if ($this->User_Update($oUser)) {
$oReminder->setDateUsed(date("Y-m-d H:i:s"));
$oReminder->setDateUsed(date('Y-m-d H:i:s'));
$oReminder->setIsUsed(1);
$this->User_UpdateReminder($oReminder);
$this->Notify_SendReminderPassword($oUser, $sNewPassword);
@@ -247,4 +241,4 @@ protected function EventReminder() {
}
}
?>
// EOF
@@ -29,7 +29,6 @@ public function RegisterHook() {
* @return string
*/
public function TemplateCaptcha() {
$s = $this->Viewer_Fetch('inc.captcha.tpl');
return $this->Viewer_Fetch('inc.captcha.tpl');
}
}
@@ -22,8 +22,10 @@
* @since 1.0
*/
class ModuleUser_EntityUser extends Entity {
/**
* Определяем правила валидации
* Правила валидации нужно определять только здесь!
*
* @var array
*/
@@ -35,6 +37,10 @@ public function Init() {
$this->aValidateRules[] = array('mail', 'mail_exists', 'on' => array('registration'));
$this->aValidateRules[] = array('password', 'string', 'allowEmpty' => false, 'min' => 5, 'on' => array('registration'));
$this->aValidateRules[] = array('password_confirm', 'compare', 'compareField' => 'password', 'on' => array('registration'));
// Определяем дополнительные правила валидации
if (Config::Get('module.user.captcha_use_registration')) {
$this->aValidateRules[] = array('captcha', 'captcha', 'on' => array('registration'));
}
}
/**
@@ -43,10 +49,6 @@ public function Init() {
* @param array|null $aParam
*/
public function __construct($aParam = null) {
if (Config::Get('module.user.captcha_use_registration')) {
$this->aValidateRules[] = array('captcha', 'captcha', 'on' => array('registration'));
}
parent::__construct($aParam);
}
@@ -59,7 +61,7 @@ public function __construct($aParam = null) {
* @return bool
*/
public function ValidateLogin($sValue, $aParams) {
if ($this->User_CheckLogin($sValue)) {
if ($sValue && $this->User_CheckLogin($sValue)) {
return true;
}
return $this->Lang_Get('registration_login_error');
@@ -19,35 +19,36 @@
* Валидатор каптчи (число с картинки)
*
* @package engine.modules.validate
* @since 1.0
* @since 1.0
*/
class ModuleValidate_EntityValidatorCaptcha extends ModuleValidate_EntityValidator {
/**
* Допускать или нет пустое значение
*
* @var bool
*/
public $allowEmpty=false;
/**
* Допускать или нет пустое значение
*
* @var bool
*/
public $allowEmpty = false;
/**
* Запуск валидации
*
* @param mixed $sValue Данные для валидации
*
* @return bool|string
*/
public function validate($sValue) {
if (is_array($sValue)) {
return $this->getMessage($this->Lang_Get('validate_captcha_not_valid',null,false),'msg');
}
if($this->allowEmpty && $this->isEmpty($sValue)) {
return true;
}
/**
* Запуск валидации
*
* @param mixed $sValue Данные для валидации
*
* @return bool|string
*/
public function validate($sValue) {
if (is_array($sValue)) {
return $this->getMessage($this->Lang_Get('validate_captcha_not_valid', null, false), 'msg');
}
if ($this->allowEmpty && $this->isEmpty($sValue)) {
return true;
}
if (!isset($_SESSION['captcha_keystring']) or $_SESSION['captcha_keystring']!=strtolower($sValue)) {
return $this->getMessage($this->Lang_Get('validate_captcha_not_valid',null,false),'msg');
}
return true;
}
if (!isset($_SESSION['captcha_keystring']) || $_SESSION['captcha_keystring'] != strtolower($sValue)) {
return $this->getMessage($this->Lang_Get('validate_captcha_not_valid', null, false), 'msg');
}
return true;
}
}
?>
// EOF
@@ -26,6 +26,8 @@
'menu_people' => 'Люди',
'menu_download' => 'Скачать',
'noscript_message' => 'В Вашем браузере отключен javascript, поэтому сайт будет работоть некорректно (если вообще будет)',
/**
* Блоги
*/
@@ -127,4 +127,13 @@ h2.header-table { margin-bottom: 0; border-bottom: 1px solid #eee; padding-botto
.help .help-item { margin-bottom: 20px; }
.help .help-item:last-child { margin-bottom: 0; }
.help .help-item h4 { font-family: monospace; font-weight: bold; margin-bottom: 3px; }
.help .help-item h4 a { color: #5055B2; border-bottom: 1px dotted #727a90; }
.help .help-item h4 a { color: #5055B2; border-bottom: 1px dotted #727a90; }

.b-noscript {
text-align: center;
border: 1px solid #cc3333;
background-color: #ffdddd;
color: #cc3333;
font-weight: bold;
padding: 10px;
}
@@ -1,4 +1,5 @@
<nav id="userbar" class="b-userbar i-container clearfix">
<noscript><div class="b-noscript">{$aLang.noscript_message}</div></noscript>
<form action="{router page='search'}topics/" class="search">
{hook run='search_form_begin'}
<input type="text" value="{$aReq.q|escape:'html'}" placeholder="{$aLang.search}" maxlength="255" name="q" class="input-text">

0 comments on commit b1ad857

Please sign in to comment.
You can’t perform that action at this time.