--- loncom/auth/lonlogin.pm 2010/03/05 17:37:21 1.106.4.6 +++ loncom/auth/lonlogin.pm 2015/03/06 22:32:39 1.158.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Login Screen # -# $Id: lonlogin.pm,v 1.106.4.6 2010/03/05 17:37:21 raeburn Exp $ +# $Id: lonlogin.pm,v 1.158.2.1 2015/03/06 22:32:39 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,7 +46,7 @@ sub handler { (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'}, $ENV{'REDIRECT_QUERY_STRING'}), ['interface','username','domain','firsturl','localpath','localres', - 'token','role','symb']); + 'token','role','symb','iptoken']); if (!defined($env{'form.firsturl'})) { &Apache::lonacc::get_posted_cgi($r,['firsturl']); } @@ -64,71 +64,90 @@ sub handler { # Are we re-routing? - if (-e '/home/httpd/html/lon-status/reroute.txt') { + my $londocroot = $r->dir_config('lonDocRoot'); + if (-e "$londocroot/lon-status/reroute.txt") { &Apache::lonauth::reroute($r); return OK; } + $env{'form.firsturl'} =~ s/(`)/'/g; # -------------------------------- Prevent users from attempting to login twice my $handle = &Apache::lonnet::check_for_valid_session($r); - if ($handle=~/^publicuser\_/) { + if ($handle ne '') { + my $lonidsdir=$r->dir_config('lonIDsDir'); + if ($handle=~/^publicuser\_/) { # For "public user" - remove it, we apparently really want to login - unlink($r->dir_config('lonIDsDir')."/$handle.id"); - } elsif ($handle ne '') { + unlink($r->dir_config('lonIDsDir')."/$handle.id"); + } else { # Indeed, a valid token is found - my $start_page = - &Apache::loncommon::start_page('Already logged in'); - my $end_page = - &Apache::loncommon::end_page(); - my $dest = '/adm/roles'; - if ($env{'form.firsturl'} ne '') { - $dest = $env{'form.firsturl'}; - } - $r->print( + &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle); + my $start_page = + &Apache::loncommon::start_page('Already logged in'); + my $end_page = + &Apache::loncommon::end_page(); + my $dest = '/adm/roles'; + if ($env{'form.firsturl'} ne '') { + $dest = $env{'form.firsturl'}; + } + $r->print( $start_page - .'
'.&mt('You are already logged in!').'
' .''.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].', '','','','').'
' - .'' .$end_page ); - return OK; + return OK; + } } # ---------------------------------------------------- No valid token, continue - # ---------------------------- Not possible to really login to domain "public" +# ---------------------------- Not possible to really login to domain "public" if ($env{'form.domain'} eq 'public') { $env{'form.domain'}=''; $env{'form.username'}=''; } -# ----------------------------------------------------------- Process Interface - $env{'form.interface'}=~s/\W//g; - my $textbrowsers=$r->dir_config('lonTextBrowsers'); - my $httpbrowser=$ENV{"HTTP_USER_AGENT"}; - - foreach (split(/\:/,$textbrowsers)) { - if ($httpbrowser=~/$_/i) { - $env{'form.interface'}='textual'; - } +# ------ Is this page requested because /adm/migrateuser detected an IP change? + my %sessiondata; + if ($env{'form.iptoken'}) { + %sessiondata = &Apache::lonnet::tmpget($env{'form.iptoken'}); + my $delete = &Apache::lonnet::tmpdel($env{'form.token'}); } +# ----------------------------------------------------------- Process Interface + $env{'form.interface'}=~s/\W//g; - my $fullgraph=($env{'form.interface'} ne 'textual'); + (undef,undef,undef,undef,undef,undef,my $clientmobile) = + &Apache::loncommon::decode_user_agent(); my $iconpath= &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL')); + my $lonhost = $r->dir_config('lonHostID'); my $domain = &Apache::lonnet::default_login_domain(); - if (($env{'form.domain'}) && + if ($lonhost ne '') { + unless ($sessiondata{'sessionserver'}) { + my $redirect = &check_loginvia($domain,$lonhost); + if ($redirect) { + $r->print($redirect); + return OK; + } + } + } + + if (($sessiondata{'domain'}) && + (&Apache::lonnet::domain($env{'form.domain'},'description'))) { + $domain=$sessiondata{'domain'}; + } elsif (($env{'form.domain'}) && (&Apache::lonnet::domain($env{'form.domain'},'description'))) { $domain=$env{'form.domain'}; } + my $role = $r->dir_config('lonRole'); my $loadlim = $r->dir_config('lonLoadLim'); + my $uloadlim= $r->dir_config('lonUserLoadLim'); my $servadm = $r->dir_config('lonAdmEMail'); - my $lonhost = $r->dir_config('lonHostID'); my $tabdir = $r->dir_config('lonTabDir'); my $include = $r->dir_config('lonIncludes'); my $expire = $r->dir_config('lonExpire'); @@ -136,9 +155,20 @@ sub handler { my $host_name = &Apache::lonnet::hostname($lonhost); # --------------------------------------------- Default values for login fields - - my $authusername=($env{'form.username'}?$env{'form.username'}:''); - my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); + + my ($authusername,$authdomain); + if ($sessiondata{'username'}) { + $authusername=$sessiondata{'username'}; + } else { + $env{'form.username'} = &Apache::loncommon::cleanup_html($env{'form.username'}); + $authusername=($env{'form.username'}?$env{'form.username'}:''); + } + if ($sessiondata{'domain'}) { + $authdomain=$sessiondata{'domain'}; + } else { + $env{'form.domain'} = &Apache::loncommon::cleanup_html($env{'form.domain'}); + $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); + } # ---------------------------------------------------------- Determine own load my $loadavg; @@ -147,18 +177,17 @@ sub handler { $loadavg=<$loadfile>; } $loadavg =~ s/\s.*//g; - my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim); - my $userloadpercent=&Apache::lonnet::userload(); -# ------------------------------------------------------- Do the load balancing - my $otherserver= &Apache::lonnet::absolute_url($host_name); + my ($loadpercent,$userloadpercent); + if ($loadlim) { + $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim); + } + if ($uloadlim) { + $userloadpercent=&Apache::lonnet::userload(); + } + my $firsturl= ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'}); -# ---------------------------------------------------------- Are we overloaded? - if ((($userloadpercent>100.0)||($loadpercent>100.0))) { - my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent); - if ($unloaded) { $otherserver=$unloaded; } - } # ----------------------------------------------------------- Get announcements my $announcements=&Apache::lonnet::getannounce(); @@ -197,9 +226,13 @@ sub handler { 'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras, $lonhost); -# ------------------- If we cannot talk to ourselves, we are in serious trouble +# -- If we cannot talk to ourselves, or hostID does not map to a hostname +# we are in serious trouble - if ($logtoken eq 'con_lost') { + if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) { + if ($logtoken eq 'no_such_host') { + &Apache::lonnet::logthis('No valid logtoken for log-in page -- unable to determine hostname for hostID: '.$lonhost.'. Check entry in hosts.tab'); + } my $spares=''; my $last; foreach my $hostid (sort @@ -210,7 +243,7 @@ sub handler { keys(%Apache::lonnet::spareid)) { next if ($hostid eq $lonhost); my $hostname = &Apache::lonnet::hostname($hostid); - next if ($last eq $hostname); + next if (($last eq $hostname) || ($hostname eq '')); $spares.=''.&mt('Please attempt to login to one of the following servers:') + .'
' + .$spares); } - $r->print( - '' - .''.&mt('Please attempt to login to one of the following servers:').'
' - .$spares - .'' - .'' + $r->print('' + .'' ); return OK; } @@ -256,30 +294,18 @@ sub handler { $servadm=~s/\,/\
+ my $noscript_warning='';
+ my $helpdeskscript;
+ my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,
+ $authdomain,\$helpdeskscript,
+ $showhelpdesk,\@possdoms);
+
+ my $mobileargs;
+ if ($clientmobile) {
+ $mobileargs = 'autocapitalize="off" autocorrect="off"';
+ }
+ my $loginform=(< + + : + + : + + + +LFORM + + if ($showbanner) { + $r->print(<
+
+
HEADER
- if ($showbanner) {
- $r->print(< | |||||||||||||||||||||||
- - - | - - - | - - - | - | ||||||||||||||||||||
-
|
-
-
- - - - - |
-ENDSTART
- if ($showmainlogo) {
- $r->print(<
- | | ||||||||||||||||||||
-ENDTOP
- } else {
- $r->print('The LearningOnline Network with CAPA' - .''.&mt('Text-based Interface Login').'' - .$announcements); - } - $r->print(' -ENDLOGIN - if ($fullgraph) { - my $helpdeskscript; - my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail, - $version,$authdomain,\$helpdeskscript); - $r->print(<
-
-
- | $announcements |
-
-
-
- | | ||||||||||||||||||||
- -
- $contactblock - - - -
-
-
- |
-$domainlogo
- |
-
-
-
-
- | |
-
-
-
-
-
- |
-
-
- |
- |
+ $domainlogo
+
+ + ENDSCRIPT } - $contactblock .= <<"ENDBLOCK"; - $version -ENDBLOCK return $contactblock; } @@ -730,16 +726,7 @@ sub forgotpwdisplay { my (%lt) = @_; my $prompt_for_resetpw = 1; if ($prompt_for_resetpw) { - return ' '.$lt{'forgotpw'}.' '; - } - return; -} - -sub loginhelpdisplay { - my (%lt) = @_; - my $login_help = 1; - if ($login_help) { - return ' '.$lt{'help'}.''; + return ''.$lt{'forgotpw'}.''; } return; } @@ -747,16 +734,13 @@ sub loginhelpdisplay { sub coursecatalog_link { my ($linkname) = @_; return <<"END"; - | ||||||||||||||||
- | $linkname | -