Skip to content

Commit c45bacd

Browse files
committed
Merge branch 'master' of [email protected]:apereo/phpCAS
2 parents 0a9f5bd + 95f7511 commit c45bacd

File tree

1 file changed

+71
-14
lines changed

1 file changed

+71
-14
lines changed

source/CAS/Client.php

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,18 @@ public function __construct(
997997

998998
// set to callback mode if PgtIou and PgtId CGI GET parameters are provided
999999
if ( $this->isProxy() ) {
1000-
$this->_setCallbackMode(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId']));
1000+
if(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId'])) {
1001+
$this->_setCallbackMode(true);
1002+
$this->_setCallbackModeUsingPost(false);
1003+
} elseif (!empty($_POST['pgtIou'])&&!empty($_POST['pgtId'])) {
1004+
$this->_setCallbackMode(true);
1005+
$this->_setCallbackModeUsingPost(true);
1006+
} else {
1007+
$this->_setCallbackMode(false);
1008+
$this->_setCallbackModeUsingPost(false);
1009+
}
1010+
1011+
10011012
}
10021013

10031014
if ( $this->_isCallbackMode() ) {
@@ -2329,6 +2340,36 @@ private function _isCallbackMode()
23292340
return $this->_callback_mode;
23302341
}
23312342

2343+
/**
2344+
* @var bool a boolean to know if the CAS client is using POST parameters when in callback mode.
2345+
* Written by CAS_Client::_setCallbackModeUsingPost(), read by CAS_Client::_isCallbackModeUsingPost().
2346+
*
2347+
* @hideinitializer
2348+
*/
2349+
private $_callback_mode_using_post = false;
2350+
2351+
/**
2352+
* This method sets/unsets usage of POST parameters in callback mode (default/false is GET parameters)
2353+
*
2354+
* @param bool $callback_mode_using_post true to use POST, false to use GET (default).
2355+
*
2356+
* @return void
2357+
*/
2358+
private function _setCallbackModeUsingPost($callback_mode_using_post)
2359+
{
2360+
$this->_callback_mode_using_post = $callback_mode_using_post;
2361+
}
2362+
2363+
/**
2364+
* This method returns true when the callback mode is using POST, false otherwise.
2365+
*
2366+
* @return bool A boolean.
2367+
*/
2368+
private function _isCallbackModeUsingPost()
2369+
{
2370+
return $this->_callback_mode_using_post;
2371+
}
2372+
23322373
/**
23332374
* the URL that should be used for the PGT callback (in fact the URL of the
23342375
* current request without any CGI parameter). Written and read by
@@ -2387,23 +2428,39 @@ public function setCallbackURL($url)
23872428
private function _callback()
23882429
{
23892430
phpCAS::traceBegin();
2390-
if (preg_match('/^PGTIOU-[\.\-\w]+$/', $_GET['pgtIou'])) {
2391-
if (preg_match('/^[PT]GT-[\.\-\w]+$/', $_GET['pgtId'])) {
2392-
$this->printHTMLHeader('phpCAS callback');
2393-
$pgt_iou = $_GET['pgtIou'];
2394-
$pgt = $_GET['pgtId'];
2395-
phpCAS::trace('Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\')');
2396-
echo '<p>Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\').</p>';
2397-
$this->_storePGT($pgt, $pgt_iou);
2398-
$this->printHTMLFooter();
2431+
if ($this->_isCallbackModeUsingPost()) {
2432+
$pgtId = $_POST['pgtId'];
2433+
$pgtIou = $_POST['pgtIou'];
2434+
} else {
2435+
$pgtId = $_GET['pgtId'];
2436+
$pgtIou = $_GET['pgtIou'];
2437+
}
2438+
if (preg_match('/^PGTIOU-[\.\-\w]+$/', $pgtIou)) {
2439+
if (preg_match('/^[PT]GT-[\.\-\w]+$/', $pgtId)) {
2440+
phpCAS::trace('Storing PGT `'.$pgtId.'\' (id=`'.$pgtIou.'\')');
2441+
$this->_storePGT($pgtId, $pgtIou);
2442+
if (array_key_exists('HTTP_ACCEPT', $_SERVER) &&
2443+
( $_SERVER['HTTP_ACCEPT'] == 'application/xml' ||
2444+
$_SERVER['HTTP_ACCEPT'] == 'text/xml'
2445+
)
2446+
) {
2447+
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n";
2448+
echo '<proxySuccess xmlns="http://www.yale.edu/tp/cas" />';
2449+
phpCAS::traceExit("XML response sent");
2450+
} else {
2451+
$this->printHTMLHeader('phpCAS callback');
2452+
echo '<p>Storing PGT `'.$pgtId.'\' (id=`'.$pgtIou.'\').</p>';
2453+
$this->printHTMLFooter();
2454+
phpCAS::traceExit("HTML response sent");
2455+
}
23992456
phpCAS::traceExit("Successfull Callback");
24002457
} else {
2401-
phpCAS::error('PGT format invalid' . $_GET['pgtId']);
2402-
phpCAS::traceExit('PGT format invalid' . $_GET['pgtId']);
2458+
phpCAS::error('PGT format invalid' . $pgtId);
2459+
phpCAS::traceExit('PGT format invalid' . $pgtId);
24032460
}
24042461
} else {
2405-
phpCAS::error('PGTiou format invalid' . $_GET['pgtIou']);
2406-
phpCAS::traceExit('PGTiou format invalid' . $_GET['pgtIou']);
2462+
phpCAS::error('PGTiou format invalid' . $pgtIou);
2463+
phpCAS::traceExit('PGTiou format invalid' . $pgtIou);
24072464
}
24082465

24092466
// Flush the buffer to prevent from sending anything other then a 200

0 commit comments

Comments
 (0)