| 
<?php
 /**
 * This page shows a list of authentication sources. When the user selects
 * one of them if pass this information to the
 * sspmod_multiauth_Auth_Source_MultiAuth class and call the
 * delegateAuthentication method on it.
 *
 * @author Lorenzo Gil, Yaco Sistemas S.L.
 * @package simpleSAMLphp
 */
 
 if (!array_key_exists('AuthState', $_REQUEST)) {
 throw new SimpleSAML_Error_BadRequest('Missing AuthState parameter.');
 }
 $authStateId = $_REQUEST['AuthState'];
 
 // sanitize the input
 $sid = SimpleSAML_Utilities::parseStateID($authStateId);
 if (!is_null($sid['url'])) {
 SimpleSAML_Utilities::checkURLAllowed($sid['url']);
 }
 
 /* Retrieve the authentication state. */
 $state = SimpleSAML_Auth_State::loadState($authStateId, sspmod_multiauth_Auth_Source_MultiAuth::STAGEID);
 
 if (array_key_exists("SimpleSAML_Auth_Default.id", $state)) {
 $authId = $state["SimpleSAML_Auth_Default.id"];
 $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);
 }
 sspmod_multiauth_Auth_Source_MultiAuth::delegateAuthentication($source, $state);
 }
 
 if (array_key_exists('multiauth:preselect', $state)) {
 $source = $state['multiauth:preselect'];
 sspmod_multiauth_Auth_Source_MultiAuth::delegateAuthentication($source, $state);
 }
 
 $globalConfig = SimpleSAML_Configuration::getInstance();
 $t = new SimpleSAML_XHTML_Template($globalConfig, 'multiauth:selectsource.php');
 $t->data['authstate'] = $authStateId;
 $t->data['sources'] = $state[sspmod_multiauth_Auth_Source_MultiAuth::SOURCESID];
 if ($as !== NULL) {
 $t->data['preferred'] = $as->getPreviousSource();
 } else {
 $t->data['preferred'] = NULL;
 }
 $t->show();
 exit();
 
 ?>
 |