parent
d6609302a2
commit
1544c09bdd
@ -0,0 +1,135 @@ |
|||||||
|
<?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; |
||||||
|
use vierbergenlars\AuthserverOAuthAccountBundle\ResourceOwner\ResourceOwnerMap; |
||||||
|
use EmailRulesBundle\EmailHandler\EmailRules; |
||||||
|
use Registration\RegistrationHandler\RegistrationRules; |
||||||
|
|
||||||
|
class RegistrationFieldsListener implements EventSubscriberInterface |
||||||
|
{ |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @var TokenStorageInterface |
||||||
|
*/ |
||||||
|
private $tokenStorage; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @var string[] |
||||||
|
*/ |
||||||
|
private $registrationFields; |
||||||
|
|
||||||
|
public static function getSubscribedEvents() |
||||||
|
{ |
||||||
|
return [ |
||||||
|
RegistrationEvents::BUILD_FORM => [ |
||||||
|
'onBuildForm', |
||||||
|
9 |
||||||
|
] |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
public function __construct(TokenStorageInterface $tokenStorage, array $registrationFields) |
||||||
|
{ |
||||||
|
$this->tokenStorage = $tokenStorage; |
||||||
|
$this->registrationFields = $registrationFields; |
||||||
|
} |
||||||
|
|
||||||
|
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 ($this->getTemporaryUser()) { |
||||||
|
switch ($this->registrationFields['email']) { |
||||||
|
case 'prefill': |
||||||
|
break; |
||||||
|
case 'blank': |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->getPrimaryEmailAddress() |
||||||
|
->setEmail(''); |
||||||
|
break; |
||||||
|
case 'force': |
||||||
|
$event->getFormBuilder() |
||||||
|
->get('emailAddresses') |
||||||
|
->setDisabled(true); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
switch ($this->registrationFields['display_name']) { |
||||||
|
case 'prefill': |
||||||
|
break; |
||||||
|
case 'blank': |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->setDisplayName(''); |
||||||
|
break; |
||||||
|
case 'force': |
||||||
|
$event->getFormBuilder() |
||||||
|
->get('displayName') |
||||||
|
->setDisabled(true); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
switch ($this->registrationFields['password']) { |
||||||
|
case 'blank': |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->setPasswordEnabled(1); |
||||||
|
break; |
||||||
|
case 'hidden': |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->setPasswordEnabled(2); |
||||||
|
break; |
||||||
|
case 'force-disable': |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->setPasswordEnabled(0); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if ($this->registrationFields['password'] === false) { |
||||||
|
$event->getFormBuilder() |
||||||
|
->getData() |
||||||
|
->setPasswordEnabled(1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,42 @@ |
|||||||
|
<?xml version="1.0" ?> |
||||||
|
|
||||||
|
<!-- |
||||||
|
~ 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/>. |
||||||
|
--> |
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> |
||||||
|
<services> |
||||||
|
<service class="vierbergenlars\AuthserverOAuthAccountBundle\EventListener\RegistrationHandlerListener"> |
||||||
|
<argument type="service" id="doctrine.orm.entity_manager" /> |
||||||
|
<argument type="service" id="security.token_storage" /> |
||||||
|
<argument type="service" id="vierbergenlars.authserver_oauth_account.resource_owner_map" /> |
||||||
|
<argument>%vierbergenlars.authserver_oauth_account.registration.fields%</argument> |
||||||
|
<argument type="service" id="email_rules.rules" on-invalid="null" /> |
||||||
|
<argument type="service" id="registration.rules" on-invalid="null" /> |
||||||
|
<tag name="kernel.event_subscriber" /> |
||||||
|
</service> |
||||||
|
|
||||||
|
<service class="vierbergenlars\AuthserverOAuthAccountBundle\EventListener\RegistrationFieldsListener"> |
||||||
|
<argument type="service" id="security.token_storage" /> |
||||||
|
<argument>%vierbergenlars.authserver_oauth_account.registration.fields%</argument> |
||||||
|
<tag name="kernel.event_subscriber" /> |
||||||
|
</service> |
||||||
|
</services> |
||||||
|
</container> |
Reference in new issue