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