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 |