private:koding:hostcms:modules:siteuser:izmenennyj_algoritm_vosstanovlenija_parolja:tds

This is an old revision of the document!


<?php
 
$xslRestorePasswordMailXsl = Core_Array::get(Core_Page::instance()->libParams, 'xslRestorePasswordMailXsl');
 
// Ключ для разделения токена
$key = "К";
// Минимальная длина пароля
$password_length = PASSWORD_MIN_LENGTH;
 
$action = "send_mail";
 
// Действие на форме отправка письма
if (Core_Array::getPost('send_mail'))
{
	$email = strval(Core_Array::getPost('email'));
	$login = $email;
 
	$oSiteuser = Core_Entity::factory('Site', CURRENT_SITE)->Siteusers->getByLoginAndEmail($login, $email);
 
	if (!is_null($oSiteuser) && $oSiteuser->active)
	{
		$Siteuser_Controller_Restore_Password = new Siteuser_Controller_Restore_Password(
			$oSiteuser
		);
 
		$token = $Siteuser_Controller_Restore_Password->getToken($key);
 
		$Siteuser_Controller_Restore_Password->addEntity(Core::factory('Core_Xml_Entity')->name('token')->value($token));
 
		$Siteuser_Controller_Restore_Password
			->subject('Восстановление пароля')
			->xsl(
				Core_Entity::factory('Xsl')->getByName($xslRestorePasswordMailXsl)
			)
			->send();
 
		$path = '../';
		$message = 'В Ваш адрес отправлено письмо с дальнейшими указаниями.';
	}
	else
	{
		$error = 'Пользователь с такими параметрами не зарегистрирован или на указанный e-mail не может быть отправлено письмо.';
	}
}
 
// Действие на форме обработка смены пароля
if (Core_Array::getPost('change_password'))
{
	$action = "change_password";	
 
	$password1 = Core_Array::getPost('password1');
	$password2 = Core_Array::getPost('password2');
	$token = Core_Array::getPost('token');
 
	if ($password1 == $password2)
	{
		if (strlen($password1) >= $password_length)
		{
			// Получаем email
			$email = base64_decode(explode($key, $token)[0]);
			$oSiteuser = Core_Entity::factory('Site', CURRENT_SITE)->Siteusers->getByEmail($email);	
 
			if ($oSiteuser && $oSiteuser->active)
			{	
				$Siteuser_Controller_Restore_Password = new Siteuser_Controller_Restore_Password(
					$oSiteuser
				);
				$check_token = $Siteuser_Controller_Restore_Password->getToken($key);
 
				if ($check_token == $token)
				{
					// Меняем пароль
					$oSiteuser->password = Core_Hash::instance()->hash($password1);
					$oSiteuser->save();
 
					$message = "Пароль успешно изменен!";
				}
				else
				{
					$message = "Пароль уже был изменен или истекло время действия токена!";
				}
			}
			else
			{
				$message = "Пользователь не подтвержден!";
			}
		}	
		else
		{
			$error = "Минимальная длина пароля {$password_length} символа";
		}
	}
	else
	{
		$error = "Пароли не совпадают!";
	}
}
else 
{
	// Если пришли с токеном
	$token = Core_Array::getGet('token');
 
	if ($token)
	{
		$action = "change_password";
 
		// Получаем email
		$email = base64_decode(explode($key, $token)[0]);
		$oSiteuser = Core_Entity::factory('Site', CURRENT_SITE)->Siteusers->getByEmail($email);
 
		if ($oSiteuser && $oSiteuser->active)
		{
			$Siteuser_Controller_Restore_Password = new Siteuser_Controller_Restore_Password(
				$oSiteuser
			);
 
			$check_token = $Siteuser_Controller_Restore_Password->getToken($key);
 
			if ($check_token != $token)
			{
				$message = "Пароль уже был изменен или истекло время действия токена!";
			}
		}
		else
		{
			$message = "Пользователь не подтвержден!";
		}
	}
}
 
switch ($action)
{
	case "change_password":
 
	?>
		<h1>Изменение пароля</h1>
	<?
 
	if (!empty($message))
	{
		?><div id="message"><?php echo $message?></div><?php
	}
	else
	{	
 
		if (!empty($error))
		{
			?><div id="error"><?php echo $error?></div><?php
		}
 
	?>
		<form action="." method="post">
			<input name="token" type="hidden" size="30" class="large" value="<?=$token?>" />
		<p>
			Пароль:
			<br />
			<input name="password1" type="text" size="30" class="large">
		</p>
		<p>
			Подтверждение пароля:
			<br />
			<input name="password2" type="text" size="30" class="large">
		</p>
		<p>
		<input name="change_password" type="submit" value="Изменить" class="button" />
		</p>
		</form>
	<?
	}
	break;
 
	case "send_mail":
	?>
		<h1>Восстановление пароля</h1>
<?
	if (!empty($message))
	{
		?><div id="message"><?php echo $message?></div><?php
	}
	else
	{	
 
		if (!empty($error))
		{
			?><div id="error"><?php echo $error?></div><?php
		}
		?>
		<form action="." method="post">
		<p>
			E-mail:
			<br />
			<input name="email" type="text" size="30" class="large">
		</p>
		<p>
		<input name="send_mail" type="submit" value="Восстановить" class="button" />
		</p>
		</form>
	<?	
	}
	break;
}
 
?>
private/koding/hostcms/modules/siteuser/izmenennyj_algoritm_vosstanovlenija_parolja/tds.1457707012.txt.gz · Last modified: 11.03.16 в 17:36 by Артем Куц