--- loncom/auth/lonlogin.pm 2004/05/07 14:25:17 1.57 +++ loncom/auth/lonlogin.pm 2007/08/30 22:07:45 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network # Login Screen # -# $Id: lonlogin.pm,v 1.57 2004/05/07 14:25:17 matthew Exp $ +# $Id: lonlogin.pm,v 1.94 2007/08/30 22:07:45 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,13 +32,28 @@ use strict; use Apache::Constants qw(:common); use CGI::Cookie(); use Apache::File (); -use Apache::lonnet(); +use Apache::lonnet; use Apache::loncommon(); use Apache::lonauth(); use Apache::lonlocal; - +use Apache::migrateuser(); +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + sub handler { my $r = shift; + + &Apache::loncommon::get_unprocessed_cgi + (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'}, + $ENV{'REDIRECT_QUERY_STRING'}), + ['interface','username','domain','firsturl','localpath','localres', + 'token']); + +# -- check if they are a migrating user + if (defined($env{'form.token'})) { + return &Apache::migrateuser::handler($r); + } + &Apache::loncommon::no_cache($r); &Apache::lonlocal::get_language_handle($r); &Apache::loncommon::content_type($r,'text/html'); @@ -52,80 +67,82 @@ sub handler { return OK; } + # -------------------------------- Prevent users from attempting to login twice my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); my $lonid=$cookies{'lonID'}; my $cookie; if ($lonid) { - my $handle=$lonid->value; - $handle=~s/\W//g; + my $handle=&LONCAPA::clean_handle($lonid->value); my $lonidsdir=$r->dir_config('lonIDsDir'); - if ((-e "$lonidsdir/$handle.id") && ($handle ne '')) { + if (-e "$lonidsdir/$handle.id") { +# Is there an existing token file? + if ($handle=~/^publicuser\_/) { +# For "public user" - remove it, we apparently really want to login + unlink("$lonidsdir/$handle.id"); + } elsif ($handle ne '') { # Indeed, a valid token is found - my $bodytag=&Apache::loncommon::bodytag('Already logged in'); - $r->print(< - -Already logged in - -$bodytag + my $start_page = + &Apache::loncommon::start_page('Already logged in'); + my $end_page = + &Apache::loncommon::end_page(); + $r->print(<You are already logged in

Please either continue the current session or logout.

Problems?

- - +$end_page ENDFAILED - return OK; + return OK; + } } } # ---------------------------------------------------- No valid token, continue - &Apache::loncommon::get_unprocessed_cgi - ($ENV{'QUERY_STRING'}.'&'.$ENV{'request.querystring'}, - ['interface','username','domain','firsturl','localpath','localres']); - - + # ---------------------------- 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; + $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'; + $env{'form.interface'}='textual'; } } - my $fullgraph=($ENV{'form.interface'} ne 'textual'); - my $port_to_use=$r->dir_config('lonhttpdPort'); - if (!defined($port_to_use)) { - $port_to_use='8080'; - } - my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':'.$port_to_use. - $r->dir_config('lonIconsURL'); - my $domain = $r->dir_config('lonDefDomain'); - if (($ENV{'form.domain'}) && - ($Apache::lonnet::domaindescription{$ENV{'form.domain'}})) { - $domain=$ENV{'form.domain'}; + my $fullgraph=($env{'form.interface'} ne 'textual'); + + my $iconpath= + &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL')); + + my $domain = &Apache::lonnet::default_login_domain(); + if (($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 $servadm = $r->dir_config('lonAdmEMail'); - my $sysadm = $r->dir_config('lonSysEMail'); my $lonhost = $r->dir_config('lonHostID'); my $tabdir = $r->dir_config('lonTabDir'); my $include = $r->dir_config('lonIncludes'); my $expire = $r->dir_config('lonExpire'); my $version = $r->dir_config('lonVersion'); + 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=($env{'form.username'}?$env{'form.username'}:''); + my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain); # ---------------------------------------------------------- Determine own load my $loadavg; @@ -138,9 +155,9 @@ ENDFAILED my $userloadpercent=&Apache::lonnet::userload(); # ------------------------------------------------------- Do the load balancing - my $otherserver='http://'.$ENV{'SERVER_NAME'}; + my $otherserver= &Apache::lonnet::absolute_url($host_name); my $firsturl= - ($ENV{'request.firsturl'}?$ENV{'request.firsturl'}:$ENV{'form.firsturl'}); + ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'}); # ---------------------------------------- Are we access server and overloaded? if (($role eq 'access') && (($userloadpercent>100.0)||($loadpercent>100.0))) { @@ -179,15 +196,39 @@ ENDFAILED if ($logtoken eq 'con_lost') { my $spares=''; - foreach (keys %Apache::lonnet::hostname) { - if ($_ ne $lonhost) { - $spares.='
'. - $Apache::lonnet::hostname{$_}.''; - if ($Apache::lonnet::spareid{$_}) { - $spares.=' (preferred)'; - } - } + my $last; + foreach my $hostid (sort + { + &Apache::lonnet::hostname($a) cmp + &Apache::lonnet::hostname($b); + } + keys(%Apache::lonnet::spareid)) { + next if ($hostid eq $lonhost); + my $hostname = &Apache::lonnet::hostname($hostid); + next if ($last eq $hostname); + $spares.='
'. + $hostname.''. + ' (preferred)'.$/; + $last=$hostname; + } + $spares.= '
'; + my %all_hostnames = &Apache::lonnet::all_hostnames(); + foreach my $hostid (sort + { + &Apache::lonnet::hostname($a) cmp + &Apache::lonnet::hostname($b); + } + keys(%all_hostnames)) { + next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid}); + my $hostname = &Apache::lonnet::hostname($hostid); + next if ($last eq $hostname); + $spares.='
'. + $hostname.''; + $last=$hostname; } $r->print(< @@ -196,7 +237,6 @@ ENDFAILED

This LON-CAPA server is temporarily not available for login

Please attempt to login to one of the following servers:

$spares -

If the problem persists, please contact $servadm.

ENDTROUBLE @@ -204,10 +244,7 @@ ENDTROUBLE } # ----------------------------------------------- Apparently we are in business - - my $domainlogo=&Apache::loncommon::domainlogo($domain); $servadm=~s/\,/\
/g; - $sysadm=~s/\,/\
/g; # --------------------------------------------------- Print login screen header $r->print(< 'percent', 'load' => 'Load', 'userload' => 'User Load', - 'about' => 'aboutlon.gif', - 'access' => 'accessbutton.gif', + 'about' => 'About LON-CAPA', + 'access' => 'Accessibility Options', + 'catalog' => 'Course Catalog', 'auth' => 'userauthentication.gif', 'log' => 'Log in', - 'help' => 'Help', + 'help' => 'Log-in Help', 'serv' => 'Server', 'servadm' => 'Server Administration', - 'sysadm' => 'System Administration'); - - + 'helpdesk' => 'Contact Helpdesk', + 'forgotpw' => 'Forgot password?'); +# -------------------------------------------------- Change password field name + my $now=time; + my $forgotpw = &forgotpwdisplay(%lt); + my $loginhelp = &loginhelpdisplay(%lt); # ---------------------------------------------------------- Serve rest of page $r->print(< - + - + + + @@ -324,10 +379,14 @@ ENDSCRIPT - - + + ENDSERVERFORM + my $coursecatalog; + if (($showcoursecat eq '') || ($showcoursecat)) { + $coursecatalog = &coursecatalog_link($lt{'catalog'}); + } if ($fullgraph) { $r->print(< @@ -353,14 +412,23 @@ ENDSERVERFORM - + - - Accessibility Options -
- About LON-CAPA + + + + + + + + + + $coursecatalog + + + +
 $lt{'access'}
 $lt{'about'}
 
- @@ -389,14 +457,11 @@ ENDTOP unless ($fullgraph) { $r->print(<Select Accessibility Options - Suppress rendering of images
- Suppress Java applets
- Suppress rendering of embedded multimedia
- Increase font size
- Switch to black and white mode
-

If you have accessibility needs that are not addressed by this interface, -please -contact the system administrator at $sysadm.


+
+
+
+
+
Remember these settings for next login
ENDACCESSOPTIONS } else { @@ -417,29 +482,38 @@ ENDNOOPT - + - - + + - + - + + + +
User Authentication

   $lt{'un'}:

   :

   $lt{'pw'}:   :
   $lt{'dom'}:   :
   $lt{'help'} 
+ $loginhelp + $forgotpw +
ENDLOGIN if ($fullgraph) { + my $helpdeskscript; + my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail, + $version,$authdomain,\$helpdeskscript); $r->print(< @@ -492,13 +566,7 @@ ENDLOGIN
- -    $lt{'sysadm'}:
-       $sysadm
-    $lt{'servadm'}:
-       $servadm
 
-    $version -
+ $contactblock @@ -528,16 +596,80 @@ $domainlogo - +$helpdeskscript ENDDOCUMENT } $r->print(''); return OK; -} +} + +sub contactdisplay { + my ($lt,$servadm,$showadminmail,$version,$authdomain,$helpdeskscript) = @_; + my $contactblock; + my $showhelpdesk = 0; + my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; + if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) { + $showhelpdesk = 1; + } + if ($servadm && $showadminmail) { + $contactblock .= '   '.$$lt{'servadm'}.':
'. + '      '.$servadm.'
 
'; + } + if ($showhelpdesk) { + $contactblock .= '   '.$lt->{'helpdesk'}.'
'; + my $thisurl = &escape('/adm/login'); + $$helpdeskscript = <<"ENDSCRIPT"; + +ENDSCRIPT + } + $contactblock .= <<"ENDBLOCK"; +    $version +ENDBLOCK + return $contactblock; +} + +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; +} + +sub coursecatalog_link { + my ($linkname) = @_; + return <<"END"; + +   + $linkname + +END +} 1; __END__ 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.