Commit 52f76b1a authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Retour de la possitibilité d'utiliser 'CURRENT_USER' dans les adresses de...

Retour de la possitibilité d'utiliser 'CURRENT_USER' dans les adresses de redirection pour rediriger les mails vers l'utilisateur connecté.
parent 117225af
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace UnicaenAuth;

use UnicaenApp\Service\Mailer\MailerService;
use UnicaenAuth\Authentication\Adapter\AdapterChainServiceFactory;
use UnicaenAuth\Authentication\Adapter\Cas;
use UnicaenAuth\Authentication\Adapter\CasAdapterFactory;
@@ -40,6 +41,7 @@ use UnicaenAuth\ORM\Event\Listeners\HistoriqueListenerFactory;
use UnicaenAuth\Provider\Rule\PrivilegeRuleProviderFactory;
use UnicaenAuth\Service\CasService;
use UnicaenAuth\Service\CasServiceFactory;
use UnicaenAuth\Service\Mailer\MailerServiceFactory;
use UnicaenAuth\Service\ShibService;
use UnicaenAuth\Service\ShibServiceFactory;
use UnicaenAuth\Service\UserContext;
@@ -696,6 +698,7 @@ return [
            'UnicaenAuth\Guard\PrivilegeRoute'        => PrivilegeRouteFactory::class,
            'UnicaenAuth\Provider\Rule\PrivilegeRuleProvider' => PrivilegeRuleProviderFactory::class,

            MailerService::class => MailerServiceFactory::class,

            // verrue pour forcer le label de l'identifiant qqsoit l'options 'auth_identity_fields'
            LoginForm::class => LoginFormFactory::class,
+62 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenAuth\Service\Mailer;

use Psr\Container\ContainerInterface;
use UnicaenApp\Service\Mailer\MailerService;
use UnicaenAuth\Service\UserContext;

/**
 * @author Unicaen
 */
class MailerServiceFactory extends \UnicaenApp\Service\Mailer\MailerServiceFactory
{
    const CURRENT_USER = 'CURRENT_USER';

    /**
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container): MailerService
    {
        $service = parent::__invoke($container);

        // prise en compte de 'CURRENT_USER' dans les adresses de redirection
        $this->addCurrentUserToRedirection($service, $container);

        return $service;
    }

    /**
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    protected function addCurrentUserToRedirection(MailerService $service, ContainerInterface $container): void
    {
        $redirectTo = $service->getRedirectTo();

        // si 'CURRENT_USER' est trouvé dans les éventuelles adresses de redirection des mails,
        // on va ajouter l'email de l'utilisateur connecté aux destinataires des redirections...

        if (!in_array(static::CURRENT_USER, $redirectTo)) {
            return;
        }

        /** @var \UnicaenAuth\Service\UserContext $userContext */
        $userContext = $container->get(UserContext::class);
        $user = $userContext->getDbUser();
        if ($user === null) {
            return;
        }

        // retrait de 'CURRENT_USER'
        $redirectTo = array_diff($redirectTo, [static::CURRENT_USER]);

        // ajout de l'utilisateur connecté si besoin
        if (!in_array($email = $user->getEmail(), $redirectTo) && !array_key_exists($email, $redirectTo)) {
            $redirectTo[$email] = $user->getDisplayName();
        }

        $service->setRedirectTo($redirectTo);
    }
}