@@ -997,7 +997,18 @@ public function __construct(
997
997
998
998
// set to callback mode if PgtIou and PgtId CGI GET parameters are provided
999
999
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
+
1001
1012
}
1002
1013
1003
1014
if ( $ this ->_isCallbackMode () ) {
@@ -2329,6 +2340,36 @@ private function _isCallbackMode()
2329
2340
return $ this ->_callback_mode ;
2330
2341
}
2331
2342
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
+
2332
2373
/**
2333
2374
* the URL that should be used for the PGT callback (in fact the URL of the
2334
2375
* current request without any CGI parameter). Written and read by
@@ -2387,23 +2428,39 @@ public function setCallbackURL($url)
2387
2428
private function _callback ()
2388
2429
{
2389
2430
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
+ }
2399
2456
phpCAS::traceExit ("Successfull Callback " );
2400
2457
} 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 );
2403
2460
}
2404
2461
} 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 );
2407
2464
}
2408
2465
2409
2466
// Flush the buffer to prevent from sending anything other then a 200
0 commit comments