--- loncom/auth/lonlogin.pm 2013/01/28 02:00:58 1.155
+++ loncom/auth/lonlogin.pm 2016/08/11 00:37:33 1.158.2.5
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Login Screen
#
-# $Id: lonlogin.pm,v 1.155 2013/01/28 02:00:58 raeburn Exp $
+# $Id: lonlogin.pm,v 1.158.2.5 2016/08/11 00:37:33 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,33 +103,51 @@ 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'});
+ unless ($sessiondata{'sessionserver'}) {
+ my $delete = &Apache::lonnet::tmpdel($env{'form.iptoken'});
+ delete($env{'form.iptoken'});
+ }
+ }
# ----------------------------------------------------------- Process Interface
$env{'form.interface'}=~s/\W//g;
- my $httpbrowser=$ENV{"HTTP_USER_AGENT"};
+ (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();
+ my $defdom = $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');
@@ -141,9 +159,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;
@@ -197,6 +226,12 @@ sub handler {
}
$tokenextras .= '&symb='.&escape($env{'form.symb'});
}
+ if ($env{'form.iptoken'}) {
+ if (!$tokenextras) {
+ $tokenextras = '&&';
+ }
+ $tokenextras .= '&iptoken='.&escape($env{'form.iptoken'});
+ }
my $logtoken=Apache::lonnet::reply(
'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras,
$lonhost);
@@ -318,11 +353,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='';
@@ -353,6 +384,40 @@ ENDSCRIPT
alink => "$alink",
onload => 'javascript:enableInput();',);
+ my ($lonhost_in_use,$headextra,$headextra_exempt,@hosts,%defaultdomconf);
+ @hosts = &Apache::lonnet::current_machine_ids();
+ $lonhost_in_use = $lonhost;
+ if (@hosts > 1) {
+ foreach my $hostid (@hosts) {
+ if (&Apache::lonnet::host_domain($hostid) eq $defdom) {
+ $lonhost_in_use = $hostid;
+ last;
+ }
+ }
+ }
+ %defaultdomconf = &Apache::loncommon::get_domainconf($defdom);
+ $headextra = $defaultdomconf{$defdom.'.login.headtag_'.$lonhost_in_use};
+ $headextra_exempt = $defaultdomconf{$domain.'.login.headtag_exempt_'.$lonhost_in_use};
+ 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_in_use/\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,
@@ -403,8 +468,6 @@ ENDSCRIPT
-
-
@@ -433,16 +496,20 @@ ENDSERVERFORM
$authdomain,\$helpdeskscript,
$showhelpdesk,\@possdoms);
+ my $mobileargs;
+ if ($clientmobile) {
+ $mobileargs = 'autocapitalize="off" autocorrect="off"';
+ }
my $loginform=(<
:
-
+
:
:
-
+
LFORM