added email change strategies

This commit is contained in:
Antonio Ramirez
2016-12-10 14:14:42 +01:00
parent 3fe09e3eb3
commit e215fd58bf
19 changed files with 626 additions and 119 deletions

View File

@ -1,17 +1,43 @@
<?php
namespace Da\User\Strategy;
use Da\User\Contracts\StrategyInterface;
use Da\User\Contracts\MailChangeStrategyInterface;
use Da\User\Factory\MailFactory;
use Da\User\Factory\TokenFactory;
use Da\User\Form\SettingsForm;
use Da\User\Traits\ContainerTrait;
use Yii;
/**
*
* DefaultEmailChangeStrategy.php
*
* Date: 3/12/16
* Time: 16:22
* @author Antonio Ramirez <hola@2amigos.us>
*/
class DefaultEmailChangeStrategy implements StrategyInterface
class DefaultEmailChangeStrategy implements MailChangeStrategyInterface
{
use ContainerTrait;
protected $form;
public function __construct(SettingsForm $form)
{
$this->form = $form;
}
public function run()
{
$this->form->getUser()->unconfirmed_email = $this->form->email;
$token = TokenFactory::makeConfirmNewMailToken($this->form->getUser()->id);
$mailService = MailFactory::makeReconfirmationMailerService($this->form->getUser(), $token);
if ($mailService->run()) {
Yii::$app
->session
->setFlash('info', Yii::t('user', 'A confirmation message has been sent to your new email address'));
return true;
}
return false;
}
}

View File

@ -1,17 +1,23 @@
<?php
namespace Da\User\Strategy;
use Da\User\Contracts\StrategyInterface;
use Da\User\Contracts\MailChangeStrategyInterface;
use Da\User\Form\SettingsForm;
/**
*
* InsecuredEmailChangeStrategy.php
*
* Date: 3/12/16
* Time: 16:21
* @author Antonio Ramirez <hola@2amigos.us>
*/
class InsecureEmailChangeStrategy implements StrategyInterface
class InsecureEmailChangeStrategy implements MailChangeStrategyInterface
{
protected $form;
public function __construct(SettingsForm $form)
{
$this->form = $form;
}
public function run()
{
$this->form->getUser()->email = $this->form->email;
return $this->form->getUser()->save();
}
}

View File

@ -1,17 +1,55 @@
<?php
namespace Da\User\Strategy;
use Da\User\Contracts\StrategyInterface;
use Da\User\Contracts\MailChangeStrategyInterface;
use Da\User\Factory\MailFactory;
use Da\User\Factory\TokenFactory;
use Da\User\Form\SettingsForm;
use Da\User\Model\User;
use Da\User\Traits\ContainerTrait;
use Yii;
/**
*
* SecuredEmailChangeStrategy.php
*
* Date: 3/12/16
* Time: 16:20
* @author Antonio Ramirez <hola@2amigos.us>
*/
class SecureEmailChangeStrategy implements StrategyInterface
class SecureEmailChangeStrategy implements MailChangeStrategyInterface
{
use ContainerTrait;
protected $form;
public function __construct(SettingsForm $form)
{
$this->form = $form;
}
public function run()
{
if ($this->make(DefaultEmailChangeStrategy::class, [$this->form])->run()) {
$token = TokenFactory::makeConfirmOldMailToken($this->form->getUser()->id);
$mailService = MailFactory::makeReconfirmationMailerService($this->form->getUser(), $token);
if ($mailService->run()) {
// unset flags if they exist
$this->form->getUser()->flags &= ~User::NEW_EMAIL_CONFIRMED;
$this->form->getUser()->flags &= ~User::OLD_EMAIL_CONFIRMED;
if ($this->form->getUser()->save(false)) {
Yii::$app
->session
->setFlash(
'info',
Yii::t(
'user',
'We have sent confirmation links to both old and new email addresses. ' .
'You must click both links to complete your request.'
)
);
return true;
}
}
}
return false;
}
}