2005-04-17 13:06:25 +00:00
< ? php // $Id$
// Designed to be redirected from moodle/login/index.php
require ( '../../config.php' );
2005-08-29 15:42:26 +00:00
if ( isloggedin () && $USER -> username != 'guest' ) { // Nothing to do
2007-01-04 04:52:42 +00:00
if ( isset ( $SESSION -> wantsurl ) and ( strpos ( $SESSION -> wantsurl , $CFG -> wwwroot ) === 0 )) {
2006-02-16 08:59:59 +00:00
$urltogo = $SESSION -> wantsurl ; /// Because it's an address in this site
unset ( $SESSION -> wantsurl );
2005-04-17 13:06:25 +00:00
2006-02-16 08:59:59 +00:00
} else {
$urltogo = $CFG -> wwwroot . '/' ; /// Go to the standard home page
unset ( $SESSION -> wantsurl ); /// Just in case
}
2007-02-20 17:03:36 +00:00
2006-02-16 08:59:59 +00:00
redirect ( $urltogo );
}
2006-06-02 16:42:40 +00:00
2005-06-13 07:54:44 +00:00
$pluginconfig = get_config ( 'auth/shibboleth' );
2007-03-09 13:20:55 +00:00
$shibbolethauth = get_auth_plugin ( 'shibboleth' );
2005-05-13 15:10:40 +00:00
// Check whether Shibboleth is configured properly
2007-01-04 04:52:42 +00:00
if ( empty ( $pluginconfig -> user_attribute )) {
2005-10-31 15:51:17 +00:00
error ( get_string ( 'shib_not_set_up_error' , 'auth' ));
}
2005-04-17 13:06:25 +00:00
2005-05-06 06:35:24 +00:00
/// If we can find the Shibboleth attribute, save it in session and return to main login page
2007-01-04 04:52:42 +00:00
if ( ! empty ( $_SERVER [ $pluginconfig -> user_attribute ])) { // Shibboleth auto-login
$frm -> username = $_SERVER [ $pluginconfig -> user_attribute ];
$frm -> password = substr ( base64_encode ( $_SERVER [ $pluginconfig -> user_attribute ]), 0 , 8 );
2005-04-17 13:06:25 +00:00
// The random password consists of the first 8 letters of the base 64 encoded user ID
2007-02-20 17:03:36 +00:00
// This password is never used unless the user account is converted to manual
2005-04-17 13:06:25 +00:00
/// Check if the user has actually submitted login data to us
2007-02-20 17:03:36 +00:00
2007-03-09 13:20:55 +00:00
if ( $shibbolethauth -> user_login ( $frm -> username , $frm -> password )) {
$USER = authenticate_user_login ( $frm -> username , $frm -> password );
$USER -> loggedin = true ;
$USER -> site = $CFG -> wwwroot ; // for added security, store the site in the
2005-04-17 13:06:25 +00:00
update_user_login_times ();
2007-04-02 14:13:59 +00:00
// Don't show username on login page
set_moodle_cookie ( 'nobody' );
2007-05-08 15:07:25 +00:00
2005-04-17 13:06:25 +00:00
set_login_session_preferences ();
2007-03-09 13:20:55 +00:00
unset ( $SESSION -> lang );
$SESSION -> justloggedin = true ;
add_to_log ( SITEID , 'user' , 'login' , " view.php?id= $USER->id &course= " . SITEID , $USER -> id , 0 , $USER -> id );
2005-04-17 13:06:25 +00:00
if ( user_not_fully_set_up ( $USER )) {
$urltogo = $CFG -> wwwroot . '/user/edit.php?id=' . $USER -> id . '&course=' . SITEID ;
// We don't delete $SESSION->wantsurl yet, so we get there later
} else if ( isset ( $SESSION -> wantsurl ) and ( strpos ( $SESSION -> wantsurl , $CFG -> wwwroot ) === 0 )) {
$urltogo = $SESSION -> wantsurl ; /// Because it's an address in this site
unset ( $SESSION -> wantsurl );
} else {
$urltogo = $CFG -> wwwroot . '/' ; /// Go to the standard home page
unset ( $SESSION -> wantsurl ); /// Just in case
}
2007-02-20 17:03:36 +00:00
2006-11-13 11:54:07 +00:00
/// Go to my-moodle page instead of homepage if mymoodleredirect enabled
if ( ! has_capability ( 'moodle/site:config' , get_context_instance ( CONTEXT_SYSTEM , SITEID )) and ! empty ( $CFG -> mymoodleredirect ) and ! isguest ()) {
if ( $urltogo == $CFG -> wwwroot or $urltogo == $CFG -> wwwroot . '/' or $urltogo == $CFG -> wwwroot . '/index.php' ) {
$urltogo = $CFG -> wwwroot . '/my/' ;
}
}
2007-02-20 17:03:36 +00:00
2006-11-13 11:54:07 +00:00
load_all_capabilities (); /// This is what lets the user do anything on the site :-)
2005-04-17 13:06:25 +00:00
redirect ( $urltogo );
2007-03-09 13:20:55 +00:00
exit ;
}
else {
// For some weird reason the Shibboleth user couldn't be authenticated
2005-04-17 13:06:25 +00:00
}
2006-02-16 08:59:59 +00:00
}
2007-02-20 17:03:36 +00:00
// If we can find any (user independent) Shibboleth attributes but no user
2005-10-31 15:51:17 +00:00
// attributes we probably didn't receive any user attributes
2007-01-04 04:52:42 +00:00
elseif ( ! empty ( $_SERVER [ 'HTTP_SHIB_APPLICATION_ID' ])) {
error ( get_string ( 'shib_no_attributes_error' , 'auth' , '\'' . $pluginconfig -> user_attribute . '\', \'' . $pluginconfig -> field_map_firstname . '\', \'' . $pluginconfig -> field_map_lastname . '\' and \'' . $pluginconfig -> field_map_email . '\'' ));
2006-02-16 08:59:59 +00:00
} else {
error ( get_string ( 'shib_not_set_up_error' , 'auth' ));
2005-04-17 13:06:25 +00:00
}
?>