diff --git a/mymodule/themes/fancytheme/multiauth/selectsource.php b/mymodule/themes/fancytheme/multiauth/selectsource.php new file mode 100644 index 0000000000000000000000000000000000000000..e6952065ee11a3aa0f76df9591f28c576bd10177 --- /dev/null +++ b/mymodule/themes/fancytheme/multiauth/selectsource.php @@ -0,0 +1,85 @@ +<?php + +/** + * This page shows a list of authentication sources. When the user selects + * one of them if pass this information to the + * \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth class and call the + * delegateAuthentication method on it. + * + * @author Lorenzo Gil, Yaco Sistemas S.L. + * @package SimpleSAMLphp + */ + +// Retrieve the authentication state +if (!array_key_exists('AuthState', $_REQUEST)) { + throw new \SimpleSAML\Error\BadRequest('Missing AuthState parameter.'); +} +$authStateId = $_REQUEST['AuthState']; + +/** @var array $state */ +$state = \SimpleSAML\Auth\State::loadState($authStateId, \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth::STAGEID); + +if (array_key_exists("\SimpleSAML\Auth\Source.id", $state)) { + $authId = $state["\SimpleSAML\Auth\Source.id"]; + /** @var \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth $as */ + $as = \SimpleSAML\Auth\Source::getById($authId); +} else { + $as = null; +} + +$source = null; +if (array_key_exists('source', $_REQUEST)) { + $source = $_REQUEST['source']; +} else { + foreach ($_REQUEST as $k => $v) { + $k = explode('-', $k, 2); + if (count($k) === 2 && $k[0] === 'src') { + $source = base64_decode($k[1]); + } + } +} +if ($source !== null) { + if ($as !== null) { + $as->setPreviousSource($source); + } + \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth::delegateAuthentication($source, $state); +} + +if (array_key_exists('multiauth:preselect', $state)) { + $source = $state['multiauth:preselect']; + \SimpleSAML\Module\multiauth\Auth\Source\MultiAuth::delegateAuthentication($source, $state); +} + +$globalConfig = \SimpleSAML\Configuration::getInstance(); +$t = new \SimpleSAML\XHTML\Template($globalConfig, 'mymodule:selectsource.tpl.php'); + +$defaultLanguage = $globalConfig->getString('language.default', 'en'); +$language = $t->getTranslator()->getLanguage()->getLanguage(); + +$sources = $state[\SimpleSAML\Module\multiauth\Auth\Source\MultiAuth::SOURCESID]; +foreach ($sources as $key => $source) { + $sources[$key]['source64'] = base64_encode($sources[$key]['source']); + if (isset($sources[$key]['text'][$language])) { + $sources[$key]['text'] = $sources[$key]['text'][$language]; + } else { + $sources[$key]['text'] = $sources[$key]['text'][$defaultLanguage]; + } + + if (isset($sources[$key]['help'][$language])) { + $sources[$key]['help'] = $sources[$key]['help'][$language]; + } else { + $sources[$key]['help'] = $sources[$key]['help'][$defaultLanguage]; + } +} + +$t->data['authstate'] = $authStateId; +$t->data['sources'] = $sources; +$t->data['selfUrl'] = $_SERVER['PHP_SELF']; + +if ($as !== null) { + $t->data['preferred'] = $as->getPreviousSource(); +} else { + $t->data['preferred'] = null; +} +$t->show(); +exit();