Viewing file: serviceValidate.php (3.27 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php require 'tickets.php';
# set manually if called directly - ie not included from validate.php or cas.php if (!$function) $function = 'serviceValidate';
/* * Incomming parameters: * service * renew * ticket * */
if (array_key_exists('service', $_GET)) { $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)'); }
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'];
$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_Utilities::generateID()); $pgt = str_replace( '_', 'PGT-', SimpleSAML_Utilities::generateID()); $content = array( 'attributes' => $attributes, 'forceAuthn' => false, 'proxies' => array_merge(array($service), $ticketcontent['proxies']), 'validbefore' => time() + 60); SimpleSAML_Utilities::fetch($pgtUrl . '?pgtIou=' . $pgtiou . '&pgtId=' . $pgt); storeTicket($pgt, $path, $content); $pgtiouxml = "\n<cas:proxyGrantingTicket>$pgtiou</cas:proxyGrantingTicket>\n"; } $proxiesxml = join("\n", array_map(create_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()); }
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> </cas:serviceResponse>'; } 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';
} } }
?>
|