📄 cas.php
字号:
<?php// commented in 0.4.22-RC2 for Sylvain Derosiaux// error_reporting(E_ALL ^ E_NOTICE);//// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS//if (!isset($_SERVER['REQUEST_URI'])) { $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];}//// another one by Vangelis Haniotakis also to make phpCAS work with PHP5//if (version_compare(PHP_VERSION,'5','>=')) { require_once(dirname(__FILE__).'/domxml-php4-php5.php');}/** * @file CAS/CAS.php * Interface class of the phpCAS library * * @ingroup public */// ########################################################################// CONSTANTS// ########################################################################// ------------------------------------------------------------------------// CAS VERSIONS// ------------------------------------------------------------------------/** * phpCAS version. accessible for the user by phpCAS::getVersion(). */define('PHPCAS_VERSION','0.5.1-1');// ------------------------------------------------------------------------// CAS VERSIONS// ------------------------------------------------------------------------/** * @addtogroup public * @{ *//** * CAS version 1.0 */define("CAS_VERSION_1_0",'1.0');/*! * CAS version 2.0 */define("CAS_VERSION_2_0",'2.0');/** @} *//** * @addtogroup publicPGTStorage * @{ */// ------------------------------------------------------------------------// FILE PGT STORAGE// ------------------------------------------------------------------------/** * Default path used when storing PGT's to file */define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');/** * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files */define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');/** * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files */define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');/** * Default format used when storing PGT's to file */define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);// ------------------------------------------------------------------------// DATABASE PGT STORAGE// ------------------------------------------------------------------------/** * default database type when storing PGT's to database */define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');/** * default host when storing PGT's to database */define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');/** * default port when storing PGT's to database */define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');/** * default database when storing PGT's to database */define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');/** * default table when storing PGT's to database */define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');/** @} */// ------------------------------------------------------------------------// SERVICE ACCESS ERRORS// ------------------------------------------------------------------------/** * @addtogroup publicServices * @{ *//** * phpCAS::service() error code on success */define("PHPCAS_SERVICE_OK",0);/** * phpCAS::service() error code when the PT could not retrieve because * the CAS server did not respond. */define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);/** * phpCAS::service() error code when the PT could not retrieve because * the response of the CAS server was ill-formed. */define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);/** * phpCAS::service() error code when the PT could not retrieve because * the CAS server did not want to. */define("PHPCAS_SERVICE_PT_FAILURE",3);/** * phpCAS::service() error code when the service was not available. */define("PHPCAS_SERVICE_NOT AVAILABLE",4);/** @} */// ------------------------------------------------------------------------// LANGUAGES// ------------------------------------------------------------------------/** * @addtogroup publicLang * @{ */define("PHPCAS_LANG_ENGLISH", 'english');define("PHPCAS_LANG_FRENCH", 'french');define("PHPCAS_LANG_GREEK", 'greek');define("PHPCAS_LANG_GERMAN", 'german');define("PHPCAS_LANG_JAPANESE", 'japanese');/** @} *//** * @addtogroup internalLang * @{ *//** * phpCAS default language (when phpCAS::setLang() is not used) */define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);/** @} */// ------------------------------------------------------------------------// MISC// ------------------------------------------------------------------------/** * @addtogroup internalMisc * @{ *//** * This global variable is used by the interface class phpCAS. * * @hideinitializer */$PHPCAS_CLIENT = null;/** * This global variable is used to store where the initializer is called from * (to print a comprehensive error in case of multiple calls). * * @hideinitializer */$PHPCAS_INIT_CALL = array('done' => FALSE, 'file' => '?', 'line' => -1, 'method' => '?');/** * This global variable is used to store where the method checking * the authentication is called from (to print comprehensive errors) * * @hideinitializer */$PHPCAS_AUTH_CHECK_CALL = array('done' => FALSE, 'file' => '?', 'line' => -1, 'method' => '?', 'result' => FALSE);/** * This global variable is used to store phpCAS debug mode. * * @hideinitializer */$PHPCAS_DEBUG = array('filename' => FALSE, 'indent' => 0, 'unique_id' => '');/** @} */// ########################################################################// CLIENT CLASS// ########################################################################// include client classinclude_once(dirname(__FILE__).'/client.php');// ########################################################################// INTERFACE CLASS// ########################################################################/** * @class phpCAS * The phpCAS class is a simple container for the phpCAS library. It provides CAS * authentication for web applications written in PHP. * * @ingroup public * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr> * * \internal All its methods access the same object ($PHPCAS_CLIENT, declared * at the end of CAS/client.php). */class phpCAS{ // ######################################################################## // INITIALIZATION // ######################################################################## /** * @addtogroup publicInit * @{ */ /** * phpCAS client initializer. * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be * called, only once, and before all other methods (except phpCAS::getVersion() * and phpCAS::setDebug()). * * @param $server_version the version of the CAS server * @param $server_hostname the hostname of the CAS server * @param $server_port the port the CAS server is running on * @param $server_uri the URI the CAS server is responding on * @param $start_session Have phpCAS start PHP sessions (default true) * * @return a newly created CASClient object */ function client($server_version, $server_hostname, $server_port, $server_uri, $start_session = true) { global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL; phpCAS::traceBegin(); if ( is_object($PHPCAS_CLIENT) ) { phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')'); } if ( gettype($server_version) != 'string' ) { phpCAS::error('type mismatched for parameter $server_version (should be `string\')'); } if ( gettype($server_hostname) != 'string' ) { phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')'); } if ( gettype($server_port) != 'integer' ) { phpCAS::error('type mismatched for parameter $server_port (should be `integer\')'); } if ( gettype($server_uri) != 'string' ) { phpCAS::error('type mismatched for parameter $server_uri (should be `string\')'); } // store where the initialzer is called from $dbg = phpCAS::backtrace(); $PHPCAS_INIT_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__); // initialize the global object $PHPCAS_CLIENT $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session); phpCAS::traceEnd(); } /** * phpCAS proxy initializer. * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be * called, only once, and before all other methods (except phpCAS::getVersion() * and phpCAS::setDebug()). * * @param $server_version the version of the CAS server * @param $server_hostname the hostname of the CAS server * @param $server_port the port the CAS server is running on * @param $server_uri the URI the CAS server is responding on * @param $start_session Have phpCAS start PHP sessions (default true) * * @return a newly created CASClient object */ function proxy($server_version, $server_hostname, $server_port, $server_uri, $start_session = true) { global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL; phpCAS::traceBegin(); if ( is_object($PHPCAS_CLIENT) ) { phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')'); } if ( gettype($server_version) != 'string' ) { phpCAS::error('type mismatched for parameter $server_version (should be `string\')'); } if ( gettype($server_hostname) != 'string' ) { phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')'); } if ( gettype($server_port) != 'integer' ) { phpCAS::error('type mismatched for parameter $server_port (should be `integer\')'); } if ( gettype($server_uri) != 'string' ) { phpCAS::error('type mismatched for parameter $server_uri (should be `string\')'); } // store where the initialzer is called from $dbg = phpCAS::backtrace(); $PHPCAS_INIT_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__); // initialize the global object $PHPCAS_CLIENT $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session); phpCAS::traceEnd(); } /** @} */ // ######################################################################## // DEBUGGING // ######################################################################## /** * @addtogroup publicDebug * @{ */ /** * Set/unset debug mode * * @param $filename the name of the file used for logging, or FALSE to stop debugging. */ function setDebug($filename='') { global $PHPCAS_DEBUG; if ( $filename != FALSE && gettype($filename) != 'string' ) { phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)'); } if ( empty($filename) ) { if ( preg_match('/^Win.*/',getenv('OS')) ) { if ( isset($_ENV['TMP']) ) { $debugDir = $_ENV['TMP'].'/'; } else if ( isset($_ENV['TEMP']) ) { $debugDir = $_ENV['TEMP'].'/'; } else { $debugDir = ''; } } else { $debugDir = '/tmp/'; } $filename = $debugDir . 'phpCAS.log'; } if ( empty($PHPCAS_DEBUG['unique_id']) ) { $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4); } $PHPCAS_DEBUG['filename'] = $filename; phpCAS::trace('START ******************'); } /** @} */ /** * @addtogroup internalDebug * @{ */ /** * This method is a wrapper for debug_backtrace() that is not available * in all PHP versions (>= 4.3.0 only) */ function backtrace() { if ( function_exists('debug_backtrace') ) { return debug_backtrace(); } else { // poor man's hack ... but it does work ... return array(); } } /** * Logs a string in debug mode. * * @param $str the string to write * * @private */ function log($str) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -