start to use new endpoint classes in the endpoints
This commit is contained in:
parent
45aef7194d
commit
0e4fa91bb0
|
@ -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();
|
||||
|
|
Reference in New Issue