--- loncom/auth/lonlogin.pm 2013/09/13 21:28:18 1.156 +++ 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.156 2013/09/13 21:28:18 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']); } @@ -103,11 +103,18 @@ sub handler { # ---------------------------------------------------- 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'}=''; } + +# ------ 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; @@ -120,17 +127,23 @@ sub handler { my $lonhost = $r->dir_config('lonHostID'); my $domain = &Apache::lonnet::default_login_domain(); if ($lonhost ne '') { - my $redirect = &check_loginvia($domain,$lonhost); - if ($redirect) { - $r->print($redirect); - return OK; - } + unless ($sessiondata{'sessionserver'}) { + my $redirect = &check_loginvia($domain,$lonhost); + if ($redirect) { + $r->print($redirect); + return OK; + } + } } - if (($env{'form.domain'}) && + 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'); @@ -142,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; @@ -354,6 +378,29 @@ ENDSCRIPT alink => "$alink", onload => 'javascript:enableInput();',); + my %defaultdomconf = &Apache::loncommon::get_domainconf($defdom); + my $headextra = $defaultdomconf{$defdom.'.login.headtag_'.$lonhost}; + my $headextra_exempt = $defaultdomconf{$domain.'.login.headtag_exempt_'.$lonhost}; + if ($headextra) { + my $omitextra; + if ($headextra_exempt ne '') { + my @exempt = split(',',$headextra_exempt); + my $ip = $ENV{'REMOTE_ADDR'}; + if (grep(/^\Q$ip\E$/,@exempt)) { + $omitextra = 1; + } + } + unless ($omitextra) { + my $confname = $defdom.'-domainconfig'; + if ($headextra =~ m{^\Q/res/$defdom/$confname/login/headtag/$lonhost/\E}) { + my $extra = &Apache::lonnet::getfile(&Apache::lonnet::filelocation("",$headextra)); + unless ($extra eq '-1') { + $js .= "\n".$extra."\n"; + } + } + } + } + $r->print(&Apache::loncommon::start_page('The LearningOnline Network with CAPA Login',$js, { 'redirect' => [$expire,'/adm/roles'], 'add_entries' => \%add_entries,