📄 cas.php
字号:
$indent_str = "."; global $PHPCAS_DEBUG; if ( $PHPCAS_DEBUG['filename'] ) { for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) { $indent_str .= '| '; } error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']); } } /** * This method is used by interface methods to print an error and where the function * was originally called from. * * @param $msg the message to print * * @private */ function error($msg) { $dbg = phpCAS::backtrace(); $function = '?'; $file = '?'; $line = '?'; if ( is_array($dbg) ) { for ( $i=1; $i<sizeof($dbg); $i++) { if ( is_array($dbg[$i]) ) { if ( $dbg[$i]['class'] == __CLASS__ ) { $function = $dbg[$i]['function']; $file = $dbg[$i]['file']; $line = $dbg[$i]['line']; } } } } 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"; phpCAS::trace($msg); phpCAS::traceExit(); exit(); } /** * This method is used to log something in debug mode. */ function trace($str) { $dbg = phpCAS::backtrace(); phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']'); } /** * This method is used to indicate the start of the execution of a function in debug mode. */ function traceBegin() { global $PHPCAS_DEBUG; $dbg = phpCAS::backtrace(); $str = '=> '; if ( !empty($dbg[2]['class']) ) { $str .= $dbg[2]['class'].'::'; } $str .= $dbg[2]['function'].'('; if ( is_array($dbg[2]['args']) ) { foreach ($dbg[2]['args'] as $index => $arg) { if ( $index != 0 ) { $str .= ', '; } $str .= str_replace("\n","",var_export($arg,TRUE)); } } $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']'; phpCAS::log($str); $PHPCAS_DEBUG['indent'] ++; } /** * This method is used to indicate the end of the execution of a function in debug mode. * * @param $res the result of the function */ function traceEnd($res='') { global $PHPCAS_DEBUG; $PHPCAS_DEBUG['indent'] --; $dbg = phpCAS::backtrace(); $str = ''; $str .= '<= '.str_replace("\n","",var_export($res,TRUE)); phpCAS::log($str); } /** * This method is used to indicate the end of the execution of the program */ function traceExit() { global $PHPCAS_DEBUG; phpCAS::log('exit()'); while ( $PHPCAS_DEBUG['indent'] > 0 ) { phpCAS::log('-'); $PHPCAS_DEBUG['indent'] --; } } /** @} */ // ######################################################################## // INTERNATIONALIZATION // ######################################################################## /** * @addtogroup publicLang * @{ */ /** * This method is used to set the language used by phpCAS. * @note Can be called only once. * * @param $lang a string representing the language. * * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH */ function setLang($lang) { global $PHPCAS_CLIENT; if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()'); } if ( gettype($lang) != 'string' ) { phpCAS::error('type mismatched for parameter $lang (should be `string\')'); } $PHPCAS_CLIENT->setLang($lang); } /** @} */ // ######################################################################## // VERSION // ######################################################################## /** * @addtogroup public * @{ */ /** * This method returns the phpCAS version. * * @return the phpCAS version. */ function getVersion() { return PHPCAS_VERSION; } /** @} */ // ######################################################################## // HTML OUTPUT // ######################################################################## /** * @addtogroup publicOutput * @{ */ /** * This method sets the HTML header used for all outputs. * * @param $header the HTML header. */ function setHTMLHeader($header) { global $PHPCAS_CLIENT; if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()'); } if ( gettype($header) != 'string' ) { phpCAS::error('type mismatched for parameter $header (should be `string\')'); } $PHPCAS_CLIENT->setHTMLHeader($header); } /** * This method sets the HTML footer used for all outputs. * * @param $footer the HTML footer. */ function setHTMLFooter($footer) { global $PHPCAS_CLIENT; if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()'); } if ( gettype($footer) != 'string' ) { phpCAS::error('type mismatched for parameter $footer (should be `string\')'); } $PHPCAS_CLIENT->setHTMLFooter($footer); } /** @} */ // ######################################################################## // PGT STORAGE // ######################################################################## /** * @addtogroup publicPGTStorage * @{ */ /** * This method is used to tell phpCAS to store the response of the * CAS server to PGT requests onto the filesystem. * * @param $format the format used to store the PGT's (`plain' and `xml' allowed) * @param $path the path where the PGT's should be stored */ function setPGTStorageFile($format='', $path='') { global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL; phpCAS::traceBegin(); if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_CLIENT->isProxy() ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) { 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'].')'); } if ( gettype($format) != 'string' ) { phpCAS::error('type mismatched for parameter $format (should be `string\')'); } if ( gettype($path) != 'string' ) { phpCAS::error('type mismatched for parameter $format (should be `string\')'); } $PHPCAS_CLIENT->setPGTStorageFile($format,$path); phpCAS::traceEnd(); } /** * This method is used to tell phpCAS to store the response of the * CAS server to PGT requests into a database. * @note The connection to the database is done only when needed. * As a consequence, bad parameters are detected only when * initializing PGT storage, except in debug mode. * * @param $user the user to access the data with * @param $password the user's password * @param $database_type the type of the database hosting the data * @param $hostname the server hosting the database * @param $port the port the server is listening on * @param $database the name of the database * @param $table the name of the table storing the data */ function setPGTStorageDB($user, $password, $database_type='', $hostname='', $port=0, $database='', $table='') { global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL; phpCAS::traceBegin(); if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_CLIENT->isProxy() ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) { 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'].')'); } if ( gettype($user) != 'string' ) { phpCAS::error('type mismatched for parameter $user (should be `string\')'); } if ( gettype($password) != 'string' ) { phpCAS::error('type mismatched for parameter $password (should be `string\')'); } if ( gettype($database_type) != 'string' ) { phpCAS::error('type mismatched for parameter $database_type (should be `string\')'); } if ( gettype($hostname) != 'string' ) { phpCAS::error('type mismatched for parameter $hostname (should be `string\')'); } if ( gettype($port) != 'integer' ) { phpCAS::error('type mismatched for parameter $port (should be `integer\')'); } if ( gettype($database) != 'string' ) { phpCAS::error('type mismatched for parameter $database (should be `string\')'); } if ( gettype($table) != 'string' ) { phpCAS::error('type mismatched for parameter $table (should be `string\')'); } $PHPCAS_CLIENT->setPGTStorageDB($this,$user,$password,$hostname,$port,$database,$table); phpCAS::traceEnd(); } /** @} */ // ######################################################################## // ACCESS TO EXTERNAL SERVICES // ######################################################################## /** * @addtogroup publicServices * @{ */ /** * This method is used to access an HTTP[S] service. * * @param $url the service to access. * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE. * @param $output the output of the service (also used to give an error * message on failure). * * @return TRUE on success, FALSE otherwise (in this later case, $err_code * gives the reason why it failed and $output contains an error message). */ function serviceWeb($url,&$err_code,&$output) { global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL; phpCAS::traceBegin(); if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_CLIENT->isProxy() ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) { 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()'); } if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) { 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'); } if ( gettype($url) != 'string' ) { phpCAS::error('type mismatched for parameter $url (should be `string\')'); } $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output); phpCAS::traceEnd($res); return $res; } /** * This method is used to access an IMAP/POP3/NNTP service. * * @param $url a string giving the URL of the service, including the mailing box * for IMAP URLs, as accepted by imap_open(). * @param $flags options given to imap_open(). * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE. * @param $err_msg an error message on failure * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL * on success, FALSE on error). * * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code * gives the reason why it failed and $err_msg contains an error message). */ function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt) { global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL; phpCAS::traceBegin(); if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_CLIENT->isProxy() ) { phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()'); } if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) { 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()'); } if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) { 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'); } if ( gettype($url) != 'string' ) { phpCAS::error('type mismatched for parameter $url (should be `string\')'); } if ( gettype($flags) != 'integer' ) { phpCAS::error('type mismatched for parameter $flags (should be `integer\')'); } $res = $PHPCAS_CLIENT->serviceMail($url,$flags,$err_code,$err_msg,$pt); phpCAS::traceEnd($res); return $res; } /** @} */ // ######################################################################## // AUTHENTICATION // ######################################################################## /** * @addtogroup publicAuth * @{ */ /** * Set the times authentication will be cached before really accessing the CAS server in gateway mode: * - -1: check only once, and then never again (until you pree login) * - 0: always check * - n: check every "n" time * * @param $n an integer. */ function setCacheTimesForAuthRecheck($n) { global $PHPCAS_CLIENT; if ( !is_object($PHPCAS_CLIENT) ) { phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()'); } if ( gettype($header) != 'integer' ) { phpCAS::error('type mismatched for parameter $header (should be `string\')'); } $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n); } /** * This method is called to check if the user is authenticated (use the gateway feature). * @return TRUE when the user is authenticated; otherwise FALSE. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -