[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /auth lonlogin.pm
raeburn
raeburn at source.lon-capa.org
Mon Sep 3 21:10:29 EDT 2018
raeburn Tue Sep 4 01:10:29 2018 EDT
Modified files: (Branch: version_2_11_X)
/loncom/auth lonlogin.pm
Log:
- For 2.11
Backport 1.169, 1.170 (modified), 1.171.
Index: loncom/auth/lonlogin.pm
diff -u loncom/auth/lonlogin.pm:1.158.2.6 loncom/auth/lonlogin.pm:1.158.2.7
--- loncom/auth/lonlogin.pm:1.158.2.6 Sat Aug 13 20:11:58 2016
+++ loncom/auth/lonlogin.pm Tue Sep 4 01:10:29 2018
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Login Screen
#
-# $Id: lonlogin.pm,v 1.158.2.6 2016/08/13 20:11:58 raeburn Exp $
+# $Id: lonlogin.pm,v 1.158.2.7 2018/09/04 01:10:29 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,6 +38,7 @@
use Apache::migrateuser();
use lib '/home/httpd/lib/perl/';
use LONCAPA;
+use CGI::Cookie();
sub handler {
my $r = shift;
@@ -56,9 +57,35 @@
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,35 +97,44 @@
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
- my $handle = &Apache::lonnet::check_for_valid_session($r);
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");
- } else {
-# Indeed, a valid token is found
- &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
- .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'
- .'<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].',
- '<a href="'.$dest.'">','</a>','<a href="/adm/logout">','</a>').'</p>'
- .$end_page
- );
- return OK;
- }
+ &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
+ .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'
+ .'<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].',
+ '<a href="'.$dest.'">','</a>','<a href="/adm/logout">','</a>').'</p>'
+ .$end_page
+ );
+ return OK;
}
# ---------------------------------------------------- No valid token, continue
More information about the LON-CAPA-cvs
mailing list