Make it possible to automatically validate email addresses when they are received from an authentication provider.
parent
6888539f59
commit
8cc5a7f3f6
@ -0,0 +1,50 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
namespace vierbergenlars\AuthserverOAuthAccountBundle\Entity; |
||||
|
||||
use vierbergenlars\AuthserverExternalAccountBundle\Entity\TemporaryUser as BaseTemporaryUser; |
||||
|
||||
class TemporaryUser extends BaseTemporaryUser |
||||
{ |
||||
|
||||
/** |
||||
* |
||||
* @var string |
||||
*/ |
||||
private $email; |
||||
|
||||
/** |
||||
* |
||||
* @return string |
||||
*/ |
||||
public function getEmail() |
||||
{ |
||||
return $this->email; |
||||
} |
||||
|
||||
/** |
||||
* |
||||
* @param string $email |
||||
*/ |
||||
public function setEmail($email) |
||||
{ |
||||
$this->email = $email; |
||||
} |
||||
} |
@ -0,0 +1,104 @@ |
||||
<?php |
||||
/** |
||||
* Authserver, an OAuth2-based single-signon authentication provider written in PHP. |
||||
* |
||||
* Copyright (C) $today.date Lars Vierbergen |
||||
* |
||||
* his program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
*/ |
||||
namespace vierbergenlars\AuthserverOAuthAccountBundle\EventListener; |
||||
|
||||
use Registration\Event\RegistrationHandleEvent; |
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; |
||||
use Registration\RegistrationEvents; |
||||
use Registration\Event\RegistrationFormEvent; |
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; |
||||
use vierbergenlars\AuthserverOAuthAccountBundle\Entity\TemporaryUser; |
||||
use Doctrine\ORM\EntityManagerInterface; |
||||
use App\Entity\EmailAddress; |
||||
|
||||
class RegistrationHandlerListener implements EventSubscriberInterface |
||||
{ |
||||
|
||||
/** |
||||
* |
||||
* @var TokenStorageInterface |
||||
*/ |
||||
private $tokenStorage; |
||||
|
||||
/** |
||||
* |
||||
* @var EntityManagerInterface |
||||
*/ |
||||
private $em; |
||||
|
||||
public static function getSubscribedEvents() |
||||
{ |
||||
return [ |
||||
RegistrationEvents::BUILD_FORM => [ |
||||
'onBuildForm', |
||||
10 |
||||
], |
||||
RegistrationEvents::HANDLE_FORM => [ |
||||
'onHandleForm', |
||||
0 |
||||
] |
||||
]; |
||||
} |
||||
|
||||
public function __construct(EntityManagerInterface $em, TokenStorageInterface $tokenStorage) |
||||
{ |
||||
$this->em = $em; |
||||
$this->tokenStorage = $tokenStorage; |
||||
} |
||||
|
||||
private function getTemporaryUser() |
||||
{ |
||||
$token = $this->tokenStorage->getToken(); |
||||
if (!$token) |
||||
return null; |
||||
$user = $token->getUser(); |
||||
if ($user instanceof TemporaryUser) |
||||
return $user; |
||||
return null; |
||||
} |
||||
|
||||
public function onBuildForm(RegistrationFormEvent $event) |
||||
{ |
||||
if ($tempuser = $this->getTemporaryUser()) { |
||||
if ($tempuser->getEmail()) { |
||||
$user = $event->getFormBuilder()->getData(); |
||||
/* @var $user \App\Entity\User */ |
||||
if (!$user->getPrimaryEmailAddress()) |
||||
$user->addEmailAddress(new EmailAddress()); |
||||
$user->getPrimaryEmailAddress()->setEmail($tempuser->getEmail()); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public function onHandleForm(RegistrationHandleEvent $event) |
||||
{ |
||||
if ($event->isFailed()) |
||||
return; |
||||
$user = $event->getForm()->getData(); |
||||
if (!$user) |
||||
return; |
||||
/* @var $user \App\Entity\User */ |
||||
if ($temporaryUser = $this->getTemporaryUser()) { |
||||
if ($temporaryUser->getEmail() && $temporaryUser->getEmail() === $user->getPrimaryEmailAddress()->getEmail()) { |
||||
$user->getPrimaryEmailAddress()->setVerified(true); |
||||
} |
||||
} |
||||
} |
||||
} |
Reference in new issue