start to use new endpoint classes in the endpoints

This commit is contained in:
<bdauvergne@entrouvert.com> 1209030478 +0200 0001-01-01 00:00:00 +00:00
parent 45aef7194d
commit 0e4fa91bb0
1 changed files with 15 additions and 214 deletions

View File

@ -1,220 +1,21 @@
<?php
require_once("spkitlasso/lassospkit_helper.inc.php");
require_once("spkitlasso/lassospkit_dispatcher.inc.php");
require_once("spkitlasso/lassospkit_saml2.inc.php");
require_once("spkitlasso/lassospkit_metadata.inc.php");
require_once("spkitlasso/lassospkit_utils.inc.php");
require_once("spkitlasso/lassospkit_utils_session.inc.php");
require_once("spkitlasso/lassospkit_dummysession.inc.php");
require_once("spkitlasso/lassospkit_autopersistentsession.inc.php");
require_once('spkitlasso/lassospkit_saml2_endpoint.inc.php');
function verifyUrl($host) {
$host = strstr('//', $host);
$pos = strpos($host, '/');
if ($pos !== FALSE) {
$host = substr($host, 0, $pos);
}
if ($host && isset($_SERVER['HTTP_HOST']) && $host != $_SERVER['HTTP_HOST']) {
echo "Bad referer '$host' != '" . $_SERVER['HTTP_HOST'] . "'";
exit(1);
}
}
function verifyReferer() {
if (isset($_SERVER['HTTP_REFERER'])) {
$host = $_SERVER['HTTP_REFERER'];
verifyUrl($host);
}
}
$dispatch_table = array(
'/login' => 'login',
'/federate' => 'federate',
'/ssoAssertionConsumer' => 'ssoAssertionConsumer',
'/slo' => 'slo',
'/sloSoap' => 'sloSoap',
'/sloRedirect' => 'sloRedirect',
'/sloResponse' => 'sloResponse',
'/defederate' => 'defederate',
'/nidManagementInit' => 'nidManagementInit',
'/nidManagementSoap' => 'nidManagementSoap',
'/nidManagementRedirect' => 'nidManagementRedirect',
'/nidManagementResponse' => 'nidManagementResponse',
'/metadata' => 'metadata');
try { dispatch($dispatch_table); } catch (Exception $e) {
LassoSPKitUtilsSession::setLastError($e->__toString());
finish();
}
// Utils
function getReturnUrl() {
if (isset($_GET['return_url'])) {
$return_url = $_GET['return_url'];
verifyUrl($return_url);
} else {
$return_url = LassoSPKitConfig::get('default_return_url');
}
return $return_url;
}
// Finish interaction by return to a given return_url, or if not
// found one given in a parameter of the current url or lastly
// to the value of the config fiel 'default_return_url'.
function finish($return_url = null) {
// Return url
if (! $return_url) {
$return_url = getReturnUrl();
}
if ($return_url) {
getSession()->doRedirect($return_url);
}
}
// For internal redirection use the relay state mechnism in the session
function finishWithMethod($method, $relay_state_name)
{
if ($method == LASSO_HTTP_METHOD_SOAP) {
finish();
} else {
LassoSPKitUtilsSession::setRelayState($relay_state_name, getReturnUrl());
}
}
function finishResponse($relay_state_name) {
finish(LassoSPKitUtilsSession::getRelayState($relay_state_name));
}
function getSession() {
$session_class = "LassoSPKit" . LassoSPKitConfig::get('session');
return new $session_class();
}
function login() {
verifyReferer();
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
$persistent = TRUE;
$passive = FALSE;
if (isset($_GET['persistent'])) {
switch ($_GET['persistent']) {
case '0':
$persistent = FALSE;
break;
case '1':
$persistent = TRUE;
break;
default;
$persistent = TRUE;
break;
class MyEndPoint extends LassoSPKitSaml2Endpoint {
function dispatchAndExit() {
try {
parent::dispatchAndExit();
} catch (Exception $e) {
$exceptionText = $e->__toString();
$lines = explode('\n',$exceptionText);
foreach ($lines as $line) {
lassospkit_errlog($line);
}
die('There was an error, shoot yourself !');
}
}
if (isset($_GET['passive'])) {
switch ($_GET['passive']) {
case '0':
$passive = FALSE;
break;
case '1':
$passive = TRUE;
break;
default;
$passive = FALSE;
break;
}
}
// Do not allow creation of persistent federation,
// but eventually permit transient ones
$saml2->sso(FALSE, $persistent, $passive);
LassoSPKitUtilsSession::setRelayState('sso', getReturnUrl());
}
function federate() {
verifyReferer();
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
// Allow creation
// Only persistent federation
$saml2->sso(TRUE, TRUE);
LassoSPKitUtilsSession::setRelayState('sso', getReturnUrl());
}
function ssoAssertionConsumer() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
if (isset($_GET)) {
$ok = $saml2->ssoConsumer(LASSO_HTTP_METHOD_ARTIFACT_GET, $_SERVER['QUERY_STRING']);
} elseif (isset($_POST)) {
$ok = $saml2->ssoConsumer(LASSO_HTTP_METHOD_ARTIFACT_POST, $_SERVER['QUERY_STRING']);
}
$return_url = LassoSPKitUtilsSession::getRelayState('sso');
finish($return_url);
}
function slo() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
$method = LASSO_HTTP_METHOD_SOAP;
$ret = $saml2->initiateSLO($method);
finishWithMethod($method, 'slo');
}
function sloSoap() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
try {
if ($saml2->processSOAPRequestSLO() == 0) {
lassospkit_debuglog("SLO SOAP Request handler: fatal error");
}
} catch (Exception $e) {
lassospkit_debuglog("Problem in $e");
}
}
function sloRedirect() {
}
function sloResponse() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
$ret = $saml2->processRedirectResponseSLO();
finishResponse('slo', $session, $ret);
}
function defederate() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
$method = LASSO_HTTP_METHOD_SOAP;
$ret = $saml2->initiateFTNotification($method);
finishWithMethod($method, 'nidmanagement');
}
function nidManagementInit() {
}
function nidManagementSoap() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
lassospkit_debuglog("Call to nidmanagementsoap");
try {
if ($saml2->processSOAPRequestNameIdManagement() == 0) {
lassospkit_debuglog("NIDManagement SOAP Request handler: fatal error");
}
} catch (Exception $e) {
lassospkit_debuglog("Problem in $e");
}
}
function nidManagementRedirect() {
}
// NidManagement Redirect Response
function nidManagementResponse() {
$session = getSession();
$saml2 = new LassoSPKitSAML2($session);
$ret = $saml2->processRedirectResponseNameIdManagement();
finishResponse('nidmanagement');
}
// Generate metadatas
function metadata() {
$datadir = LassoSPKitHelper::getMetadataDir(LASSO_PROTOCOL_SAML_2_0);
$pkey = $datadir . "/" . PRIVATE_KEY;
LassoSPKitUtils::extractPublicKey($pkey, $publickey, $error);
try {
$content = LassoSPKitMetadataSAML2::generateMetadata(LassoSPKitConfig::get('baseUrl'), LassoSPKitConfig::get('organization'), $publickey);
if ($content) {
header('Content-type: text/xml');
echo $content;
}
} catch (Exception $e) {
throw $e;
}
}
$endpoint = new MyEndpoint();
$endpoint->dispatchAndExit();