PHP Classes

File: web/SSO/SAML/saml2/idp/ArtifactResolutionService.php

Recommend this page to a friend!
  Classes of william amed   Raptor 2   web/SSO/SAML/saml2/idp/ArtifactResolutionService.php   Download  
File: web/SSO/SAML/saml2/idp/ArtifactResolutionService.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Raptor 2
Framework that takes routes from annotations
Author: By
Last change:
Date: 8 years ago
Size: 1,867 bytes
 

Contents

Class file image Download
<?php

/**
 * The ArtifactResolutionService receives the samlart from the sp.
 * And when the artifact is found, it sends a SAML2_ArtifactResponse.
 *
 * @author Danny Bollaert, UGent AS. <danny.bollaert@ugent.be>
 * @package simpleSAMLphp
 */

require_once('../../_include.php');

$config = SimpleSAML_Configuration::getInstance();
if (!
$config->getBoolean('enable.saml20-idp', FALSE)) {
    throw new
SimpleSAML_Error_Error('NOACCESS');
}

$metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler();
$idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted');
$idpMetadata = $metadata->getMetaDataConfig($idpEntityId, 'saml20-idp-hosted');

if (!
$idpMetadata->getBoolean('saml20.sendartifact', FALSE)) {
    throw new
SimpleSAML_Error_Error('NOACCESS');
}

$store = SimpleSAML_Store::getInstance();
if (
$store === FALSE) {
    throw new
Exception('Unable to send artifact without a datastore configured.');
}

$binding = new SAML2_SOAP();
$request = $binding->receive();
if (!(
$request instanceof SAML2_ArtifactResolve)) {
    throw new
Exception('Message received on ArtifactResolutionService wasn\'t a ArtifactResolve request.');
}

$issuer = $request->getIssuer();
$spMetadata = $metadata->getMetadataConfig($issuer, 'saml20-sp-remote');

$artifact = $request->getArtifact();

$responseData = $store->get('artifact', $artifact);
$store->delete('artifact', $artifact);

if (
$responseData !== NULL) {
   
$document = new DOMDocument();
   
$document->loadXML($responseData);
   
$responseXML = $document->firstChild;
} else {
   
$responseXML = NULL;
}

$artifactResponse = new SAML2_ArtifactResponse();
$artifactResponse->setIssuer($idpEntityId);
$artifactResponse->setInResponseTo($request->getId());
$artifactResponse->setAny($responseXML);
sspmod_saml_Message::addSign($idpMetadata, $spMetadata, $artifactResponse);
$binding->send($artifactResponse);