--- loncom/auth/migrateuser.pm 2020/10/22 19:23:22 1.48 +++ loncom/auth/migrateuser.pm 2021/05/04 18:47:37 1.50 @@ -1,7 +1,7 @@ # The LearningOnline Network # Starts a user off based of an existing token. # -# $Id: migrateuser.pm,v 1.48 2020/10/22 19:23:22 raeburn Exp $ +# $Id: migrateuser.pm,v 1.50 2021/05/04 18:47:37 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$/) && @@ -322,7 +324,7 @@ sub logout { &Apache::lonnet::log($env{'user.domain'}, $env{'user.name'}, $env{'user.home'}, - "Logout $ENV{'REMOTE_ADDR'}"); + "Logout $ip"); &Apache::loncommon::content_type($r,'text/html'); @@ -345,7 +347,7 @@ sub logout { } my $lonhost = $r->dir_config('lonHostID'); if (ref($data) eq 'HASH') { - %user_info=('ip' => $ENV{'REMOTE_ADDR'}, + %user_info=('ip' => $ip, 'domain' => $data->{'domain'}, 'username' => $data->{'username'}, 'home' => $data->{'home'}, @@ -541,7 +543,7 @@ sub do_server_switch { } sub log_switch { - my ($r,$data,$lti_env) = @_; + my ($r,$data,$lti_env,$ip) = @_; my $lonhost = $r->dir_config('lonHostID'); return unless ((ref($data) eq 'HASH') && (ref($lti_env) eq 'HASH')); my $now = time; @@ -557,7 +559,7 @@ sub log_switch { } else { $logmsg .= " (no role)"; } - $logmsg .= ' '.$ENV{'REMOTE_ADDR'}; + $logmsg .= ' '.$ip; &Apache::lonnet::log($data->{'domain'},$data->{'username'},$data->{'home'},$logmsg); } @@ -587,9 +589,10 @@ sub handler { } my ($home,@ids); @ids=&Apache::lonnet::current_machine_ids(); - if ($data{'ip'} ne $ENV{'REMOTE_ADDR'}) { + 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: '.$ENV{'REMOTE_ADDR'}.' for '.$data{'username'}.':'.$data{'domain'}); + $data{'ip'}.'; now: '.$ip.' for '.$data{'username'}.':'.$data{'domain'}); return &ip_changed($r,$data{'domain'},$data{'server'},\@ids,\%data); } if ($data{'loncfail'}) { @@ -680,7 +683,7 @@ sub handler { my $switchfrom = $data{'server'}; if (@conlosts) { if (grep(/^\Q$switchfrom\E$/,@conlosts)) { - &log_switch($r,\%data,$extra_env); + &log_switch($r,\%data,$extra_env,$ip); } } } @@ -770,7 +773,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'}; @@ -916,7 +919,7 @@ sub handler { $needslogout = 1; } if ($needslogout) { - &logout($r,$handle,\%data,$lti_env); + &logout($r,$ip,$handle,\%data,$lti_env); return OK; } }