Commit e1202132 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Nouvelle clé de config obligatoire pour l'authentification Shibboleth :...

Nouvelle clé de config obligatoire pour l'authentification Shibboleth : unicaen-auth.shibboleth.logout_url
parent c27761cb
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -28,6 +28,22 @@ $settings = [
        'enabled' => true,
    ],

    /**
     * Configuration de l'authentification Shibboleth.
     */
    'shibboleth' => [
        /**
         * Affichage ou non du formulaire d'authentification via l'annuaire LDAP.
         * NB: en réalité cela permet aussi l'authentification avec un compte local.
         */
        'enable' => false,

        /**
         * URL de déconnexion.
         */
        'logout_url' => '/Shibboleth.sso/Logout?return=', // NB: '?return=' semble obligatoire!
    ],

    /**
     * Flag indiquant si l'utilisateur authenitifié avec succès via l'annuaire LDAP doit
     * être enregistré/mis à jour dans la table des utilisateurs de l'appli.
+39 −0
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@

namespace UnicaenAuth\Options;

use Assert\Assertion;
use Assert\AssertionFailedException;
use UnicaenApp\Exception\RuntimeException;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

@@ -24,6 +27,42 @@ class ModuleOptionsFactory implements FactoryInterface
        $moduleConfig = isset($config['unicaen-auth']) ? $config['unicaen-auth'] : [];
        $moduleConfig = array_merge($config['zfcuser'], $moduleConfig);

        $this->validateConfig($moduleConfig);

        return new ModuleOptions($moduleConfig);
    }

    /**
     * @param array $config
     */
    private function validateConfig(array $config)
    {
        $configKeyPath = ['unicaen-auth'];

        //
        // Config shibboleth.
        //
        $parentKey = 'shibboleth';
        if (array_key_exists($parentKey, $config)) {
            $shibConfig = $config[$parentKey];
            $configKeyPath[] = $parentKey;

            try {
                Assertion::keyExists($shibConfig, $k = 'logout_url');
            } catch (AssertionFailedException $e) {
                throw new RuntimeException(sprintf(
                    "La clé de configuration '%s.$k' est absente (inspirez-vous du fichier de config " .
                    "unicaen-auth.global.php.dist du module unicaen/auth si besoin)",
                    join('.', $configKeyPath)
                ));
            }

            array_pop($configKeyPath);
        }

        //
        // Autres.
        //

    }
}
 No newline at end of file
+3 −3
Original line number Diff line number Diff line
@@ -434,13 +434,13 @@ EOS;
            return '/';
        }

        $logoutRelativeUrl = '/Shibboleth.sso/Logout?return='; // NB: '?return=' semble obligatoire!
        $logoutUrl = $this->shibbolethConfig['logout_url'];

        if ($returnAbsoluteUrl) {
            $logoutRelativeUrl .= urlencode($returnAbsoluteUrl);
            $logoutUrl .= urlencode($returnAbsoluteUrl);
        }

        return $logoutRelativeUrl;
        return $logoutUrl;
    }

    /**