diff --git a/modules/casserver/www/serviceValidate.php b/modules/casserver/www/serviceValidate.php index b0deead91b88fd7f1697eddae071d3f579237aae..fd9ebc65a974ffeb2dd2348e438494e954027583 100644 --- a/modules/casserver/www/serviceValidate.php +++ b/modules/casserver/www/serviceValidate.php @@ -1,8 +1,10 @@ <?php -require 'tickets.php'; +require('tickets.php'); -# set manually if called directly - ie not included from validate.php or cas.php -if (!$function) $function = 'serviceValidate'; +// set manually if called directly - ie not included from validate.php or cas.php +if (!$function) { + $function = 'serviceValidate'; +} /* * Incoming parameters: @@ -11,93 +13,95 @@ if (!$function) $function = 'serviceValidate'; * ticket * */ - if (array_key_exists('service', $_GET)) { - $service = $_GET['service']; - $ticket = $_GET['ticket']; - $forceAuthn = isset($_GET['renew']) && $_GET['renew']; + $service = $_GET['service']; + $ticket = $_GET['ticket']; + $forceAuthn = isset($_GET['renew']) && $_GET['renew']; } else { - throw new Exception('Required URL query parameter [service] not provided. (CAS Server)'); + throw new Exception('Required URL query parameter [service] not provided. (CAS Server)'); } try { -// Load SimpleSAMLphp, configuration and metadata - $casconfig = SimpleSAML_Configuration::getConfig('module_casserver.php'); - - $path = $casconfig->resolvePath($casconfig->getValue('ticketcache', 'ticketcache')); - $ticketcontent = retrieveTicket($ticket, $path); - - $usernamefield = $casconfig->getValue('attrname', 'eduPersonPrincipalName'); - $dosendattributes = $casconfig->getValue('attributes', FALSE); - - $attributes = $ticketcontent['attributes']; + // Load SimpleSAMLphp, configuration and metadata + $casconfig = SimpleSAML_Configuration::getConfig('module_casserver.php'); - $pgtiouxml = ""; + $path = $casconfig->resolvePath($casconfig->getValue('ticketcache', 'ticketcache')); + $ticketcontent = retrieveTicket($ticket, $path); - if ($ticketcontent['service'] == $service - && $ticketcontent['forceAuthn'] == $forceAuthn - && array_key_exists($usernamefield, $attributes) - && $ticketcontent['validbefore'] > time()) { - - if (isset($_GET['pgtUrl'])) { - $pgtUrl = $_GET['pgtUrl']; - $pgtiou = str_replace( '_', 'PGTIOU-', SimpleSAML\Utils\Random::generateID()); - $pgt = str_replace( '_', 'PGT-', SimpleSAML\Utils\Random::generateID()); - $content = array( - 'attributes' => $attributes, - 'forceAuthn' => false, - 'proxies' => array_merge(array($service), $ticketcontent['proxies']), - 'validbefore' => time() + 60); - \SimpleSAML\Utils\HTTP::fetch($pgtUrl . '?pgtIou=' . $pgtiou . '&pgtId=' . $pgt); - storeTicket($pgt, $path, $content); - $pgtiouxml = "\n<cas:proxyGrantingTicket>$pgtiou</cas:proxyGrantingTicket>\n"; - } - - $proxiesxml = join("\n", array_map( - function($a) { return "<cas:proxy>$a</cas:proxy>"; }, - $ticketcontent['proxies'])); - if ($proxiesxml) { - $proxiesxml = "<cas:proxies>\n$proxiesxml\n</cas:proxies>\n"; - } - returnResponse('YES', $function, $attributes[$usernamefield][0], $dosendattributes ? $attributes : array(), $pgtiouxml.$proxiesxml); - } else { - returnResponse('NO', $function); + $usernamefield = $casconfig->getValue('attrname', 'eduPersonPrincipalName'); + $dosendattributes = $casconfig->getValue('attributes', false); + + $attributes = $ticketcontent['attributes']; + + $pgtiouxml = ""; + + if ($ticketcontent['service'] == $service + && $ticketcontent['forceAuthn'] == $forceAuthn + && array_key_exists($usernamefield, $attributes) + && $ticketcontent['validbefore'] > time()) { + + if (isset($_GET['pgtUrl'])) { + $pgtUrl = $_GET['pgtUrl']; + $pgtiou = str_replace( '_', 'PGTIOU-', SimpleSAML\Utils\Random::generateID()); + $pgt = str_replace( '_', 'PGT-', SimpleSAML\Utils\Random::generateID()); + $content = array( + 'attributes' => $attributes, + 'forceAuthn' => false, + 'proxies' => array_merge(array($service), $ticketcontent['proxies']), + 'validbefore' => time() + 60); + \SimpleSAML\Utils\HTTP::fetch($pgtUrl . '?pgtIou=' . $pgtiou . '&pgtId=' . $pgt); + storeTicket($pgt, $path, $content); + $pgtiouxml = "\n<cas:proxyGrantingTicket>$pgtiou</cas:proxyGrantingTicket>\n"; + } + + $proxiesxml = join("\n", array_map( + function($a) { return "<cas:proxy>$a</cas:proxy>"; }, + $ticketcontent['proxies'])); + if ($proxiesxml) { + $proxiesxml = "<cas:proxies>\n$proxiesxml\n</cas:proxies>\n"; } + returnResponse('YES', $function, $attributes[$usernamefield][0], + $dosendattributes ? $attributes : array(), + $pgtiouxml.$proxiesxml); + } else { + returnResponse('NO', $function); + } + } catch (Exception $e) { - returnResponse('NO', $function, $e->getMessage()); + returnResponse('NO', $function, $e->getMessage()); } -function returnResponse($value, $function, $usrname = '', $attributes = array(), $xtraxml = "") { - if ($value === 'YES') { - if ($function != 'validate') { - $attributesxml = ""; - foreach ($attributes as $attributename => $attributelist) { - $attr = htmlspecialchars($attributename); - foreach ($attributelist as $attributevalue) { - $attributesxml .= "<cas:$attr>" . htmlspecialchars($attributevalue) . "</cas:$attr>\n"; - } - } - if (sizeof($attributes)) $attributesxml = "<cas:attributes>\n" . $attributesxml . "</cas:attributes>\n"; - echo '<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> +function returnResponse($value, $function, $usrname = '', $attributes = array(), $xtraxml = "") +{ + if ($value === 'YES') { + if ($function != 'validate') { + $attributesxml = ""; + foreach ($attributes as $attributename => $attributelist) { + $attr = htmlspecialchars($attributename); + foreach ($attributelist as $attributevalue) { + $attributesxml .= "<cas:$attr>" . htmlspecialchars($attributevalue) . "</cas:$attr>\n"; + } + } + if (sizeof($attributes)) $attributesxml = "<cas:attributes>\n" . $attributesxml . "</cas:attributes>\n"; + echo '<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationSuccess> <cas:user>' . htmlspecialchars($usrname) . '</cas:user>' . - $xtraxml . - $attributesxml . - '</cas:authenticationSuccess> + $xtraxml . + $attributesxml . + '</cas:authenticationSuccess> </cas:serviceResponse>'; - } else { - echo 'yes' . "\n" . $usrname; - } - } else { - if ($function != 'validate') { - echo '<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> + } else { + echo 'yes' . "\n" . $usrname; + } + } else { + if ($function != 'validate') { + echo '<cas:serviceResponse xmlns:cas="http://www.yale.edu/tp/cas"> <cas:authenticationFailure code=""> </cas:authenticationFailure> </cas:serviceResponse>'; - } else { - echo 'no'; - - } - } -} \ No newline at end of file + } else { + echo 'no'; + } + } +}