<?php 
 
/** 
 * Check the credentials that the user got from the A-Select server. 
 * This function is called after the user returns from the A-Select server. 
 * 
 * @author Wessel Dankers, Tilburg University 
 */ 
function check_credentials() { 
     
    if (!array_key_exists('ssp_state', $_REQUEST)) 
        throw new SimpleSAML_Error_Exception("Missing ssp_state parameter"); 
    $id = $_REQUEST['ssp_state']; 
 
    // sanitize the input 
    $sid = SimpleSAML_Utilities::parseStateID($id); 
    if (!is_null($sid['url'])) { 
        SimpleSAML_Utilities::checkURLAllowed($sid['url']); 
    } 
 
    $state = SimpleSAML_Auth_State::loadState($id, 'aselect:login'); 
 
    if(!array_key_exists('a-select-server', $_REQUEST)) 
        SimpleSAML_Auth_State::throwException($state, new SimpleSAML_Error_Exception("Missing a-select-server parameter")); 
    $server_id = $_REQUEST['a-select-server']; 
 
    if(!array_key_exists('aselect_credentials', $_REQUEST)) 
        SimpleSAML_Auth_State::throwException($state, new SimpleSAML_Error_Exception("Missing aselect_credentials parameter")); 
    $credentials = $_REQUEST['aselect_credentials']; 
 
    if(!array_key_exists('rid', $_REQUEST)) 
        SimpleSAML_Auth_State::throwException($state, new SimpleSAML_Error_Exception("Missing rid parameter")); 
    $rid = $_REQUEST['rid']; 
 
    try { 
        if(!array_key_exists('aselect::authid', $state)) 
            throw new SimpleSAML_Error_Exception("ASelect authentication source missing in state"); 
        $authid = $state['aselect::authid']; 
        $aselect = SimpleSAML_Auth_Source::getById($authid); 
        if(is_null($aselect)) 
            throw new SimpleSAML_Error_Exception("Could not find authentication source with id $authid"); 
        $creds = $aselect->verify_credentials($server_id, $credentials, $rid); 
 
        if(array_key_exists('attributes', $creds)) { 
            $state['Attributes'] = $creds['attributes']; 
        } else { 
            $res = $creds['res']; 
            $state['Attributes'] = array('uid' => array($res['uid']), 'organization' => array($res['organization'])); 
        } 
    } catch(Exception $e) { 
        SimpleSAML_Auth_State::throwException($state, $e); 
    } 
 
    SimpleSAML_Auth_Source::completeAuth($state); 
    SimpleSAML_Auth_State::throwException($state, new SimpleSAML_Error_Exception("Internal error in A-Select component")); 
} 
 
check_credentials(); 
 
 |