0a785d97d8501af2ba1664a2cd7f7143bf064387
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

1) <?php
2) 
3) /*
4) 
5)  ************************************
6)  *          Configuration           *
7)  ************************************
8) 
9) */
10) 
11) // PhpCAS library path
12) $phpCAS_path="CAS.php";
13) 
14) // All valid CAS servers
15) $cas_servers=array(
16) 	// CAS server hostname
17) 	$_SERVER['SERVER_NAME'] => array(
18) 		// Context of the CAS Server
19) 		'context' => '/cas',
20) 		// CAS server port
21) 		'port' => 443,
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

22) 		// If you running this application in HTTP only, uncomment following parameter
23) 		//'insecure' => true,
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

24) 		// Disable CAS server Validation
25) 		'ssl_validation' => false,
26) 		// If ssl_validation is enable you must define
27) 		'ssl_cacert_path' => '/path/to/cacert.crt',
28) 		'ssl_cn_validation' => true
29) 	)
30) );
31) 
32) // FQDN of CAS server
33) $default_cas_server=key($cas_servers);
34) 
35) // PhpCAS log file
Benjamin Renard Change phpCAS log file path...

Benjamin Renard authored 4 years ago

36) $phpCAS_logfile='cas.log';
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

37) 
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

38) // Local app URL (auto-detect on first acces if null)
39) $service_url=null;
40) 
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

41) /*
42) 
43)  ************************************
44)  *               Main               *
45)  ************************************
46) 
47) */
48) 
49) $warnings=array();
50) 
51) session_start();
52) require $phpCAS_path;
53) CAS_GracefullTerminationException::throwInsteadOfExiting();
54) 
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

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) 
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

72) if (isset($_REQUEST['server']) && !isset($cas_servers[$_REQUEST['server']])) {
73) 	$warnings[]="Invalid CAS server choiced";
74) 	unset($_REQUEST['server']);
75) }
76) if (isset($_REQUEST['server'])) {
77) 	$cas_host=$_REQUEST['server'];
78) 	if ($_SESSION['cas_server']!=$cas_host) {
79) 		$_SESSION['cas_server']=$cas_host;
80) 		unset($_SESSION['phpCAS']['user']);
81) 	}
82) }
83) elseif (isset($_SESSION['cas_server'])) {
84) 	$cas_host=$_SESSION['cas_server'];
85) }
86) else {
87) 	$cas_host=$default_cas_server;
88) 	$_SESSION['cas_server']=$cas_host;
89) 	unset($_SESSION['phpCAS']['user']);
90) }
91) $_SESSION['cas_server']=$cas_host;
92) 
93) $_show_cas_client_config=false;
94) function show_cas_client_config() {
95) 	global $phpCAS_config, $_show_cas_client_config;
96) 	if ($_show_cas_client_config) return true;
97) 	$_show_cas_client_config=true;
98) 	echo "<h3>CAS Client configuration</h3><ul>";
99) 	foreach($phpCAS_config as $cfg_name => $cfg_val) {
100) 		echo "<li><strong>$cfg_name :</strong> <em>$cfg_val</em></li>";
101) 	}
102) 	echo "</ul>";
103) }
104) 
105) $_show_warnings=false;
106) function show_warnings() {
107) 	global $warnings,$_show_warnings;
108) 	if ($_show_warnings) return true;
109) 	$_show_warnings=true;
110) 	if (!empty($warnings)) {
111) 		echo "<h2 style='color: #f00'>Warnings message</h2><ul>";
112) 		foreach ($warnings as $msg) {
113) 			echo "<li>$msg</li>";
114) 		}
115) 		echo "</ul>";
116) 	}
117) }
118) 
119) function show_cas_log() {
120) 	global $phpCAS_logfile;
121) 
122) 	echo "<h2>PhpCAS Debug Log</h2>";
123) 	if (is_writable($phpCAS_logfile)) {
124) 		$lines=file($phpCAS_logfile);
125) 		if (is_array($lines)) {
126) 			echo '<pre>'.implode('',$lines).'</pre>';
127) 		}
128) 		else {
129) 			echo "<strong>Error reading PhpCAS debug log file ($phpCAS_logfile).</strong>";
130) 		}
131) 	}
132) 	else {
133) 		echo "<strong>PhpCAS debug log file does not exists or is not writable ($phpCAS_logfile).</strong>";
134) 	}
135) }
136) 
137) function show_user_infos() {
138) 	echo "<strong>Login :</strong> <em>".phpCAS::getUser()."</em><br/>";
139) 	echo "<strong>Attributes : </strong><pre>".print_r(phpCAS::getAttributes(),True).'</pre>';
140) }
141) 
142) ?>
143) <html>
144) <head>
145) 	<title>Test CAS</title>
146) 
147) <style>
148) strong {
149) 	font-size: 0.9em;
150) }
151) 
152) em {
153) 	font-size: 0.8em;
154) }
155) 
156) pre {
157) 	margin-left: 1em;
158) 	padding: 1em;
159) 	border-left: 1px solid;
160) 	background-color: #eee;
161) 	font-size: 0.9em;
162) }
163) 
164) div.success, div.error {
165) 	padding: 0.2em;
166) 	width: 50%;
167) 	font-weight: bold;
168) 	margin: 1em;
169) 	text-align: center;
170) }
171) 
172) div.success {
173) 	color: #0E4700;
174) 	border: 1px solid #0E4700;
175) 	background-color: #99E774;
176) }
177) 
178) div.error {
179) 	color: #f00;
180) 	border: 1px solid #f00;
181) 	padding: 1em;
182) 	background-color: #C56E6E;
183) }
184) 
185) h2 {
186) 	border-bottom: 1px solid;
187) }
188) </style>
189) <body>
190) <h1>Test CAS Application</h1>
191) 
192) <h2>CAS server selection</h2>
193) <form action='index.php' method='POST'>
194) <label for='server'>CAS server</label> :
195) <select name='server' id='server' onchange="javascript:submit();">
196) <?php
197) foreach($cas_servers as $srv => $opts) {
198) 	echo "<option value='$srv'".(($cas_host==$srv)?'selected':'').">$srv</option>\n";
199) }
200) ?>
201) </select>
202) <input type='submit' value='Change'/>
203) </form>
204) <h2>Menu</h2>
205) <ul>
206)  <li><a href='?do=login'>Login</a></li>
207)  <li><a href='?do=caslogout'>Logout on CAS server</a></li>
208)  <li><a href='?do=locallogout'>Logout on local application</a></li>
209) <?php
210) if (is_writable($phpCAS_logfile)) {
211)   echo "<li><a href='?truncatelog=true'>Truncate Debug log file content</a></li>";
212) }
213) ?>
214) </ul>
215) 
216) <h2>CAS Client Initialization ...</h2>
217) <?php
218) try {
219) 
220) $phpCAS_config=array(
221) 	'CAS Hostname' => $cas_host,
222) 	'CAS server port' => $cas_servers[$cas_host]['port'],
223) 	'CAS server context' => $cas_servers[$cas_host]['context'],
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

224) 	'Service URL' => $service_url,
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

225) );
226) 
227) if (is_writable($phpCAS_logfile)) {
228) 	if (isset($_REQUEST['truncatelog'])) {
229) 		$fh = fopen($phpCAS_logfile, 'w');
230) 		fclose($fh);
231) 	}
232) 	$phpCAS_config['Debug file'] = $phpCAS_logfile;
233) 	phpCAS::setDebug($phpCAS_logfile);
234) }
235) 
236) phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_servers[$cas_host]['port'], $cas_servers[$cas_host]['context']);
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

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';
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

259) 
260) echo "<div class='success'>Client successfully initialized</div>";
261) 
262) if ($cas_servers[$cas_host]['ssl_validation']===true) {
263) 	if (is_readable($cas_servers[$cas_host]['ssl_cacert_path'])) {
264) 		$phpCAS_config['SSL Validation']='Enabled';
265) 		$phpCAS_config['SSL CA Cert Validation File']=$cas_servers[$cas_host]['ssl_cacert_path'];
266) 		$phpCAS_config['SSL CN Validation']=($cas_servers[$cas_host]['ssl_cn_validation']?'Enabled':'Disabled');
267) 		phpCAS::setCasServerCACert($cas_servers[$cas_host]['ssl_cacert_path'],$cas_servers[$cas_host]['ssl_cn_validation']);
268) 	}
269) 	else {
270) 		$warnings[]='SSL validation enable for this server but CA Cert file configured does not exists or is not readable';
271) 		$phpCAS_config['SSL Validation']='Disabled';
272) 		phpCAS::setNoCasServerValidation();
273) 	}
274) }
275) else {
276) 	$phpCAS_config['SSL Validation']='Disabled';
277) 	phpCAS::setNoCasServerValidation();
278) }
279) 
280) phpCAS::setCacheTimesForAuthRecheck(0);
281) 
282) show_cas_client_config();
283) show_warnings();
284) 
285) ?>
286) 
287) <h2>Action</h2>
288) <h3>State before running action</h3>
289) <?php
290) if (phpCAS::isAuthenticated()) {
291) 	echo "Authenticated";
292) }
293) else {
294) 	echo "Not authenticated";
295) }
296) ?>
297) <h3>Running action...</h3>
298) <?php
299) 
300) if (isset($_REQUEST['do'])) {
301) 
302) 	switch($_REQUEST['do']) {
303) 		case 'login':
304) 			phpCAS::forceAuthentication();
305) 			echo "<div class='success'>Successfully authenticated</div>";
306) 			break;
307) 		case 'caslogout':
308) 			phpCAS::forceAuthentication();
Benjamin Renard Use phpCAS::logoutWithUrl()...

Benjamin Renard authored 4 years ago

309) 			phpCAS::logoutWithUrl($service_url);
Benjamin Renard Initial commit

Benjamin Renard authored 9 years ago

310) 			break;
311) 		case 'locallogout':
Benjamin Renard Add insecure parameter to a...

Benjamin Renard authored 4 years ago

312) 			unset($_SESSION['session_url']);