PHP Classes

File: web/SSO/SAML/saml2/sp/SingleLogoutService.php

Recommend this page to a friend!
  Classes of william amed   Raptor 2   web/SSO/SAML/saml2/sp/SingleLogoutService.php   Download  
File: web/SSO/SAML/saml2/sp/SingleLogoutService.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: 3,356 bytes
 

Contents

Class file image Download
<?php

/**
 * WARNING:
 *
 * THIS FILE IS DEPRECATED AND WILL BE REMOVED IN FUTURE VERSIONS
 *
 * @deprecated
 */

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

$config = SimpleSAML_Configuration::getInstance();
$metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler();

SimpleSAML_Logger::warning('The file saml2/sp/SingleLogoutService.php is deprecated and will be removed in future versions.');

// Get the local session
$session = SimpleSAML_Session::getSessionFromRequest();


SimpleSAML_Logger::info('SAML2.0 - SP.SingleLogoutService: Accessing SAML 2.0 SP endpoint SingleLogoutService');

if (!
$config->getBoolean('enable.saml20-sp', TRUE))
    throw new
SimpleSAML_Error_Error('NOACCESS');



// Destroy local session if exists.
$session->doLogout('saml2');

$binding = SAML2_Binding::getCurrentBinding();
$message = $binding->receive();

$idpEntityId = $message->getIssuer();
if (
$idpEntityId === NULL) {
   
/* Without an issuer we have no way to respond to the message. */
   
throw new SimpleSAML_Error_BadRequest('Received message on logout endpoint without issuer.');
}

$spEntityId = $metadata->getMetaDataCurrentEntityId('saml20-sp-hosted');

$idpMetadata = $metadata->getMetaDataConfig($idpEntityId, 'saml20-idp-remote');
$spMetadata = $metadata->getMetaDataConfig($spEntityId, 'saml20-sp-hosted');

sspmod_saml_Message::validateMessage($idpMetadata, $spMetadata, $message);

if (
$message instanceof SAML2_LogoutRequest) {

    try {
       
// Extract some parameters from the logout request
       
$requestid = $message->getId();

       
SimpleSAML_Logger::info('SAML2.0 - SP.SingleLogoutService: IdP (' . $idpEntityId .
           
') is sending logout request to me SP (' . $spEntityId . ') requestid '.$requestid);
       
SimpleSAML_Logger::stats('saml20-idp-SLO idpinit ' . $spEntityId . ' ' . $idpEntityId);

       
/* Create response. */
       
$lr = sspmod_saml_Message::buildLogoutResponse($spMetadata, $idpMetadata);
       
$lr->setRelayState($message->getRelayState());
       
$lr->setInResponseTo($message->getId());

       
SimpleSAML_Logger::info('SAML2.0 - SP.SingleLogoutService: SP me (' . $spEntityId . ') is sending logout response to IdP (' . $idpEntityId . ')');

       
$dst = $idpMetadata->getEndpointPrioritizedByBinding('SingleLogoutService', array(
           
SAML2_Const::BINDING_HTTP_REDIRECT,
           
SAML2_Const::BINDING_HTTP_POST)
        );
  
        if (!
$binding instanceof SAML2_SOAP) {
           
$binding = SAML2_Binding::getBinding($dst['Binding']);
            if (isset(
$dst['ResponseLocation'])) {
               
$dst = $dst['ResponseLocation'];
            } else {
               
$dst = $dst['Location'];
            }
           
$binding->setDestination($dst);
        }

       
/* Send response. */
       
$binding->send($lr);
    } catch (
Exception $exception) {
        throw new
SimpleSAML_Error_Error('LOGOUTREQUEST', $exception);
    }

} elseif (
$message instanceof SAML2_LogoutResponse) {

   
SimpleSAML_Logger::stats('saml20-sp-SLO spinit ' . $spEntityId . ' ' . $idpEntityId);

   
$id = $message->getRelayState();
    if (empty(
$id)) {
       
/* For backwardscompatibility. */
       
$id = $message->getInResponseTo();
    }

   
// 'spLogoutReturnTo' is checked before storing it in the
    // session, so we trust it here.
   
$returnTo = $session->getData('spLogoutReturnTo', $id);
    if (empty(
$returnTo)) {
        throw new
SimpleSAML_Error_Error('LOGOUTINFOLOST');
    }

   
SimpleSAML_Utilities::redirectTrustedURL($returnTo);

} else {
    throw new
SimpleSAML_Error_Error('SLOSERVICEPARAMS');
}