--- loncom/auth/migrateuser.pm 2020/12/18 15:23:03 1.49 +++ loncom/auth/migrateuser.pm 2021/08/07 20:49:10 1.51 @@ -1,7 +1,7 @@ # The LearningOnline Network # Starts a user off based of an existing token. # -# $Id: migrateuser.pm,v 1.49 2020/12/18 15:23:03 raeburn Exp $ +# $Id: migrateuser.pm,v 1.51 2021/08/07 20:49:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,7 +30,7 @@ package Apache::migrateuser; use strict; use LONCAPA qw(:DEFAULT :match); -use Apache::Constants qw(:common :http :methods); +use Apache::Constants qw(:common :http :methods :remotehost); use Apache::lonauth; use Apache::lonnet; use Apache::loncommon; @@ -253,6 +253,8 @@ sub ip_changed { if ($hostname) { my $protocol = $Apache::lonnet::protocol{$switchto}; $protocol = 'http' if ($protocol ne 'https'); + my $alias = &Apache::lonnet::use_proxy_alias($r,$switchto); + $hostname = $alias if ($alias ne ''); $url = $protocol.'://'.$hostname; if ($rule_in_effect eq 'balancer') { $message .= '
'. @@ -308,7 +310,7 @@ sub ip_changed { } sub logout { - my ($r,$handle,$data,$lti_env) = @_; + my ($r,$ip,$handle,$data,$lti_env) = @_; my $lonidsdir=$r->dir_config('lonIDsDir'); if (unlink("$lonidsdir/$handle.id")) { if (($env{'user.linkedenv'} =~ /^[a-f0-9]+_linked$/) && @@ -319,7 +321,6 @@ sub logout { } my %temp=('logout' => time); &Apache::lonnet::put('email_status',\%temp); - my $ip = &Apache::lonnet::get_requestor_ip(); &Apache::lonnet::log($env{'user.domain'}, $env{'user.name'}, $env{'user.home'}, @@ -588,7 +589,7 @@ sub handler { } my ($home,@ids); @ids=&Apache::lonnet::current_machine_ids(); - my $ip = &Apache::lonnet::get_requestor_ip(); + my $ip = &Apache::lonnet::get_requestor_ip($r,REMOTE_NOLOOKUP); if ($data{'ip'} ne $ip) { &Apache::lonnet::logthis('IP change when session migration requested -- was: '. $data{'ip'}.'; now: '.$ip.' for '.$data{'username'}.':'.$data{'domain'}); @@ -710,9 +711,6 @@ sub handler { $handle); if ($data{'linkprot'} ne '') { my ($linkprotector,$deeplink) = split(/:/,$data{'linkprot'},2); - if ($deeplink ne '') { - &Apache::lonnet::appenv({'request.deeplink.login' => $deeplink}); - } if ($env{'user.linkprotector'}) { my @protectors = split(/,/,$env{'user.linkprotector'}); unless (grep(/^\Q$linkprotector\E$/,@protectors)) { @@ -733,19 +731,19 @@ sub handler { } else { &Apache::lonnet::appenv({'user.linkproturi' => $deeplink}); } - } elsif ($data{'deeplink.login'}) { + } elsif ($data{'linkkey'}) { my $deeplink = $data{'deeplink.login'}; - if ($data{'linkkey'}) { - my $linkkey = $data{'linkkey'}; - if ($env{'user.deeplinkkey'}) { - my @linkkeys = split(/,/,$env{'user.deeplinkkey'}); - unless (grep(/^\Q$linkkey\E$/,@linkkeys)) { - push(@linkkeys,$linkkey); - &Apache::lonnet::appenv({'user.deeplinkkey' => join(',',sort(@linkkeys))}); - } - } else { - &Apache::lonnet::appenv({'user.deeplinkkey' => $linkkey}); + my $linkkey = $data{'linkkey'}; + if ($env{'user.deeplinkkey'}) { + my @linkkeys = split(/,/,$env{'user.deeplinkkey'}); + unless (grep(/^\Q$linkkey\E$/,@linkkeys)) { + push(@linkkeys,$linkkey); + &Apache::lonnet::appenv({'user.deeplinkkey' => join(',',sort(@linkkeys))}); } + } else { + &Apache::lonnet::appenv({'user.deeplinkkey' => $linkkey}); + } + if ($deeplink) { if ($env{'user.keyedlinkuri'}) { my @keyeduris = split(/,/,$env{'user.keyedlinkuri'}); unless (grep(/^\Q$deeplink\E$/,@keyeduris)) { @@ -756,6 +754,8 @@ sub handler { &Apache::lonnet::appenv({'user.keyedlinkuri' => $deeplink}); } } + } + if ($data{'deeplink.login'}) { &Apache::lonnet::appenv({'request.deeplink.login' => $data{'deeplink.login'}}); } if ($data{'lti.login'}) { @@ -772,7 +772,7 @@ sub handler { # (and session) or has an LTI session cookie for a different username, # logout the existing session, and start a new one if ($needslogout) { - &logout($r,$handle,\%data,$lti_env); + &logout($r,$ip,$handle,\%data,$lti_env); } elsif (($data{'lti.reqcrs'}) && ($data{'lti.reqrole'} eq 'cc')) { $form{'lti.reqcrs'} = $data{'lti.reqcrs'}; $form{'lti.reqrole'} = $data{'lti.reqrole'}; @@ -918,7 +918,7 @@ sub handler { $needslogout = 1; } if ($needslogout) { - &logout($r,$handle,\%data,$lti_env); + &logout($r,$ip,$handle,\%data,$lti_env); return OK; } }