<?php 
 
/* 
* AUTHOR: Samuel Muñoz Hidalgo 
* EMAIL: [email protected] 
* LAST REVISION: 13-FEB-09 
* DESCRIPTION: 
*        Pretty form to get a managed InfoCard 
*        User flow controller. 
*        Displays the template and request a non null xmlToken 
*/ 
 
 
/* Load the configuration. */ 
$config = SimpleSAML_Configuration::getInstance(); 
$autoconfig = $config->copyFromBase('logininfocard', 'config-login-infocard.php'); 
 
$Infocard =   $autoconfig->getValue('InfoCard'); 
 
 
/* Load the session of the current user. */ 
$session = SimpleSAML_Session::getSessionFromRequest(); 
 
if (!array_key_exists('AuthState', $_REQUEST)) { 
SimpleSAML_Logger::debug('NO AUTH STATE'); 
SimpleSAML_Logger::debug('ERROR: NO AUTH STATE'); 
    throw new SimpleSAML_Error_BadRequest('Missing AuthState parameter.'); 
} else { 
    $authStateId = $_REQUEST['AuthState']; 
SimpleSAML_Logger::debug('AUTH STATE:  '.$authStateId); 
} 
 
$username = null; 
$password = null; 
 
$state = "validate"; 
if(array_key_exists('form', $_POST) && ($_POST['form']!=NULL)  ) { 
    if(array_key_exists('username', $_POST) && ($_POST['username']!=NULL)  ) { 
        if(array_key_exists('password', $_POST) && ($_POST['password']!=NULL)  ) { 
            //Validation: Username/Password 
            $username = $_POST['username']; 
            $password = $_POST['password']; 
            if (sspmod_InfoCard_UserFunctions::validateUser(array('username'=>$username,'password'=>$password),'UsernamePasswordCredential')){ 
                $userCredential =   $autoconfig->getValue('UserCredential'); 
                if (strcmp($userCredential,'UsernamePasswordCredential')==0){ 
                     
                    $ICconfig['InfoCard'] = $Infocard; 
                    $ICconfig['InfoCard']['issuer'] = $autoconfig->getValue('tokenserviceurl');//sspmod_InfoCard_Utils::getIssuer($sts_crt); 
                    $ICconfig['tokenserviceurl'] = $autoconfig->getValue('tokenserviceurl'); 
                    $ICconfig['mexurl'] = $autoconfig->getValue('mexurl'); 
                    $ICconfig['sts_key'] = $autoconfig->getValue('sts_key'); 
                    $ICconfig['certificates'] = $autoconfig->getValue('certificates'); 
                    $ICconfig['UserCredential'] = $autoconfig->getValue('UserCredential'); 
                     
                    $ICdata = sspmod_InfoCard_UserFunctions::fillICdata($username,$userCredential); 
                    $IC = sspmod_InfoCard_STS::createCard($ICdata,$ICconfig); 
                    header("Content-Disposition: attachment; filename=\"".$ICdata['CardName'].".crd\""); 
                    header('Content-Type: application/x-informationcard'); 
                    header('Content-Length:'.strlen($IC)); 
                    echo $IC; 
                    $state = 'end'; 
                }else if (strcmp($userCredential,'SelfIssuedCredential')==0){ 
                    /* 
                    * VERY IMPORTANT: 
                    * The STS is acting as a Relying Party to get the PPID in order to generate a 
                    *  managed card with a self issued credential, that's why we use the STS 
                    *  certificate private key to decrypt the token. 
                    */ 
                    if(array_key_exists('xmlToken', $_POST) && ($_POST['xmlToken']!=NULL)  ) { 
                        SimpleSAML_Logger::debug('HAY XML TOKEN'); 
                        $token = new sspmod_InfoCard_RP_InfoCard(); 
                        $idp_key = $autoconfig->getValue('sts_key'); 
                        $token->addIDPKey($idp_key); 
                        $token->addSTSCertificate('');     
                        $claims = $token->process($_POST['xmlToken']); 
                        if(($claims->isValid()) && ($claims->privatepersonalidentifier!=NULL)) { 
                            $ppid = $claims->privatepersonalidentifier; 
                            SimpleSAML_Logger::debug("PPID = $ppid"); 
                            $ICconfig['InfoCard'] = $Infocard; 
                            $ICconfig['InfoCard']['issuer'] = $autoconfig->getValue('tokenserviceurl');//sspmod_InfoCard_Utils::getIssuer($sts_crt); 
                            $ICconfig['tokenserviceurl'] = $autoconfig->getValue('tokenserviceurl'); 
                            $ICconfig['mexurl'] = $autoconfig->getValue('mexurl'); 
                            $ICconfig['sts_key'] = $autoconfig->getValue('sts_key'); 
                            $ICconfig['certificates'] = $autoconfig->getValue('certificates'); 
                            $ICconfig['UserCredential'] = $autoconfig->getValue('UserCredential'); 
                             
                            $ICdata = sspmod_InfoCard_UserFunctions::fillICdata($username,$userCredential,$ppid);     
                            $IC = sspmod_InfoCard_STS::createCard($ICdata,$ICconfig); 
                            header('Content-Disposition: attachment; filename="'.$ICdata['CardName'].'.crd"'); 
                            header('Content-Type: application/x-informationcard'); 
                            header('Content-Length:'.strlen($IC)); 
                            echo $IC; 
                            $state = 'end'; 
                        }else { 
                            SimpleSAML_Logger::debug('Wrong Self-Issued card'); 
                            $error = 'wrong_IC'; 
                            $state = "selfIssued"; 
                        } 
                    }else{ 
                        SimpleSAML_Logger::debug('NO HAY XML TOKEN'); 
                        $error = NULL; 
                        $state = "selfIssued"; 
                    } 
                }else{ 
                    SimpleSAML_Logger::debug('CONFIGURATION ERROR: UserCredential '.$userCredential.' NOT SUPPORTED'); 
                } 
            }else{ 
                $error = 'Wrong_user_pass'; 
                SimpleSAML_Logger::debug('WRONG username or password'); 
            } 
        }else{ 
            $error = 'NO_password'; 
            SimpleSAML_Logger::debug('NO PASSWORD'); 
        } 
    }else { 
        $error = 'NO_user'; 
        SimpleSAML_Logger::debug('NO USERNAME'); 
    } 
}else{ 
    $error = NULL; 
} 
 
 
unset($_POST); //Show the languages bar if reloaded 
 
$t = new SimpleSAML_XHTML_Template($config, 'InfoCard:temp-getcardform.php', 'InfoCard:dict-InfoCard'); //(configuracion, template, diccionario) 
$t->data['header'] = 'simpleSAMLphp: Get your Infocard'; 
$t->data['stateparams'] = array('AuthState' => $authStateId); 
 
 
$t->data['InfoCard'] = $Infocard; 
 
$cardGenerator =   $autoconfig->getValue('CardGenerator'); 
$t->data['CardGenerator'] = $cardGenerator; 
 
$help_desk_email_URL = $autoconfig->getValue('help_desk_email_URL'); 
$t->data['help_desk_email_URL'] = $help_desk_email_URL; 
 
$contact_info_URL = $autoconfig->getValue('contact_info_URL'); 
$t->data['contact_info_URL'] = $contact_info_URL; 
 
$t->data['error'] = $error; 
$t->data['form'] = $state; 
 
//For testing purposes 
$t->data['username']=$username; 
$t->data['password']=$password; 
 
 
 
$t->show(); 
exit(); 
?>
 
 |