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

Merge branch 'release-1.3.8'

parents c8467a2a fa40379e
Pipeline #4327 passed with stage
in 19 seconds
...@@ -28,6 +28,22 @@ $settings = [ ...@@ -28,6 +28,22 @@ $settings = [
'enabled' => true, '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 * 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. * être enregistré/mis à jour dans la table des utilisateurs de l'appli.
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
namespace UnicaenAuth\Options; namespace UnicaenAuth\Options;
use Assert\Assertion;
use Assert\AssertionFailedException;
use UnicaenApp\Exception\RuntimeException;
use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface; use Zend\ServiceManager\ServiceLocatorInterface;
...@@ -24,6 +27,42 @@ class ModuleOptionsFactory implements FactoryInterface ...@@ -24,6 +27,42 @@ class ModuleOptionsFactory implements FactoryInterface
$moduleConfig = isset($config['unicaen-auth']) ? $config['unicaen-auth'] : []; $moduleConfig = isset($config['unicaen-auth']) ? $config['unicaen-auth'] : [];
$moduleConfig = array_merge($config['zfcuser'], $moduleConfig); $moduleConfig = array_merge($config['zfcuser'], $moduleConfig);
$this->validateConfig($moduleConfig);
return new ModuleOptions($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
...@@ -100,7 +100,10 @@ EOS; ...@@ -100,7 +100,10 @@ EOS;
*/ */
private function isAuthenticated() private function isAuthenticated()
{ {
return (bool) $this->getServerArrayVariable('REMOTE_USER'); return
$this->getServerArrayVariable('REMOTE_USER') ||
$this->getServerArrayVariable('Shib-Session-ID') ||
$this->getServerArrayVariable('HTTP_SHIB_SESSION_ID');
} }
/** /**
...@@ -363,7 +366,7 @@ EOS; ...@@ -363,7 +366,7 @@ EOS;
*/ */
public function simulateAuthenticatedUser(ShibUser $shibUser, $keyForId = 'supannEmpId') public function simulateAuthenticatedUser(ShibUser $shibUser, $keyForId = 'supannEmpId')
{ {
// 'REMOTE_USER' est utilisé pour savoir si un utilisateur est authentifié ou non // 'REMOTE_USER' (notamment) est utilisé pour savoir si un utilisateur est authentifié ou non
$this->setServerArrayVariable('REMOTE_USER', $shibUser->getEppn()); $this->setServerArrayVariable('REMOTE_USER', $shibUser->getEppn());
// // on s'assure que tous les attributs obligatoires ont une valeur // // on s'assure que tous les attributs obligatoires ont une valeur
...@@ -434,13 +437,13 @@ EOS; ...@@ -434,13 +437,13 @@ EOS;
return '/'; return '/';
} }
$logoutRelativeUrl = '/Shibboleth.sso/Logout?return='; // NB: '?return=' semble obligatoire! $logoutUrl = $this->shibbolethConfig['logout_url'];
if ($returnAbsoluteUrl) { if ($returnAbsoluteUrl) {
$logoutRelativeUrl .= urlencode($returnAbsoluteUrl); $logoutUrl .= urlencode($returnAbsoluteUrl);
} }
return $logoutRelativeUrl; return $logoutUrl;
} }
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment