Benjamin Renard commited on 2020-12-03 14:22:47
Showing 1 changed files, with 46 additions and 0 deletions.
| ... | ... |
@@ -19,6 +19,8 @@ $cas_servers=array( |
| 19 | 19 |
'context' => '/cas', |
| 20 | 20 |
// CAS server port |
| 21 | 21 |
'port' => 443, |
| 22 |
+ // If you running this application in HTTP only, uncomment following parameter |
|
| 23 |
+ //'insecure' => true, |
|
| 22 | 24 |
// Disable CAS server Validation |
| 23 | 25 |
'ssl_validation' => false, |
| 24 | 26 |
// If ssl_validation is enable you must define |
| ... | ... |
@@ -33,6 +35,9 @@ $default_cas_server=key($cas_servers); |
| 33 | 35 |
// PhpCAS log file |
| 34 | 36 |
$phpCAS_logfile='/tmp/cas.log'; |
| 35 | 37 |
|
| 38 |
+// Local app URL (auto-detect on first acces if null) |
|
| 39 |
+$service_url=null; |
|
| 40 |
+ |
|
| 36 | 41 |
/* |
| 37 | 42 |
|
| 38 | 43 |
************************************ |
| ... | ... |
@@ -47,6 +52,23 @@ session_start(); |
| 47 | 52 |
require $phpCAS_path; |
| 48 | 53 |
CAS_GracefullTerminationException::throwInsteadOfExiting(); |
| 49 | 54 |
|
| 55 |
+// Make sure service URL is defined (otherwise, load it from session or auto-detect) |
|
| 56 |
+if (is_null($service_url)) {
|
|
| 57 |
+ if (isset($_SESSION['service_url'])) {
|
|
| 58 |
+ $service_url = $_SESSION['service_url']; |
|
| 59 |
+ } |
|
| 60 |
+ else {
|
|
| 61 |
+ $https = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off'); |
|
| 62 |
+ $request_uri = $_SERVER['REQUEST_URI']; |
|
| 63 |
+ $request_uri = preg_replace('/\?.*$/', '', $request_uri);
|
|
| 64 |
+ $service_url = "http".($https?"s":"")."://".$_SERVER['SERVER_NAME']; |
|
| 65 |
+ if (($_SERVER['SERVER_PORT'] != 443 && $https) || ($_SERVER['SERVER_PORT'] != 80 && !$https)) |
|
| 66 |
+ $service_url .= ":".$_SERVER['SERVER_PORT']; |
|
| 67 |
+ $service_url .= $request_uri; |
|
| 68 |
+ $_SESSION['service_url'] = $service_url; |
|
| 69 |
+ } |
|
| 70 |
+} |
|
| 71 |
+ |
|
| 50 | 72 |
if (isset($_REQUEST['server']) && !isset($cas_servers[$_REQUEST['server']])) {
|
| 51 | 73 |
$warnings[]="Invalid CAS server choiced"; |
| 52 | 74 |
unset($_REQUEST['server']); |
| ... | ... |
@@ -199,6 +221,7 @@ $phpCAS_config=array( |
| 199 | 221 |
'CAS Hostname' => $cas_host, |
| 200 | 222 |
'CAS server port' => $cas_servers[$cas_host]['port'], |
| 201 | 223 |
'CAS server context' => $cas_servers[$cas_host]['context'], |
| 224 |
+ 'Service URL' => $service_url, |
|
| 202 | 225 |
); |
| 203 | 226 |
|
| 204 | 227 |
if (is_writable($phpCAS_logfile)) {
|
| ... | ... |
@@ -211,6 +234,28 @@ if (is_writable($phpCAS_logfile)) {
|
| 211 | 234 |
} |
| 212 | 235 |
|
| 213 | 236 |
phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_servers[$cas_host]['port'], $cas_servers[$cas_host]['context']); |
| 237 |
+phpCAS::setFixedServiceURL($service_url); |
|
| 238 |
+ |
|
| 239 |
+if ($cas_servers[$cas_host]['insecure']) {
|
|
| 240 |
+ $phpCAS_config['Insecure'] = 'Yes'; |
|
| 241 |
+ $phpCAS_config['Base URL'] = 'http://'.$cas_host.($cas_servers[$cas_host]['port']?':'.$cas_servers[$cas_host]['port']:'').$cas_servers[$cas_host]['context']; |
|
| 242 |
+ // Remove trailing slash if present |
|
| 243 |
+ if (substr($phpCAS_config['Base URL'], -1)=='/') |
|
| 244 |
+ $phpCAS_config['Base URL'] = substr($phpCAS_config['Base URL'], 0, -1); |
|
| 245 |
+ $login_url = "$base_url/login"; |
|
| 246 |
+ $service_validate_url = "$base_url/serviceValidate"; |
|
| 247 |
+ $logout_url = "$base_url/logout"; |
|
| 248 |
+ $phpCAS_config['Login URL'] = $phpCAS_config['Base URL']."/login?service=".urlencode($service_url); |
|
| 249 |
+ $phpCAS_config['Logout URL'] = $phpCAS_config['Base URL']."/logout"; |
|
| 250 |
+ $phpCAS_config['Service validate URL'] = $phpCAS_config['Base URL']."/serviceValidate"; |
|
| 251 |
+ phpCAS::setServerLoginURL($phpCAS_config['Login URL']); |
|
| 252 |
+ phpCAS::setServerLogoutURL($phpCAS_config['Logout URL']); |
|
| 253 |
+ phpCAS::setServerServiceValidateURL($phpCAS_config['Service validate URL']); |
|
| 254 |
+ // Be sure SSL validation is disabled |
|
| 255 |
+ $cas_servers[$cas_host]['ssl_validation'] = false; |
|
| 256 |
+} |
|
| 257 |
+else |
|
| 258 |
+ $phpCAS_config['Insecure'] = 'No'; |
|
| 214 | 259 |
|
| 215 | 260 |
echo "<div class='success'>Client successfully initialized</div>"; |
| 216 | 261 |
|
| ... | ... |
@@ -264,6 +309,7 @@ if (isset($_REQUEST['do'])) {
|
| 264 | 309 |
phpCAS::logout(); |
| 265 | 310 |
break; |
| 266 | 311 |
case 'locallogout': |
| 312 |
+ unset($_SESSION['session_url']); |
|
| 267 | 313 |
unset($_SESSION['phpCAS']); |
| 268 | 314 |
if (!isset($_SESSION['phpCAS'])) {
|
| 269 | 315 |
echo "<div class='success'>Successfully logout</div>"; |
| 270 | 316 |