40093e8c117b0fbae6049dbb484dc7d9653b5a94
[moodle.git] / auth / cas / login.php
1 <?php
2 // $Id$
3 // author: romualdLorthioir $
4 //CHANGELOG:
5 //05.03.2005 replace /login/index.php
6 defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
8     //Define variables used in page
9     if (!$site = get_site()) {
10         error("No site found!");
11     }
13     if (empty($CFG->langmenu)) {
14         $langmenu = "";
15     } else {
16         $currlang = current_language();
17         $langs    = get_list_of_languages();
18         if (empty($CFG->loginhttps)) {
19             $wwwroot = $CFG->wwwroot;
20         } else {
21             $wwwroot = str_replace('http:','https:',$CFG->wwwroot);
22         }
23         $langmenu = popup_form ("$wwwroot/login/index.php?lang=", $langs, "chooselang", $currlang, "", "", "", true);
24     }
26     $loginsite = get_string("loginsite");
27     $casauth = get_auth_plugin('cas');
28     $ldapauth = get_auth_plugin('ldap');
31     $frm = false;
32     $user = false;
33     if ((!empty($SESSION->wantsurl) and strstr($SESSION->wantsurl,'username=guest')) or $loginguest) {
34         /// Log in as guest automatically (idea from Zbigniew Fiedorowicz)
35         $frm->username = 'guest';
36         $frm->password = 'guest';
37     } else if (!empty($SESSION->wantsurl) && file_exists($CFG->dirroot.'/login/weblinkauth.php')) {
38         // Handles the case of another Moodle site linking into a page on this site
39         include($CFG->dirroot.'/login/weblinkauth.php');
40         if (function_exists(weblink_auth)) {
41             $user = weblink_auth($SESSION->wantsurl);
42         }
43         if ($user) {
44             $frm->username = $user->username;
45         } else {
46             $frm = data_submitted();
47         }
48     } else {
49         $frm = data_submitted();
50     }
52     if ($frm and (get_moodle_cookie() == '')) {    // Login without cookie
54         $errormsg = get_string("cookiesnotenabled");
56     } else if ($frm) {                             // Login WITH cookies
58         $frm->username = trim(moodle_strtolower($frm->username));
60         if (($frm->username == 'guest') and empty($CFG->guestloginbutton)) {
61             $user = false;    /// Can't log in as guest if guest button is disabled
62             $frm = false;
63         } else if (!$user) {
64             if ($CFG->auth == "cas" && $frm->username != 'guest') { /// Cas SSO case
65                $user = $casauth->authenticate_user_login($frm->username, $frm->password);
66             }else{
67                $user = authenticate_user_login($frm->username, $frm->password);
68             }
69         }
70         update_login_count();
72         if ($user) {
73             if (! $user->confirmed ) {       // they never confirmed via email 
74                 print_header(get_string("mustconfirm"), get_string("mustconfirm") ); 
75                 print_heading(get_string("mustconfirm"));
76                 print_simple_box(get_string("emailconfirmsent", "", $user->email), "center");
77                 print_footer();
78                 die;
79             }
81             $USER = $user;
82             if (!empty($USER->description)) {
83                 $USER->description = true;   // No need to cart all of it around
84             }
85             $USER->loggedin = true;
86             $USER->site     = $CFG->wwwroot; // for added security, store the site in the session
87             sesskey();                       // for added security, used to check script parameters
89             if ($USER->username == "guest") {
90                 $USER->lang       = $CFG->lang;               // Guest language always same as site
91                 $USER->firstname  = get_string("guestuser");  // Name always in current language
92                 $USER->lastname   = " ";
93             }
94     
95             if (!update_user_login_times()) {
96                 error("Wierd error: could not update login records");
97             }
99             set_moodle_cookie($USER->username);
101             unset($SESSION->lang);
102             $SESSION->justloggedin = true;
104             // Restore the calendar filters, if saved
105             if (intval(get_user_preferences('calendar_persistflt', 0))) {
106                 include_once($CFG->dirroot.'/calendar/lib.php');
107                 calendar_set_filters_status(get_user_preferences('calendar_savedflt', 0xff));
108             }
110             //Select password change url
111             $userauth = get_auth_plugin($USER->auth);
112             if (method_exists($userauth, 'can_change_password') and $userauth->can_change_password()) {
113                 $passwordchangeurl=$CFG->wwwroot.'/login/change_password.php';
114             } 
116             // check whether the user should be changing password
117             if (get_user_preferences('auth_forcepasswordchange', false)) {
118                 if (isset($passwordchangeurl)) {
119                     redirect($passwordchangeurl);
120                 } else {
121                     error("You cannot proceed without changing your password. 
122                            However there is no available page for changing it.
123                            Please contact your Moodle Administrator.");
124                 }
125             }
127             
128             add_to_log(SITEID, "user", "login", "view.php?id=$user->id&course=".SITEID, $user->id, 0, $user->id);
130             if (user_not_fully_set_up($USER)) {
131                 $urltogo = $CFG->wwwroot.'/user/edit.php?id='.$USER->id.'&amp;course='.SITEID;
132                 // We don't delete $SESSION->wantsurl yet, so we get there later
134             } else if (isset($SESSION->wantsurl) and (strpos($SESSION->wantsurl, $CFG->wwwroot) === 0)) {
135                 $urltogo = $SESSION->wantsurl;    /// Because it's an address in this site
136                 unset($SESSION->wantsurl);
138             } else {
139                 $urltogo = $CFG->wwwroot.'/';      /// Go to the standard home page
140                 unset($SESSION->wantsurl);         /// Just in case
141             }
143             // check if user password has expired
144             // Currently supported only for ldap-authentication module
145             if ($ldapauth->config->expiration == 1) {
146                     $days2expire = $ldapauth->password_expire($USER->username);
147                     if (intval($days2expire) > 0 && intval($days2expire) < intval($CFG->{$USER->auth.'_expiration_warning'})) {
148                         print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite, $focus, "", true, "<div align=\"right\">$langmenu</div>"); 
149                         notice_yesno(get_string('auth_passwordwillexpire', 'auth', $days2expire), $passwordchangeurl, $urltogo); 
150                         print_footer();
151                         exit;
152                     } elseif (intval($days2expire) < 0 ) {
153                         print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite, $focus, "", true, "<div align=\"right\">$langmenu</div>"); 
154                         notice_yesno(get_string('auth_passwordisexpired', 'auth'), $passwordchangeurl, $urltogo);
155                         print_footer();
156                         exit;
157                     }
158             }
160             reset_login_count();
162             load_all_capabilities();     /// This is what lets the user do anything on the site  :-)
164             redirect($urltogo);
166             exit;
167     
168         } else {
169           if ($CFG->auth == "cas" ) { /// CAS error login
170             $errormsg = get_string("invalidcaslogin");
171             phpCAS::logout("$CFG->wwwroot/auth/cas/forbidden.php");
172           }else{
173             $errormsg = get_string("invalidlogin");
174           }
175         }
176     }
177     $user = $casauth->automatic_authenticate($user);
178     if ($user) {
179         if (! $user->confirmed ) {       // they never confirmed via email 
180             print_header(get_string("mustconfirm"), get_string("mustconfirm") ); 
181             print_heading(get_string("mustconfirm"));
182             print_simple_box(get_string("emailconfirmsent", "", $user->email), "center");
183             print_footer();
184             die;
185         }
187         $USER = $user;
188         if (!empty($USER->description)) {
189             $USER->description = true;   // No need to cart all of it around
190         }
191         $USER->loggedin = true;
192         $USER->site     = $CFG->wwwroot; // for added security, store the site in the session
193         sesskey();                       // for added security, used to check script parameters
195         if ($USER->username == "guest") {
196             $USER->lang       = $CFG->lang;               // Guest language always same as site
197             $USER->firstname  = get_string("guestuser");  // Name always in current language
198             $USER->lastname   = " ";
199         }
201         if (!update_user_login_times()) {
202             error("Wierd error: could not update login records");
203         }
205         set_moodle_cookie($USER->username);
207         unset($SESSION->lang);
208         $SESSION->justloggedin = true;
210         // Restore the calendar filters, if saved
211         if (intval(get_user_preferences('calendar_persistflt', 0))) {
212             include_once($CFG->dirroot.'/calendar/lib.php');
213             calendar_set_filters_status(get_user_preferences('calendar_savedflt', 0xff));
214         }
216         //Select password change url
217         $userauth = get_auth_plugin($USER->auth);
218         if (method_exists($userauth, 'can_change_password') and $userauth->can_change_password()) {
219             $passwordchangeurl=$CFG->wwwroot.'/login/change_password.php';
220         }
222         // check whether the user should be changing password
223         if (get_user_preferences('auth_forcepasswordchange', false)) {
224             if (isset($passwordchangeurl)) {
225                 redirect($passwordchangeurl);
226             } else {
227                 error("You cannot proceed without changing your password. 
228                        However there is no available page for changing it.
229                        Please contact your Moodle Administrator.");
230             }
231         }
233         
234         add_to_log(SITEID, "user", "login", "view.php?id=$user->id&course=".SITEID, $user->id, 0, $user->id);
236         if (user_not_fully_set_up($USER)) {
237             $urltogo = $CFG->wwwroot.'/user/edit.php?id='.$USER->id.'&amp;course='.SITEID;
238             // We don't delete $SESSION->wantsurl yet, so we get there later
240         } else if (isset($SESSION->wantsurl) and (strpos($SESSION->wantsurl, $CFG->wwwroot) === 0)) {
241             $urltogo = $SESSION->wantsurl;    /// Because it's an address in this site
242             unset($SESSION->wantsurl);
244         } else {
245             $urltogo = $CFG->wwwroot.'/';      /// Go to the standard home page
246             unset($SESSION->wantsurl);         /// Just in case
247         }
249         // check if user password has expired
250         // Currently supported only for ldap-authentication module
251         if ($ldapauth->config->expiration == 1) {
252                 $days2expire = $ldapauth->password_expire($USER->username);
253                 if (intval($days2expire) > 0 && intval($days2expire) < intval($CFG->{$USER->auth.'_expiration_warning'})) {
254                     print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite, $focus, "", true, "<div class=\"langmenu\">$langmenu</div>"); 
255                     notice_yesno(get_string('auth_passwordwillexpire', 'auth', $days2expire), $passwordchangeurl, $urltogo); 
256                     print_footer();
257                     exit;
258                 } elseif (intval($days2expire) < 0 ) {
259                     print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite, $focus, "", true, "<div class=\"langmenu\">$langmenu</div>"); 
260                     notice_yesno(get_string('auth_passwordisexpired', 'auth'), $passwordchangeurl, $urltogo);
261                     print_footer();
262                     exit;
263                 }
264         }
266         reset_login_count();
268         load_all_capabilities();     /// This is what lets the user do anything on the site  :-)
270         redirect($urltogo);
272         exit;
273     } else {
274        if (!$CFG->guestloginbutton) {
275            $errormsg = get_string("invalidcaslogin");
276            phpCAS::logout("$CFG->wwwroot/auth/cas/forbidden.php");
277        }
278     }
280     if (empty($errormsg)) {
281         $errormsg = "";
282     }
284     if (empty($SESSION->wantsurl)) {
285         $SESSION->wantsurl = array_key_exists('HTTP_REFERER',$_SERVER) ? $_SERVER["HTTP_REFERER"] : $CFG->wwwroot.'/'; 
286     }
288     if (get_moodle_cookie() == '') {   
289         set_moodle_cookie('nobody');   // To help search for cookies
290     }
291     
292     if (empty($frm->username)) {
293         $frm->username = get_moodle_cookie() === 'nobody' ? '' : get_moodle_cookie();
294         $frm->password = "";
295     }
296     
297     if (!empty($frm->username)) {
298         $focus = "login.password";
299     } else {
300         $focus = "login.username";
301     }
303     if ($CFG->auth == "email" or $CFG->auth == "none" or chop($CFG->auth_instructions) <> "" ) {
304         $show_instructions = true;
305     } else {
306         $show_instructions = false;
307     }
308     
309     print_header("$site->fullname: $loginsite", "$site->fullname", $loginsite, $focus, "", true, "<div align=\"right\">$langmenu</div>"); 
310     include($CFG->dirroot.'/auth/cas/index_form.html');
311     print_footer();
313     exit;
315     // No footer on this page
317 ?>