--- loncom/auth/lonlogin.pm 2015/06/06 14:40:28 1.158.2.4 +++ loncom/auth/lonlogin.pm 2017/10/14 20:59:35 1.158.2.6.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Login Screen # -# $Id: lonlogin.pm,v 1.158.2.4 2015/06/06 14:40:28 raeburn Exp $ +# $Id: lonlogin.pm,v 1.158.2.6.2.1 2017/10/14 20:59:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,7 @@ use Apache::lonlocal; use Apache::migrateuser(); use lib '/home/httpd/lib/perl/'; use LONCAPA; +use CGI::Cookie(); sub handler { my $r = shift; @@ -56,9 +57,35 @@ sub handler { return &Apache::migrateuser::handler($r); } +# For "public user" - remove any exising "public" cookie, as user really wants to log-in + my ($handle,$lonidsdir,$expirepub,$userdom); + unless ($r->header_only) { + $handle = &Apache::lonnet::check_for_valid_session($r,'lonID',undef,\$userdom); + if ($handle ne '') { + $lonidsdir=$r->dir_config('lonIDsDir'); + if ($handle=~/^publicuser\_/) { + unlink($r->dir_config('lonIDsDir')."/$handle.id"); + undef($handle); + undef($userdom); + $expirepub = 1; + } + } + } + &Apache::loncommon::no_cache($r); &Apache::lonlocal::get_language_handle($r); &Apache::loncommon::content_type($r,'text/html'); + if ($expirepub) { + my $c = new CGI::Cookie(-name => 'lonID', + -value => '', + -expires => '-10y',); + $r->header_out('Set-cookie' => $c); + } elsif (($handle eq '') && ($userdom ne '')) { + my $c = new CGI::Cookie(-name => 'lonID', + -value => '', + -expires => '-10y',); + $r->headers_out->add('Set-cookie' => $c); + } $r->send_http_header; return OK if $r->header_only; @@ -70,6 +97,23 @@ sub handler { return OK; } +# +# If browser sent an old cookie for which the session file had been removed +# check if configuration for user's domain has a portal URL set. If so +# switch user's log-in to the portal. +# + + if (($handle eq '') && ($userdom ne '')) { + my %domdefaults = &Apache::lonnet::get_domain_defaults($userdom); + if ($domdefaults{'portal_def'} =~ /^https?\:/) { + my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef, + {'redirect' => [0,$domdefaults{'portal_def'}],}); + my $end_page = &Apache::loncommon::end_page(); + $r->print($start_page.$end_page); + return OK; + } + } + $env{'form.firsturl'} =~ s/(`)/'/g; # -------------------------------- Prevent users from attempting to login twice @@ -353,11 +397,7 @@ lextkey=this.document.client.elements.le initkeys(); this.document.server.elements.upass0.value - =crypted(this.document.client.elements.upass$now.value.substr(0,15)); -this.document.server.elements.upass1.value - =crypted(this.document.client.elements.upass$now.value.substr(15,15)); -this.document.server.elements.upass2.value - =crypted(this.document.client.elements.upass$now.value.substr(30,15)); + =getCrypted(this.document.client.elements.upass$now.value); this.document.client.elements.uname.value=''; this.document.client.elements.upass$now.value=''; @@ -472,8 +512,6 @@ ENDSCRIPT - - @@ -524,7 +562,7 @@ LFORM $r->print(<
- The Learning Online Network with CAPA + The Learning Online Network with CAPA
HEADER } @@ -548,7 +586,7 @@ HEADER
ENDTOP if ($showmainlogo) { - $r->print(' '."\n"); + $r->print(' '."\n"); } $r->print(<