2010-03-03 04:24:50 +00:00
< ? php
2010-08-30 21:53:32 +01:00
/*
* Copyright © 2003 - 2010 , The ESUP - Portail consortium & the JA - SIG Collaborative .
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions are met :
*
* * Redistributions of source code must retain the above copyright notice ,
* this list of conditions and the following disclaimer .
* * Redistributions in binary form must reproduce the above copyright notice ,
* this list of conditions and the following disclaimer in the documentation
* and / or other materials provided with the distribution .
* * Neither the name of the ESUP - Portail consortium & the JA - SIG
* Collaborative nor the names of its contributors may be used to endorse or
* promote products derived from this software without specific prior
* written permission .
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS IS " AND
* ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES
* ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
* LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
2010-03-03 04:24:50 +00:00
//
// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
//
if ( ! $_SERVER [ 'REQUEST_URI' ]) {
2010-08-30 21:53:32 +01:00
$_SERVER [ 'REQUEST_URI' ] = $_SERVER [ 'SCRIPT_NAME' ] . '?' . $_SERVER [ 'QUERY_STRING' ];
2010-03-03 04:24:50 +00:00
}
//
// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
//
2010-08-30 21:53:32 +01:00
if ( version_compare ( PHP_VERSION , '5' , '>=' ) && ! ( function_exists ( 'domxml_new_doc' ))) {
require_once ( dirname ( __FILE__ ) . '/CAS/domxml-php4-to-php5.php' );
2010-03-03 04:24:50 +00:00
}
/**
* @ file CAS / CAS . php
* Interface class of the phpCAS library
*
* @ ingroup public
*/
// ########################################################################
// CONSTANTS
// ########################################################################
// ------------------------------------------------------------------------
// CAS VERSIONS
// ------------------------------------------------------------------------
/**
* phpCAS version . accessible for the user by phpCAS :: getVersion () .
*/
2010-08-30 21:53:32 +01:00
define ( 'PHPCAS_VERSION' , '1.1.2' );
2010-03-03 04:24:50 +00:00
// ------------------------------------------------------------------------
// CAS VERSIONS
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* @ addtogroup public
* @ {
*/
2010-03-03 04:24:50 +00:00
/**
* CAS version 1.0
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_VERSION_1_0 " , '1.0' );
2010-03-03 04:24:50 +00:00
/*!
* CAS version 2.0
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_VERSION_2_0 " , '2.0' );
2010-03-03 04:24:50 +00:00
// ------------------------------------------------------------------------
// SAML defines
// ------------------------------------------------------------------------
/**
* SAML protocol
*/
define ( " SAML_VERSION_1_1 " , 'S1' );
/**
* XML header for SAML POST
*/
define ( " SAML_XML_HEADER " , '<?xml version="1.0" encoding="UTF-8"?>' );
/**
* SOAP envelope for SAML POST
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_SOAP_ENV " , '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>' );
2010-03-03 04:24:50 +00:00
/**
* SOAP body for SAML POST
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_SOAP_BODY " , '<SOAP-ENV:Body>' );
2010-03-03 04:24:50 +00:00
/**
* SAMLP request
*/
2010-08-30 21:53:32 +01:00
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">' );
define ( " SAMLP_REQUEST_CLOSE " , '</samlp:Request>' );
2010-03-03 04:24:50 +00:00
/**
* SAMLP artifact tag ( for the ticket )
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_ASSERTION_ARTIFACT " , '<samlp:AssertionArtifact>' );
2010-03-03 04:24:50 +00:00
/**
* SAMLP close
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_ASSERTION_ARTIFACT_CLOSE " , '</samlp:AssertionArtifact>' );
2010-03-03 04:24:50 +00:00
/**
* SOAP body close
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_SOAP_BODY_CLOSE " , '</SOAP-ENV:Body>' );
2010-03-03 04:24:50 +00:00
/**
* SOAP envelope close
*/
2010-08-30 21:53:32 +01:00
define ( " SAML_SOAP_ENV_CLOSE " , '</SOAP-ENV:Envelope>' );
2010-03-03 04:24:50 +00:00
/**
* SAML Attributes
*/
define ( " SAML_ATTRIBUTES " , 'SAMLATTRIBS' );
/** @} */
2010-08-30 21:53:32 +01:00
/**
* @ addtogroup publicPGTStorage
* @ {
*/
2010-03-03 04:24:50 +00:00
// ------------------------------------------------------------------------
// FILE PGT STORAGE
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* Default path used when storing PGT ' s to file
*/
define ( " CAS_PGT_STORAGE_FILE_DEFAULT_PATH " , '/tmp' );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: setPGTStorageFile () ' s 2 nd parameter to write plain text files
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_FILE_FORMAT_PLAIN " , 'plain' );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: setPGTStorageFile () ' s 2 nd parameter to write xml files
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_FILE_FORMAT_XML " , 'xml' );
2010-03-03 04:24:50 +00:00
/**
* Default format used when storing PGT ' s to file
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT " , CAS_PGT_STORAGE_FILE_FORMAT_PLAIN );
2010-03-03 04:24:50 +00:00
// ------------------------------------------------------------------------
// DATABASE PGT STORAGE
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* default database type when storing PGT ' s to database
*/
define ( " CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE " , 'mysql' );
2010-03-03 04:24:50 +00:00
/**
* default host when storing PGT ' s to database
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME " , 'localhost' );
2010-03-03 04:24:50 +00:00
/**
* default port when storing PGT ' s to database
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_DB_DEFAULT_PORT " , '' );
2010-03-03 04:24:50 +00:00
/**
* default database when storing PGT ' s to database
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_DB_DEFAULT_DATABASE " , 'phpCAS' );
2010-03-03 04:24:50 +00:00
/**
* default table when storing PGT ' s to database
*/
2010-08-30 21:53:32 +01:00
define ( " CAS_PGT_STORAGE_DB_DEFAULT_TABLE " , 'pgt' );
2010-03-03 04:24:50 +00:00
/** @} */
// ------------------------------------------------------------------------
// SERVICE ACCESS ERRORS
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* @ addtogroup publicServices
* @ {
*/
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: service () error code on success
*/
2010-08-30 21:53:32 +01:00
define ( " PHPCAS_SERVICE_OK " , 0 );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: service () error code when the PT could not retrieve because
* the CAS server did not respond .
*/
2010-08-30 21:53:32 +01:00
define ( " PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE " , 1 );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: service () error code when the PT could not retrieve because
* the response of the CAS server was ill - formed .
*/
2010-08-30 21:53:32 +01:00
define ( " PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE " , 2 );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: service () error code when the PT could not retrieve because
* the CAS server did not want to .
*/
2010-08-30 21:53:32 +01:00
define ( " PHPCAS_SERVICE_PT_FAILURE " , 3 );
2010-03-03 04:24:50 +00:00
/**
* phpCAS :: service () error code when the service was not available .
*/
2010-08-30 21:53:32 +01:00
define ( " PHPCAS_SERVICE_NOT AVAILABLE " , 4 );
2010-03-03 04:24:50 +00:00
/** @} */
// ------------------------------------------------------------------------
// LANGUAGES
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* @ 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' );
define ( " PHPCAS_LANG_SPANISH " , 'spanish' );
define ( " PHPCAS_LANG_CATALAN " , 'catalan' );
2010-03-03 04:24:50 +00:00
/** @} */
/**
* @ addtogroup internalLang
* @ {
*/
/**
* phpCAS default language ( when phpCAS :: setLang () is not used )
*/
define ( " PHPCAS_LANG_DEFAULT " , PHPCAS_LANG_ENGLISH );
/** @} */
// ------------------------------------------------------------------------
// DEBUG
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* @ addtogroup publicDebug
* @ {
*/
2010-03-03 04:24:50 +00:00
/**
* The default directory for the debug file under Unix .
*/
2010-08-30 21:53:32 +01:00
define ( 'DEFAULT_DEBUG_DIR' , '/tmp/' );
2010-03-03 04:24:50 +00:00
/** @} */
// ------------------------------------------------------------------------
// MISC
// ------------------------------------------------------------------------
2010-08-30 21:53:32 +01:00
/**
* @ addtogroup internalMisc
* @ {
*/
2010-03-03 04:24:50 +00:00
/**
* This global variable is used by the interface class phpCAS .
*
* @ hideinitializer
*/
2010-08-30 21:53:32 +01:00
$GLOBALS [ 'PHPCAS_CLIENT' ] = null ;
2010-03-03 04:24:50 +00:00
/**
* This global variable is used to store where the initializer is called from
* ( to print a comprehensive error in case of multiple calls ) .
*
* @ hideinitializer
*/
2010-08-30 21:53:32 +01:00
$GLOBALS [ 'PHPCAS_INIT_CALL' ] = array (
'done' => FALSE ,
2010-03-03 04:24:50 +00:00
'file' => '?' ,
'line' => - 1 ,
2010-08-30 21:53:32 +01:00
'method' => '?'
);
2010-03-03 04:24:50 +00:00
/**
* This global variable is used to store where the method checking
* the authentication is called from ( to print comprehensive errors )
*
* @ hideinitializer
*/
2010-08-30 21:53:32 +01:00
$GLOBALS [ 'PHPCAS_AUTH_CHECK_CALL' ] = array (
'done' => FALSE ,
2010-03-03 04:24:50 +00:00
'file' => '?' ,
'line' => - 1 ,
'method' => '?' ,
2010-08-30 21:53:32 +01:00
'result' => FALSE
);
2010-03-03 04:24:50 +00:00
/**
* This global variable is used to store phpCAS debug mode .
*
* @ hideinitializer
*/
2010-08-30 21:53:32 +01:00
$GLOBALS [ 'PHPCAS_DEBUG' ] = array (
'filename' => FALSE ,
2010-03-03 04:24:50 +00:00
'indent' => 0 ,
2010-08-30 21:53:32 +01:00
'unique_id' => ''
);
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// CLIENT CLASS
// ########################################################################
// include client class
2010-08-30 21:53:32 +01:00
include_once ( dirname ( __FILE__ ) . '/CAS/client.php' );
2010-03-03 04:24:50 +00:00
// ########################################################################
// 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 ) .
*/
2010-08-30 21:53:32 +01:00
class phpCAS {
2010-03-03 04:24:50 +00:00
// ########################################################################
// INITIALIZATION
// ########################################################################
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* @ addtogroup publicInit
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
function client ( $server_version , $server_hostname , $server_port , $server_uri , $start_session = true ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_INIT_CALL ;
2010-08-30 21:53:32 +01:00
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' ] . ')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_version ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_version (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_hostname ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_hostname (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_port ) != 'integer' ) {
phpCAS :: error ( 'type mismatched for parameter $server_port (should be `integer\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_uri ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_uri (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the initializer is called from
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_INIT_CALL = array (
'done' => TRUE ,
2010-03-03 04:24:50 +00:00
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
2010-08-30 21:53:32 +01:00
'method' => __CLASS__ . '::' . __FUNCTION__
);
2010-03-03 04:24:50 +00:00
// initialize the global object $PHPCAS_CLIENT
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT = new CASClient ( $server_version , FALSE /*proxy*/
, $server_hostname , $server_port , $server_uri , $start_session );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
function proxy ( $server_version , $server_hostname , $server_port , $server_uri , $start_session = true ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_INIT_CALL ;
2010-08-30 21:53:32 +01:00
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' ] . ')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_version ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_version (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_hostname ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_hostname (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_port ) != 'integer' ) {
phpCAS :: error ( 'type mismatched for parameter $server_port (should be `integer\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $server_uri ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $server_uri (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the initialzer is called from
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_INIT_CALL = array (
'done' => TRUE ,
2010-03-03 04:24:50 +00:00
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
2010-08-30 21:53:32 +01:00
'method' => __CLASS__ . '::' . __FUNCTION__
);
2010-03-03 04:24:50 +00:00
// initialize the global object $PHPCAS_CLIENT
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT = new CASClient ( $server_version , TRUE /*proxy*/
, $server_hostname , $server_port , $server_uri , $start_session );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// DEBUGGING
// ########################################################################
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* @ addtogroup publicDebug
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* Set / unset debug mode
*
* @ param $filename the name of the file used for logging , or FALSE to stop debugging .
*/
2010-08-30 21:53:32 +01:00
function setDebug ( $filename = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_DEBUG ;
2010-08-30 21:53:32 +01:00
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 = '' ;
}
2010-03-03 04:24:50 +00:00
} else {
$debugDir = DEFAULT_DEBUG_DIR ;
}
$filename = $debugDir . 'phpCAS.log' ;
}
2010-08-30 21:53:32 +01:00
if ( empty ( $PHPCAS_DEBUG [ 'unique_id' ])) {
$PHPCAS_DEBUG [ 'unique_id' ] = substr ( strtoupper ( md5 ( uniqid ( '' ))), 0 , 4 );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
$PHPCAS_DEBUG [ 'filename' ] = $filename ;
2010-08-30 21:53:32 +01:00
phpCAS :: trace ( 'START phpCAS-' . PHPCAS_VERSION . ' ******************' );
}
2010-03-03 04:24:50 +00:00
/** @} */
/**
* @ addtogroup internalDebug
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method is a wrapper for debug_backtrace () that is not available
* in all PHP versions ( >= 4.3 . 0 only )
*/
2010-08-30 21:53:32 +01:00
function backtrace () {
if ( function_exists ( 'debug_backtrace' )) {
2010-03-03 04:24:50 +00:00
return debug_backtrace ();
} else {
// poor man's hack ... but it does work ...
2010-08-30 21:53:32 +01:00
return array ();
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* Logs a string in debug mode .
*
* @ param $str the string to write
*
* @ private
*/
2010-08-30 21:53:32 +01:00
function log ( $str ) {
2010-03-03 04:24:50 +00:00
$indent_str = " . " ;
global $PHPCAS_DEBUG ;
2010-08-30 21:53:32 +01:00
if ( $PHPCAS_DEBUG [ 'filename' ]) {
for ( $i = 0 ; $i < $PHPCAS_DEBUG [ 'indent' ]; $i ++ ) {
2010-03-03 04:24:50 +00:00
$indent_str .= '| ' ;
}
2010-08-30 21:53:32 +01:00
error_log ( $PHPCAS_DEBUG [ 'unique_id' ] . ' ' . $indent_str . $str . " \n " , 3 , $PHPCAS_DEBUG [ 'filename' ]);
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
function error ( $msg ) {
$dbg = phpCAS :: backtrace ();
2010-03-03 04:24:50 +00:00
$function = '?' ;
$file = '?' ;
$line = '?' ;
2010-08-30 21:53:32 +01:00
if ( is_array ( $dbg )) {
for ( $i = 1 ; $i < sizeof ( $dbg ); $i ++ ) {
if ( is_array ( $dbg [ $i ])) {
if ( $dbg [ $i ][ 'class' ] == __CLASS__ ) {
2010-03-03 04:24:50 +00:00
$function = $dbg [ $i ][ 'function' ];
$file = $dbg [ $i ][ 'file' ];
$line = $dbg [ $i ][ 'line' ];
}
}
}
}
2010-08-30 21:53:32 +01:00
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 ();
}
2010-03-03 04:24:50 +00:00
/**
* This method is used to log something in debug mode .
*/
2010-08-30 21:53:32 +01:00
function trace ( $str ) {
$dbg = phpCAS :: backtrace ();
phpCAS :: log ( $str . ' [' . basename ( $dbg [ 1 ][ 'file' ]) . ':' . $dbg [ 1 ][ 'line' ] . ']' );
}
2010-03-03 04:24:50 +00:00
/**
* This method is used to indicate the start of the execution of a function in debug mode .
*/
2010-08-30 21:53:32 +01:00
function traceBegin () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_DEBUG ;
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
2010-03-03 04:24:50 +00:00
$str = '=> ' ;
2010-08-30 21:53:32 +01:00
if ( ! empty ( $dbg [ 2 ][ 'class' ])) {
$str .= $dbg [ 2 ][ 'class' ] . '::' ;
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$str .= $dbg [ 2 ][ 'function' ] . '(' ;
if ( is_array ( $dbg [ 2 ][ 'args' ])) {
2010-03-03 04:24:50 +00:00
foreach ( $dbg [ 2 ][ 'args' ] as $index => $arg ) {
2010-08-30 21:53:32 +01:00
if ( $index != 0 ) {
2010-03-03 04:24:50 +00:00
$str .= ', ' ;
}
2010-08-30 21:53:32 +01:00
$str .= str_replace ( " \n " , " " , var_export ( $arg , TRUE ));
2010-03-03 04:24:50 +00:00
}
}
2010-08-30 21:53:32 +01:00
$str .= ') [' . basename ( $dbg [ 2 ][ 'file' ]) . ':' . $dbg [ 2 ][ 'line' ] . ']' ;
phpCAS :: log ( $str );
$PHPCAS_DEBUG [ 'indent' ] ++ ;
}
2010-03-03 04:24:50 +00:00
/**
* This method is used to indicate the end of the execution of a function in debug mode .
*
* @ param $res the result of the function
*/
2010-08-30 21:53:32 +01:00
function traceEnd ( $res = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_DEBUG ;
2010-08-30 21:53:32 +01:00
$PHPCAS_DEBUG [ 'indent' ] -- ;
$dbg = phpCAS :: backtrace ();
2010-03-03 04:24:50 +00:00
$str = '' ;
2010-08-30 21:53:32 +01:00
$str .= '<= ' . str_replace ( " \n " , " " , var_export ( $res , TRUE ));
phpCAS :: log ( $str );
}
2010-03-03 04:24:50 +00:00
/**
* This method is used to indicate the end of the execution of the program
*/
2010-08-30 21:53:32 +01:00
function traceExit () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_DEBUG ;
2010-08-30 21:53:32 +01:00
phpCAS :: log ( 'exit()' );
while ( $PHPCAS_DEBUG [ 'indent' ] > 0 ) {
phpCAS :: log ( '-' );
$PHPCAS_DEBUG [ 'indent' ] -- ;
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// INTERNATIONALIZATION
// ########################################################################
/**
* @ addtogroup publicLang
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
function setLang ( $lang ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $lang ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $lang (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setLang ( $lang );
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// VERSION
// ########################################################################
/**
* @ addtogroup public
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method returns the phpCAS version .
*
* @ return the phpCAS version .
*/
2010-08-30 21:53:32 +01:00
function getVersion () {
2010-03-03 04:24:50 +00:00
return PHPCAS_VERSION ;
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// HTML OUTPUT
// ########################################################################
/**
* @ addtogroup publicOutput
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method sets the HTML header used for all outputs .
*
* @ param $header the HTML header .
*/
2010-08-30 21:53:32 +01:00
function setHTMLHeader ( $header ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $header ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $header (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setHTMLHeader ( $header );
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* This method sets the HTML footer used for all outputs .
*
* @ param $footer the HTML footer .
*/
2010-08-30 21:53:32 +01:00
function setHTMLFooter ( $footer ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $footer ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $footer (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setHTMLFooter ( $footer );
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// PGT STORAGE
// ########################################################################
/**
* @ addtogroup publicPGTStorage
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
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()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_CLIENT -> isProxy ()) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' ] . ')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $format ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $format (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $path ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $format (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setPGTStorageFile ( $format , $path );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* 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
*/
2010-08-30 21:53:32 +01:00
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()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_CLIENT -> isProxy ()) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' ] . ')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $user ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $user (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $password ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $password (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $database_type ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $database_type (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $hostname ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $hostname (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $port ) != 'integer' ) {
phpCAS :: error ( 'type mismatched for parameter $port (should be `integer\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $database ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $database (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $table ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $table (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setPGTStorageDB ( $user , $password , $database_type , $hostname , $port , $database , $table );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// ACCESS TO EXTERNAL SERVICES
// ########################################################################
/**
* @ addtogroup publicServices
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* 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 ) .
*/
2010-08-30 21:53:32 +01:00
function serviceWeb ( $url , & $err_code , & $output ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_CLIENT -> isProxy ()) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$res = $PHPCAS_CLIENT -> serviceWeb ( $url , $err_code , $output );
phpCAS :: traceEnd ( $res );
2010-03-03 04:24:50 +00:00
return $res ;
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* 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 $service a string giving for CAS retrieve Proxy ticket
* @ 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 ) .
*/
2010-08-30 21:53:32 +01:00
function serviceMail ( $url , $service , $flags , & $err_code , & $err_msg , & $pt ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_CLIENT -> isProxy ()) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $flags ) != 'integer' ) {
phpCAS :: error ( 'type mismatched for parameter $flags (should be `integer\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$res = $PHPCAS_CLIENT -> serviceMail ( $url , $service , $flags , $err_code , $err_msg , $pt );
phpCAS :: traceEnd ( $res );
2010-03-03 04:24:50 +00:00
return $res ;
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/** @} */
// ########################################################################
// AUTHENTICATION
// ########################################################################
/**
* @ addtogroup publicAuth
* @ {
*/
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* 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 .
*/
2010-08-30 21:53:32 +01:00
function setCacheTimesForAuthRecheck ( $n ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $n ) != 'integer' ) {
phpCAS :: error ( 'type mismatched for parameter $header (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setCacheTimesForAuthRecheck ( $n );
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* This method is called to check if the user is authenticated ( use the gateway feature ) .
* @ return TRUE when the user is authenticated ; otherwise FALSE .
*/
2010-08-30 21:53:32 +01:00
function checkAuthentication () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
$auth = $PHPCAS_CLIENT -> checkAuthentication ();
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the authentication has been checked and the result
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_AUTH_CHECK_CALL = array (
'done' => TRUE ,
2010-03-03 04:24:50 +00:00
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
2010-08-30 21:53:32 +01:00
'method' => __CLASS__ . '::' . __FUNCTION__ ,
'result' => $auth
);
phpCAS :: traceEnd ( $auth );
return $auth ;
}
2010-03-03 04:24:50 +00:00
/**
* This method is called to force authentication if the user was not already
* authenticated . If the user is not authenticated , halt by redirecting to
* the CAS server .
*/
2010-08-30 21:53:32 +01:00
function forceAuthentication () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
$auth = $PHPCAS_CLIENT -> forceAuthentication ();
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the authentication has been checked and the result
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_AUTH_CHECK_CALL = array (
'done' => TRUE ,
2010-03-03 04:24:50 +00:00
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
2010-08-30 21:53:32 +01:00
'method' => __CLASS__ . '::' . __FUNCTION__ ,
'result' => $auth
);
if ( ! $auth ) {
phpCAS :: trace ( 'user is not authenticated, redirecting to the CAS server' );
2010-03-03 04:24:50 +00:00
$PHPCAS_CLIENT -> forceAuthentication ();
} else {
2010-08-30 21:53:32 +01:00
phpCAS :: trace ( 'no need to authenticate (user `' . phpCAS :: getUser () . '\' is already authenticated)' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
return $auth ;
}
2010-03-03 04:24:50 +00:00
/**
* This method is called to renew the authentication .
**/
function renewAuthentication () {
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the authentication has been checked and the result
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_AUTH_CHECK_CALL = array (
'done' => TRUE ,
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
'method' => __CLASS__ . '::' . __FUNCTION__ ,
'result' => $auth
);
2010-03-03 04:24:50 +00:00
$PHPCAS_CLIENT -> renewAuthentication ();
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
2010-03-03 04:24:50 +00:00
}
/**
* This method has been left from version 0.4 . 1 for compatibility reasons .
*/
2010-08-30 21:53:32 +01:00
function authenticate () {
phpCAS :: error ( 'this method is deprecated. You should use ' . __CLASS__ . '::forceAuthentication() instead' );
}
2010-03-03 04:24:50 +00:00
/**
* This method is called to check if the user is authenticated ( previously or by
* tickets given in the URL ) .
*
* @ return TRUE when the user is authenticated .
*/
2010-08-30 21:53:32 +01:00
function isAuthenticated () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// call the isAuthenticated method of the global $PHPCAS_CLIENT object
$auth = $PHPCAS_CLIENT -> isAuthenticated ();
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
// store where the authentication has been checked and the result
2010-08-30 21:53:32 +01:00
$dbg = phpCAS :: backtrace ();
$PHPCAS_AUTH_CHECK_CALL = array (
'done' => TRUE ,
2010-03-03 04:24:50 +00:00
'file' => $dbg [ 0 ][ 'file' ],
'line' => $dbg [ 0 ][ 'line' ],
2010-08-30 21:53:32 +01:00
'method' => __CLASS__ . '::' . __FUNCTION__ ,
'result' => $auth
);
phpCAS :: traceEnd ( $auth );
2010-03-03 04:24:50 +00:00
return $auth ;
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* Checks whether authenticated based on $_SESSION . Useful to avoid
* server calls .
* @ return true if authenticated , false otherwise .
* @ since 0.4 . 22 by Brendan Arnold
*/
2010-08-30 21:53:32 +01:00
function isSessionAuthenticated () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
return ( $PHPCAS_CLIENT -> isSessionAuthenticated ());
}
2010-03-03 04:24:50 +00:00
/**
* This method returns the CAS user ' s login name .
* @ warning should not be called only after phpCAS :: forceAuthentication ()
* or phpCAS :: checkAuthentication () .
*
* @ return the login name of the authenticated user
*/
2010-08-30 21:53:32 +01:00
function getUser () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_AUTH_CHECK_CALL [ 'done' ]) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::forceAuthentication() or ' . __CLASS__ . '::isAuthenticated()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' );
2010-03-03 04:24:50 +00:00
}
return $PHPCAS_CLIENT -> getUser ();
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* This method returns the CAS user ' s login name .
* @ warning should not be called only after phpCAS :: forceAuthentication ()
* or phpCAS :: checkAuthentication () .
*
* @ return the login name of the authenticated user
*/
2010-08-30 21:53:32 +01:00
function getAttributes () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT , $PHPCAS_AUTH_CHECK_CALL ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_AUTH_CHECK_CALL [ 'done' ]) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::forceAuthentication() or ' . __CLASS__ . '::isAuthenticated()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
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' );
2010-03-03 04:24:50 +00:00
}
return $PHPCAS_CLIENT -> getAttributes ();
2010-08-30 21:53:32 +01:00
}
/**
* Handle logout requests .
*/
function handleLogoutRequests ( $check_client = true , $allowed_clients = false ) {
global $PHPCAS_CLIENT ;
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
return ( $PHPCAS_CLIENT -> handleLogoutRequests ( $check_client , $allowed_clients ));
}
2010-03-03 04:24:50 +00:00
/**
* This method returns the URL to be used to login .
* or phpCAS :: isAuthenticated () .
*
* @ return the login name of the authenticated user
*/
2010-08-30 21:53:32 +01:00
function getServerLoginURL () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
return $PHPCAS_CLIENT -> getServerLoginURL ();
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* Set the login URL of the CAS server .
* @ param $url the login URL
* @ since 0.4 . 21 by Wyman Chan
*/
2010-08-30 21:53:32 +01:00
function setServerLoginURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( ' this method should only be called after
' . __CLASS__ . ' :: client () ' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( ' type mismatched for parameter $url ( should be
` string\ ')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setServerLoginURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* Set the serviceValidate URL of the CAS server .
2010-08-30 21:53:32 +01:00
* Used only in CAS 1.0 validations
2010-03-03 04:24:50 +00:00
* @ param $url the serviceValidate URL
* @ since 1.1 . 0 by Joachim Fritschi
*/
2010-08-30 21:53:32 +01:00
function setServerServiceValidateURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( ' this method should only be called after
' . __CLASS__ . ' :: client () ' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( ' type mismatched for parameter $url ( should be
` string\ ')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setServerServiceValidateURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
/**
2010-03-03 04:24:50 +00:00
* Set the proxyValidate URL of the CAS server .
2010-08-30 21:53:32 +01:00
* Used for all CAS 2.0 validations
2010-03-03 04:24:50 +00:00
* @ param $url the proxyValidate URL
* @ since 1.1 . 0 by Joachim Fritschi
*/
2010-08-30 21:53:32 +01:00
function setServerProxyValidateURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( ' this method should only be called after
' . __CLASS__ . ' :: client () ' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( ' type mismatched for parameter $url ( should be
` string\ ')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setServerProxyValidateURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
/**
2010-03-03 04:24:50 +00:00
* Set the samlValidate URL of the CAS server .
* @ param $url the samlValidate URL
* @ since 1.1 . 0 by Joachim Fritschi
*/
2010-08-30 21:53:32 +01:00
function setServerSamlValidateURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( ' this method should only be called after
' . __CLASS__ . ' :: client () ' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( ' type mismatched for parameter $url ( should be
` string\ ')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setServerSamlValidateURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* This method returns the URL to be used to login .
* or phpCAS :: isAuthenticated () .
*
* @ return the login name of the authenticated user
*/
2010-08-30 21:53:32 +01:00
function getServerLogoutURL () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should not be called before ' . __CLASS__ . '::client() or ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
return $PHPCAS_CLIENT -> getServerLogoutURL ();
2010-08-30 21:53:32 +01:00
}
2010-03-03 04:24:50 +00:00
/**
* Set the logout URL of the CAS server .
* @ param $url the logout URL
* @ since 0.4 . 21 by Wyman Chan
*/
2010-08-30 21:53:32 +01:00
function setServerLogoutURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( ' this method should only be called after
' . __CLASS__ . ' :: client () ' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( ' type mismatched for parameter $url ( should be
` string\ ')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setServerLogoutURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* This method is used to logout from CAS .
* @ params $params an array that contains the optional url and service parameters that will be passed to the CAS server
* @ public
*/
function logout ( $params = " " ) {
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
2010-03-03 04:24:50 +00:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$parsedParams = array ();
2010-03-03 04:24:50 +00:00
if ( $params != " " ) {
if ( is_string ( $params )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead' );
2010-03-03 04:24:50 +00:00
}
if ( ! is_array ( $params )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'type mismatched for parameter $params (should be `array\')' );
2010-03-03 04:24:50 +00:00
}
foreach ( $params as $key => $value ) {
if ( $key != " service " && $key != " url " ) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'' );
2010-03-03 04:24:50 +00:00
}
$parsedParams [ $key ] = $value ;
}
}
$PHPCAS_CLIENT -> logout ( $parsedParams );
// never reached
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method is used to logout from CAS . Halts by redirecting to the CAS server .
* @ param $service a URL that will be transmitted to the CAS server
*/
function logoutWithRedirectService ( $service ) {
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
if ( ! is_string ( $service )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'type mismatched for parameter $service (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> logout ( array (
" service " => $service
));
2010-03-03 04:24:50 +00:00
// never reached
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method is used to logout from CAS . Halts by redirecting to the CAS server .
* @ param $url a URL that will be transmitted to the CAS server
*/
function logoutWithUrl ( $url ) {
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
if ( ! is_string ( $url )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> logout ( array (
" url " => $url
));
2010-03-03 04:24:50 +00:00
// never reached
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* This method is used to logout from CAS . Halts by redirecting to the CAS server .
* @ param $service a URL that will be transmitted to the CAS server
* @ param $url a URL that will be transmitted to the CAS server
*/
function logoutWithRedirectServiceAndUrl ( $service , $url ) {
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
if ( ! is_string ( $service )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'type mismatched for parameter $service (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
if ( ! is_string ( $url )) {
2010-08-30 21:53:32 +01:00
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> logout ( array (
" service " => $service ,
" url " => $url
));
2010-03-03 04:24:50 +00:00
// never reached
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
2010-03-03 04:24:50 +00:00
/**
* Set the fixed URL that will be used by the CAS server to transmit the PGT .
* When this method is not called , a phpCAS script uses its own URL for the callback .
*
* @ param $url the URL
*/
2010-08-30 21:53:32 +01:00
function setFixedCallbackURL ( $url = '' ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( ! $PHPCAS_CLIENT -> isProxy ()) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
$PHPCAS_CLIENT -> setCallbackURL ( $url );
2010-08-30 21:53:32 +01:00
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* Set the fixed URL that will be set as the CAS service parameter . When this
* method is not called , a phpCAS script uses its own URL .
*
* @ param $url the URL
*/
2010-08-30 21:53:32 +01:00
function setFixedServiceURL ( $url ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $url ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $url (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setURL ( $url );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* Get the URL that is set as the CAS service parameter .
*/
2010-08-30 21:53:32 +01:00
function getServiceURL () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
return ( $PHPCAS_CLIENT -> getURL ());
}
2010-03-03 04:24:50 +00:00
/**
* Retrieve a Proxy Ticket from the CAS server .
*/
2010-08-30 21:53:32 +01:00
function retrievePT ( $target_service , & $err_code , & $err_msg ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $target_service ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $target_service(should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
return ( $PHPCAS_CLIENT -> retrievePT ( $target_service , $err_code , $err_msg ));
}
2010-03-03 04:24:50 +00:00
/**
* Set the certificate of the CAS server .
*
* @ param $cert the PEM certificate
*/
2010-08-30 21:53:32 +01:00
function setCasServerCert ( $cert ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $cert ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $cert (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setCasServerCert ( $cert );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* Set the certificate of the CAS server CA .
*
* @ param $cert the CA certificate
*/
2010-08-30 21:53:32 +01:00
function setCasServerCACert ( $cert ) {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
if ( gettype ( $cert ) != 'string' ) {
phpCAS :: error ( 'type mismatched for parameter $cert (should be `string\')' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setCasServerCACert ( $cert );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/**
* Set no SSL validation for the CAS server .
*/
2010-08-30 21:53:32 +01:00
function setNoCasServerValidation () {
2010-03-03 04:24:50 +00:00
global $PHPCAS_CLIENT ;
2010-08-30 21:53:32 +01:00
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setNoCasServerValidation ();
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
/** @} */
2010-08-30 21:53:32 +01:00
/**
* Change CURL options .
* CURL is used to connect through HTTPS to CAS server
* @ param $key the option key
* @ param $value the value to set
*/
function setExtraCurlOption ( $key , $value ) {
global $PHPCAS_CLIENT ;
phpCAS :: traceBegin ();
if ( ! is_object ( $PHPCAS_CLIENT )) {
phpCAS :: error ( 'this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()' );
2010-03-03 04:24:50 +00:00
}
2010-08-30 21:53:32 +01:00
$PHPCAS_CLIENT -> setExtraCurlOption ( $key , $value );
phpCAS :: traceEnd ();
}
2010-03-03 04:24:50 +00:00
}
// ########################################################################
// DOCUMENTATION
// ########################################################################
// ########################################################################
// MAIN PAGE
/**
* @ mainpage
*
* The following pages only show the source documentation .
*
*/
// ########################################################################
// MODULES DEFINITION
/** @defgroup public User interface */
/** @ defgroup publicInit Initialization
* @ ingroup public */
/** @ defgroup publicAuth Authentication
* @ ingroup public */
/** @ defgroup publicServices Access to external services
* @ ingroup public */
/** @ defgroup publicConfig Configuration
* @ ingroup public */
/** @ defgroup publicLang Internationalization
* @ ingroup publicConfig */
/** @ defgroup publicOutput HTML output
* @ ingroup publicConfig */
/** @ defgroup publicPGTStorage PGT storage
* @ ingroup publicConfig */
/** @ defgroup publicDebug Debugging
* @ ingroup public */
/** @defgroup internal Implementation */
/** @ defgroup internalAuthentication Authentication
* @ ingroup internal */
/** @ defgroup internalBasic CAS Basic client features ( CAS 1.0 , Service Tickets )
* @ ingroup internal */
/** @ defgroup internalProxy CAS Proxy features ( CAS 2.0 , Proxy Granting Tickets )
* @ ingroup internal */
/** @ defgroup internalPGTStorage PGT storage
* @ ingroup internalProxy */
/** @ defgroup internalPGTStorageDB PGT storage in a database
* @ ingroup internalPGTStorage */
/** @ defgroup internalPGTStorageFile PGT storage on the filesystem
* @ ingroup internalPGTStorage */
/** @ defgroup internalCallback Callback from the CAS server
* @ ingroup internalProxy */
/** @ defgroup internalProxied CAS proxied client features ( CAS 2.0 , Proxy Tickets )
* @ ingroup internal */
/** @ defgroup internalConfig Configuration
* @ ingroup internal */
/** @ defgroup internalOutput HTML output
* @ ingroup internalConfig */
/** @ defgroup internalLang Internationalization
* @ ingroup internalConfig
*
* To add a new language :
* - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS / CAS . php
* - 2. copy any file from CAS / languages to CAS / languages / XXXXXX . php
* - 3. Make the translations
*/
/** @ defgroup internalDebug Debugging
* @ ingroup internal */
/** @ defgroup internalMisc Miscellaneous
* @ ingroup internal */
// ########################################################################
// EXAMPLES
/**
* @ example example_simple . php
*/
2010-08-30 21:53:32 +01:00
/**
* @ example example_proxy . php
*/
/**
* @ example example_proxy2 . php
*/
/**
* @ example example_lang . php
*/
/**
* @ example example_html . php
*/
/**
* @ example example_file . php
*/
/**
* @ example example_db . php
*/
/**
* @ example example_service . php
*/
/**
* @ example example_session_proxy . php
*/
/**
* @ example example_session_service . php
*/
/**
* @ example example_gateway . php
*/
/**
* @ example example_custom_urls . php
*/
2010-03-03 04:24:50 +00:00
?>