35 if (!$_SERVER[
'REQUEST_URI']) {
36 $_SERVER[
'REQUEST_URI'] = $_SERVER[
'SCRIPT_NAME'] .
'?' . $_SERVER[
'QUERY_STRING'];
42 if (version_compare(PHP_VERSION,
'5',
'>=') && !(function_exists(
'domxml_new_doc'))) {
43 require_once (dirname(__FILE__) .
'/CAS/domxml-php4-to-php5.php');
64 define(
'PHPCAS_VERSION',
'1.1.2');
77 define(
"CAS_VERSION_1_0",
'1.0');
81 define(
"CAS_VERSION_2_0",
'2.0');
90 define(
"SAML_VERSION_1_1",
'S1');
95 define(
"SAML_XML_HEADER",
'<?xml version="1.0" encoding="UTF-8"?>');
100 define(
"SAML_SOAP_ENV",
'<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>');
105 define(
"SAML_SOAP_BODY",
'<SOAP-ENV:Body>');
110 define(
"SAMLP_REQUEST",
'<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" MajorVersion="1" MinorVersion="1" RequestID="_192.168.16.51.1024506224022" IssueInstant="2002-06-19T17:03:44.022Z">');
111 define(
"SAMLP_REQUEST_CLOSE",
'</samlp:Request>');
116 define(
"SAML_ASSERTION_ARTIFACT",
'<samlp:AssertionArtifact>');
121 define(
"SAML_ASSERTION_ARTIFACT_CLOSE",
'</samlp:AssertionArtifact>');
126 define(
"SAML_SOAP_BODY_CLOSE",
'</SOAP-ENV:Body>');
131 define(
"SAML_SOAP_ENV_CLOSE",
'</SOAP-ENV:Envelope>');
136 define(
"SAML_ATTRIBUTES",
'SAMLATTRIBS');
149 define(
"CAS_PGT_STORAGE_FILE_DEFAULT_PATH",
'/tmp');
153 define(
"CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",
'plain');
157 define(
"CAS_PGT_STORAGE_FILE_FORMAT_XML",
'xml');
168 define(
"CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",
'mysql');
172 define(
"CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",
'localhost');
176 define(
"CAS_PGT_STORAGE_DB_DEFAULT_PORT",
'');
180 define(
"CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",
'phpCAS');
184 define(
"CAS_PGT_STORAGE_DB_DEFAULT_TABLE",
'pgt');
198 define(
"PHPCAS_SERVICE_OK", 0);
203 define(
"PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE", 1);
208 define(
"PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE", 2);
213 define(
"PHPCAS_SERVICE_PT_FAILURE", 3);
217 define(
"PHPCAS_SERVICE_NOT AVAILABLE", 4);
228 define(
"PHPCAS_LANG_ENGLISH",
'english');
229 define(
"PHPCAS_LANG_FRENCH",
'french');
230 define(
"PHPCAS_LANG_GREEK",
'greek');
231 define(
"PHPCAS_LANG_GERMAN",
'german');
232 define(
"PHPCAS_LANG_JAPANESE",
'japanese');
233 define(
"PHPCAS_LANG_SPANISH",
'spanish');
234 define(
"PHPCAS_LANG_CATALAN",
'catalan');
260 define(
'DEFAULT_DEBUG_DIR',
'/tmp/');
323 include_once (dirname(__FILE__) .
'/CAS/client.php');
366 function client($server_version, $server_hostname, $server_port, $server_uri, $start_session =
true) {
370 if (is_object($PHPCAS_CLIENT)) {
371 phpCAS :: error($PHPCAS_INIT_CALL[
'method'] .
'() has already been called (at ' . $PHPCAS_INIT_CALL[
'file'] .
':' . $PHPCAS_INIT_CALL[
'line'] .
')');
373 if (gettype($server_version) !=
'string') {
374 phpCAS :: error(
'type mismatched for parameter $server_version (should be `string\')');
376 if (gettype($server_hostname) !=
'string') {
377 phpCAS :: error(
'type mismatched for parameter $server_hostname (should be `string\')');
379 if (gettype($server_port) !=
'integer') {
380 phpCAS :: error(
'type mismatched for parameter $server_port (should be `integer\')');
382 if (gettype($server_uri) !=
'string') {
383 phpCAS :: error(
'type mismatched for parameter $server_uri (should be `string\')');
388 $PHPCAS_INIT_CALL = array (
390 'file' => $dbg[0][
'file'],
391 'line' => $dbg[0][
'line'],
392 'method' => __CLASS__ .
'::' . __FUNCTION__
396 $PHPCAS_CLIENT =
new CASClient($server_version, FALSE
397 , $server_hostname, $server_port, $server_uri, $start_session);
415 function proxy($server_version, $server_hostname, $server_port, $server_uri, $start_session =
true) {
419 if (is_object($PHPCAS_CLIENT)) {
420 phpCAS :: error($PHPCAS_INIT_CALL[
'method'] .
'() has already been called (at ' . $PHPCAS_INIT_CALL[
'file'] .
':' . $PHPCAS_INIT_CALL[
'line'] .
')');
422 if (gettype($server_version) !=
'string') {
423 phpCAS :: error(
'type mismatched for parameter $server_version (should be `string\')');
425 if (gettype($server_hostname) !=
'string') {
426 phpCAS :: error(
'type mismatched for parameter $server_hostname (should be `string\')');
428 if (gettype($server_port) !=
'integer') {
429 phpCAS :: error(
'type mismatched for parameter $server_port (should be `integer\')');
431 if (gettype($server_uri) !=
'string') {
432 phpCAS :: error(
'type mismatched for parameter $server_uri (should be `string\')');
437 $PHPCAS_INIT_CALL = array (
439 'file' => $dbg[0][
'file'],
440 'line' => $dbg[0][
'line'],
441 'method' => __CLASS__ .
'::' . __FUNCTION__
445 $PHPCAS_CLIENT =
new CASClient($server_version, TRUE
446 , $server_hostname, $server_port, $server_uri, $start_session);
469 phpCAS :: error(
'type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
473 if (preg_match(
'/^Win.*/', getenv(
'OS'))) {
474 if (isset ($_ENV[
'TMP'])) {
475 $debugDir = $_ENV[
'TMP'] .
'/';
477 if (isset ($_ENV[
'TEMP'])) {
478 $debugDir = $_ENV[
'TEMP'] .
'/';
488 if (empty ($PHPCAS_DEBUG[
'unique_id'])) {
489 $PHPCAS_DEBUG[
'unique_id'] = substr(strtoupper(md5(uniqid(
''))), 0, 4);
508 if (function_exists(
'debug_backtrace')) {
509 return debug_backtrace();
527 if ($PHPCAS_DEBUG[
'filename']) {
528 for ($i = 0; $i < $PHPCAS_DEBUG[
'indent']; $i++) {
531 error_log($PHPCAS_DEBUG[
'unique_id'] .
' ' . $indent_str . $str .
"\n", 3, $PHPCAS_DEBUG[
'filename']);
549 if (is_array($dbg)) {
550 for ($i = 1; $i <
sizeof($dbg); $i++) {
551 if (is_array($dbg[$i])) {
552 if ($dbg[$i][
'class'] == __CLASS__) {
553 $function = $dbg[$i][
'function'];
554 $file = $dbg[$i][
'file'];
555 $line = $dbg[$i][
'line'];
560 echo
"<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>" . __CLASS__ .
"::" . $function .
'(): ' . htmlentities($msg) .
"</b></font> in <b>" .
$file .
"</b> on line <b>" . $line .
"</b><br />\n";
571 phpCAS :: log($str .
' [' . basename($dbg[1][
'file']) .
':' . $dbg[1][
'line'] .
']');
582 if (!empty ($dbg[2][
'class'])) {
583 $str .= $dbg[2][
'class'] .
'::';
585 $str .= $dbg[2][
'function'] .
'(';
586 if (is_array($dbg[2][
'args'])) {
587 foreach ($dbg[2][
'args'] as $index =>
$arg) {
591 $str .= str_replace(
"\n",
"", var_export(
$arg, TRUE));
594 $str .=
') [' . basename($dbg[2][
'file']) .
':' . $dbg[2][
'line'] .
']';
596 $PHPCAS_DEBUG[
'indent']++;
607 $PHPCAS_DEBUG[
'indent']--;
610 $str .=
'<= ' . str_replace(
"\n",
"", var_export(
$res, TRUE));
621 while ($PHPCAS_DEBUG[
'indent'] > 0) {
623 $PHPCAS_DEBUG[
'indent']--;
646 if (!is_object($PHPCAS_CLIENT)) {
647 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
649 if (gettype(
$lang) !=
'string') {
650 phpCAS :: error(
'type mismatched for parameter $lang (should be `string\')');
652 $PHPCAS_CLIENT->setLang(
$lang);
689 if (!is_object($PHPCAS_CLIENT)) {
690 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
692 if (gettype($header) !=
'string') {
693 phpCAS :: error(
'type mismatched for parameter $header (should be `string\')');
695 $PHPCAS_CLIENT->setHTMLHeader($header);
705 if (!is_object($PHPCAS_CLIENT)) {
706 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
708 if (gettype($footer) !=
'string') {
709 phpCAS :: error(
'type mismatched for parameter $footer (should be `string\')');
711 $PHPCAS_CLIENT->setHTMLFooter($footer);
734 if (!is_object($PHPCAS_CLIENT)) {
735 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
737 if (!$PHPCAS_CLIENT->isProxy()) {
738 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
740 if ($PHPCAS_AUTH_CHECK_CALL[
'done']) {
741 phpCAS :: error(
'this method should only be called before ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() (called at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
')');
743 if (gettype($format) !=
'string') {
744 phpCAS :: error(
'type mismatched for parameter $format (should be `string\')');
746 if (gettype(
$path) !=
'string') {
747 phpCAS :: error(
'type mismatched for parameter $format (should be `string\')');
749 $PHPCAS_CLIENT->setPGTStorageFile($format,
$path);
768 function setPGTStorageDB($user, $password, $database_type =
'', $hostname =
'', $port = 0, $database =
'', $table =
'') {
772 if (!is_object($PHPCAS_CLIENT)) {
773 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
775 if (!$PHPCAS_CLIENT->isProxy()) {
776 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
778 if ($PHPCAS_AUTH_CHECK_CALL[
'done']) {
779 phpCAS :: error(
'this method should only be called before ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() (called at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
')');
781 if (gettype($user) !=
'string') {
782 phpCAS :: error(
'type mismatched for parameter $user (should be `string\')');
784 if (gettype($password) !=
'string') {
785 phpCAS :: error(
'type mismatched for parameter $password (should be `string\')');
787 if (gettype($database_type) !=
'string') {
788 phpCAS :: error(
'type mismatched for parameter $database_type (should be `string\')');
790 if (gettype($hostname) !=
'string') {
791 phpCAS :: error(
'type mismatched for parameter $hostname (should be `string\')');
793 if (gettype($port) !=
'integer') {
794 phpCAS :: error(
'type mismatched for parameter $port (should be `integer\')');
796 if (gettype($database) !=
'string') {
797 phpCAS :: error(
'type mismatched for parameter $database (should be `string\')');
799 if (gettype($table) !=
'string') {
800 phpCAS :: error(
'type mismatched for parameter $table (should be `string\')');
802 $PHPCAS_CLIENT->setPGTStorageDB($user, $password, $database_type, $hostname, $port, $database, $table);
832 if (!is_object($PHPCAS_CLIENT)) {
833 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
835 if (!$PHPCAS_CLIENT->isProxy()) {
836 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
838 if (!$PHPCAS_AUTH_CHECK_CALL[
'done']) {
839 phpCAS :: error(
'this method should only be called after the programmer is sure the user has been authenticated (by calling ' . __CLASS__ .
'::checkAuthentication() or ' . __CLASS__ .
'::forceAuthentication()');
841 if (!$PHPCAS_AUTH_CHECK_CALL[
'result']) {
842 phpCAS :: error(
'authentication was checked (by ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
') but the method returned FALSE');
844 if (gettype($url) !=
'string') {
845 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
848 $res = $PHPCAS_CLIENT->serviceWeb($url, $err_code, $output);
871 function serviceMail($url, $service, $flags, & $err_code, & $err_msg, & $pt) {
875 if (!is_object($PHPCAS_CLIENT)) {
876 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
878 if (!$PHPCAS_CLIENT->isProxy()) {
879 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
881 if (!$PHPCAS_AUTH_CHECK_CALL[
'done']) {
882 phpCAS :: error(
'this method should only be called after the programmer is sure the user has been authenticated (by calling ' . __CLASS__ .
'::checkAuthentication() or ' . __CLASS__ .
'::forceAuthentication()');
884 if (!$PHPCAS_AUTH_CHECK_CALL[
'result']) {
885 phpCAS :: error(
'authentication was checked (by ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
') but the method returned FALSE');
887 if (gettype($url) !=
'string') {
888 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
891 if (gettype($flags) !=
'integer') {
892 phpCAS :: error(
'type mismatched for parameter $flags (should be `integer\')');
895 $res = $PHPCAS_CLIENT->serviceMail($url, $service, $flags, $err_code, $err_msg, $pt);
920 if (!is_object($PHPCAS_CLIENT)) {
921 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
923 if (gettype($n) !=
'integer') {
924 phpCAS :: error(
'type mismatched for parameter $header (should be `string\')');
926 $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
937 if (!is_object($PHPCAS_CLIENT)) {
938 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
941 $auth = $PHPCAS_CLIENT->checkAuthentication();
945 $PHPCAS_AUTH_CHECK_CALL = array (
947 'file' => $dbg[0][
'file'],
948 'line' => $dbg[0][
'line'],
949 'method' => __CLASS__ .
'::' . __FUNCTION__,
965 if (!is_object($PHPCAS_CLIENT)) {
966 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
969 $auth = $PHPCAS_CLIENT->forceAuthentication();
973 $PHPCAS_AUTH_CHECK_CALL = array (
975 'file' => $dbg[0][
'file'],
976 'line' => $dbg[0][
'line'],
977 'method' => __CLASS__ .
'::' . __FUNCTION__,
982 phpCAS :: trace(
'user is not authenticated, redirecting to the CAS server');
983 $PHPCAS_CLIENT->forceAuthentication();
988 phpCAS :: traceEnd();
995 function renewAuthentication() {
996 global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
998 phpCAS :: traceBegin();
999 if (!is_object($PHPCAS_CLIENT)) {
1000 phpCAS :: error('this method should not be called before
' . __CLASS__ . '::client() or ' . __CLASS__ . '::
proxy()');
1005 $PHPCAS_AUTH_CHECK_CALL = array (
1007 'file' => $dbg[0]['file'],
1008 'line' => $dbg[0]['line'],
1009 'method' => __CLASS__ . '::' . __FUNCTION__,
1021 phpCAS :: error(
'this method is deprecated. You should use ' . __CLASS__ .
'::forceAuthentication() instead');
1034 if (!is_object($PHPCAS_CLIENT)) {
1035 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1039 $auth = $PHPCAS_CLIENT->isAuthenticated();
1043 $PHPCAS_AUTH_CHECK_CALL = array (
1045 'file' => $dbg[0][
'file'],
1046 'line' => $dbg[0][
'line'],
1047 'method' => __CLASS__ .
'::' . __FUNCTION__,
1062 if (!is_object($PHPCAS_CLIENT)) {
1063 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1065 return ($PHPCAS_CLIENT->isSessionAuthenticated());
1077 if (!is_object($PHPCAS_CLIENT)) {
1078 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1080 if (!$PHPCAS_AUTH_CHECK_CALL[
'done']) {
1081 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::forceAuthentication() or ' . __CLASS__ .
'::isAuthenticated()');
1083 if (!$PHPCAS_AUTH_CHECK_CALL[
'result']) {
1084 phpCAS :: error(
'authentication was checked (by ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
') but the method returned FALSE');
1086 return $PHPCAS_CLIENT->getUser();
1098 if (!is_object($PHPCAS_CLIENT)) {
1099 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1101 if (!$PHPCAS_AUTH_CHECK_CALL[
'done']) {
1102 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::forceAuthentication() or ' . __CLASS__ .
'::isAuthenticated()');
1104 if (!$PHPCAS_AUTH_CHECK_CALL[
'result']) {
1105 phpCAS :: error(
'authentication was checked (by ' . $PHPCAS_AUTH_CHECK_CALL[
'method'] .
'() at ' . $PHPCAS_AUTH_CHECK_CALL[
'file'] .
':' . $PHPCAS_AUTH_CHECK_CALL[
'line'] .
') but the method returned FALSE');
1107 return $PHPCAS_CLIENT->getAttributes();
1114 if (!is_object($PHPCAS_CLIENT)) {
1115 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1117 return ($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
1128 if (!is_object($PHPCAS_CLIENT)) {
1129 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1131 return $PHPCAS_CLIENT->getServerLoginURL();
1142 if (!is_object($PHPCAS_CLIENT)) {
1144 ' . __CLASS__ .
'::client()');
1146 if (gettype($url) !=
'string') {
1150 $PHPCAS_CLIENT->setServerLoginURL($url);
1163 if (!is_object($PHPCAS_CLIENT)) {
1165 ' . __CLASS__ .
'::client()');
1167 if (gettype($url) !=
'string') {
1171 $PHPCAS_CLIENT->setServerServiceValidateURL($url);
1184 if (!is_object($PHPCAS_CLIENT)) {
1186 ' . __CLASS__ .
'::client()');
1188 if (gettype($url) !=
'string') {
1192 $PHPCAS_CLIENT->setServerProxyValidateURL($url);
1204 if (!is_object($PHPCAS_CLIENT)) {
1206 ' . __CLASS__ .
'::client()');
1208 if (gettype($url) !=
'string') {
1212 $PHPCAS_CLIENT->setServerSamlValidateURL($url);
1224 if (!is_object($PHPCAS_CLIENT)) {
1225 phpCAS :: error(
'this method should not be called before ' . __CLASS__ .
'::client() or ' . __CLASS__ .
'::proxy()');
1227 return $PHPCAS_CLIENT->getServerLogoutURL();
1238 if (!is_object($PHPCAS_CLIENT)) {
1240 ' . __CLASS__ .
'::client()');
1242 if (gettype($url) !=
'string') {
1246 $PHPCAS_CLIENT->setServerLogoutURL($url);
1258 if (!is_object($PHPCAS_CLIENT)) {
1259 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1261 $parsedParams = array ();
1262 if ($params !=
"") {
1263 if (is_string($params)) {
1264 phpCAS :: error(
'method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
1266 if (!is_array($params)) {
1267 phpCAS :: error(
'type mismatched for parameter $params (should be `array\')');
1269 foreach ($params as $key => $value) {
1270 if ($key !=
"service" && $key !=
"url") {
1271 phpCAS :: error(
'only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
1273 $parsedParams[$key] = $value;
1276 $PHPCAS_CLIENT->logout($parsedParams);
1288 if (!is_object($PHPCAS_CLIENT)) {
1289 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1291 if (!is_string($service)) {
1292 phpCAS :: error(
'type mismatched for parameter $service (should be `string\')');
1294 $PHPCAS_CLIENT->logout(array (
1295 "service" => $service
1308 if (!is_object($PHPCAS_CLIENT)) {
1309 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1311 if (!is_string($url)) {
1312 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
1314 $PHPCAS_CLIENT->logout(array (
1329 if (!is_object($PHPCAS_CLIENT)) {
1330 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1332 if (!is_string($service)) {
1333 phpCAS :: error(
'type mismatched for parameter $service (should be `string\')');
1335 if (!is_string($url)) {
1336 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
1338 $PHPCAS_CLIENT->logout(array (
1339 "service" => $service,
1355 if (!is_object($PHPCAS_CLIENT)) {
1356 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
1358 if (!$PHPCAS_CLIENT->isProxy()) {
1359 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
1361 if (gettype($url) !=
'string') {
1362 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
1364 $PHPCAS_CLIENT->setCallbackURL($url);
1377 if (!is_object($PHPCAS_CLIENT)) {
1378 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
1380 if (gettype($url) !=
'string') {
1381 phpCAS :: error(
'type mismatched for parameter $url (should be `string\')');
1383 $PHPCAS_CLIENT->setURL($url);
1392 if (!is_object($PHPCAS_CLIENT)) {
1393 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
1395 return ($PHPCAS_CLIENT->getURL());
1403 if (!is_object($PHPCAS_CLIENT)) {
1404 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::proxy()');
1406 if (gettype($target_service) !=
'string') {
1407 phpCAS :: error(
'type mismatched for parameter $target_service(should be `string\')');
1409 return ($PHPCAS_CLIENT->retrievePT($target_service, $err_code, $err_msg));
1420 if (!is_object($PHPCAS_CLIENT)) {
1421 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1423 if (gettype($cert) !=
'string') {
1424 phpCAS :: error(
'type mismatched for parameter $cert (should be `string\')');
1426 $PHPCAS_CLIENT->setCasServerCert($cert);
1438 if (!is_object($PHPCAS_CLIENT)) {
1439 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1441 if (gettype($cert) !=
'string') {
1442 phpCAS :: error(
'type mismatched for parameter $cert (should be `string\')');
1444 $PHPCAS_CLIENT->setCasServerCACert($cert);
1454 if (!is_object($PHPCAS_CLIENT)) {
1455 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1457 $PHPCAS_CLIENT->setNoCasServerValidation();
1472 if (!is_object($PHPCAS_CLIENT)) {
1473 phpCAS :: error(
'this method should only be called after ' . __CLASS__ .
'::client() or' . __CLASS__ .
'::proxy()');
1475 $PHPCAS_CLIENT->setExtraCurlOption($key, $value);