Diff for /loncom/auth/migrateuser.pm between versions 1.25.2.5 and 1.26

version 1.25.2.5, 2021/12/12 18:34:48 version 1.26, 2017/11/30 15:14:51
Line 30  package Apache::migrateuser; Line 30  package Apache::migrateuser;
   
 use strict;  use strict;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use Apache::Constants qw(:common :http :methods :remotehost);  use Apache::Constants qw(:common :http :methods);
 use Apache::lonauth;  use Apache::lonauth;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonlocal;  use Apache::lonlocal;
Line 53  sub goto_login { Line 53  sub goto_login {
 }  }
   
   
 sub sso_check {  sub sso_lti_check {
     my ($data) = @_;      my ($data) = @_;
     my %extra_env;      my %extra_env;
     if (ref($data) eq 'HASH') {      if (ref($data) eq 'HASH') {
Line 64  sub sso_check { Line 64  sub sso_check {
             $extra_env{'request.sso.reloginserver'} =               $extra_env{'request.sso.reloginserver'} = 
                 $data->{'sso.reloginserver'};                  $data->{'sso.reloginserver'};
         }          }
           if ($data->{'lti.login'}) {
               $extra_env{'request.lti.login'} = $data->{'lti.login'};
           }
           if ($data->{'lti.passbackid'}) {
               $extra_env{'request.lti.passbackid'} = $data->{'lti.passbackid'};
           }
           if ($data->{'lti.passbackurl'}) {
               $extra_env{'request.lti.passbackurl'} = $data->{'lti.passbackurl'};
           }
           if ($data->{'lti.rosterid'}) {
               $extra_env{'request.lti.rosterid'} = $data->{'lti.rosterid'};
           }
           if ($data->{'lti.rosterurl'}) {
               $extra_env{'request.lti.rosterurl'} = $data->{'lti.rosterurl'};
           }
     }      }
     return \%extra_env;      return \%extra_env;
 }  }
Line 161  sub ip_changed { Line 176  sub ip_changed {
                 if ($hostname) {                  if ($hostname) {
                     my $protocol = $Apache::lonnet::protocol{$switchto};                      my $protocol = $Apache::lonnet::protocol{$switchto};
                     $protocol = 'http' if ($protocol ne 'https');                      $protocol = 'http' if ($protocol ne 'https');
                     my $alias = &Apache::lonnet::use_proxy_alias($r,$switchto);  
                     $hostname = $alias if ($alias ne '');  
                     $url = $protocol.'://'.$hostname;                      $url = $protocol.'://'.$hostname;
                     if ($rule_in_effect eq 'balancer') {                      if ($rule_in_effect eq 'balancer') {
                         $message .= '<br />'.                          $message .= '<br />'.
Line 173  sub ip_changed { Line 186  sub ip_changed {
                     }                      }
                 }                  }
             }              }
             unless ($hosthere) {  
                 if (($dataref->{'balancer'}) && ($dataref->{'balcookie'})) {  
                     &Apache::lonnet::delbalcookie($dataref->{'balcookie'},$dataref->{'balancer'});  
                 }  
             }  
         }          }
         if ($dataref->{'sso.login'}) {          if ($dataref->{'sso.login'}) {
             $url .= '/adm/roles';              $url .= '/adm/roles';
Line 191  sub ip_changed { Line 199  sub ip_changed {
         my %info= (          my %info= (
                     'domain'          => $udom,                      'domain'          => $udom,
                     'username'        => $dataref->{'username'},                      'username'        => $dataref->{'username'},
                       'role'            => $dataref->{'role'},
                     'sessionserver'   => $lonhost,                      'sessionserver'   => $lonhost,
                   );                    );
         my @names = ('origurl','symb','role');          if ($dataref->{'origurl'}) {
         foreach my $name (@names) {              $info{'origurl'} = $dataref->{'origurl'};
             if ($dataref->{$name} ne '') {  
                 $info{$name} = $dataref->{$name};  
             }  
         }          }
         my $iptoken = &Apache::lonnet::tmpput(\%info,$switchto,'link');          if ($dataref->{'symb'}) {
               $info{'symb'} = $dataref->{'symb'};
           }
           my $iptoken = &Apache::lonnet::tmpput(\%info,$switchto);
         unless ($iptoken eq 'conlost') {          unless ($iptoken eq 'conlost') {
             $url .= (($url =~ /\?/) ? '&' : '?') . 'iptoken='.$iptoken;              $url .= ($url =~ /\?/) ? '&' : '?';
               $url .= 'iptoken='.$iptoken;
         }          }
         $r->print(&Apache::loncommon::start_page($title,undef,          $r->print(&Apache::loncommon::start_page($title,undef,
                                                  {'redirect' =>                                                   {'redirect' =>
Line 234  sub handler { Line 244  sub handler {
     if (!defined($data{'username'}) || !defined($data{'domain'})) {      if (!defined($data{'username'}) || !defined($data{'domain'})) {
         return &goto_login($r);          return &goto_login($r);
     }      }
     my $ip = &Apache::lonnet::get_requestor_ip($r,REMOTE_NOLOOKUP);       if ($data{'ip'} ne $ENV{'REMOTE_ADDR'}) {
     if ($data{'ip'} ne $ip) {  
         &Apache::lonnet::logthis('IP change when session migration requested -- was: '.          &Apache::lonnet::logthis('IP change when session migration requested -- was: '.
                  $data{'ip'}.'; now: '.$ip.' for '.$data{'username'}.':'.$data{'domain'});                   $data{'ip'}.'; now: '.$ENV{'REMOTE_ADDR'}.' for '.$data{'username'}.':'.$data{'domain'});
  return &ip_changed($r,$data{'domain'},$data{'server'},\%data);   return &ip_changed($r,$data{'domain'},$data{'server'},\%data);
     }      }
   
Line 249  sub handler { Line 258  sub handler {
     }      }
     if ($home =~ /(con_lost|no_such_host)/) { return &goto_login($r,$udom); }      if ($home =~ /(con_lost|no_such_host)/) { return &goto_login($r,$udom); }
   
     my $extra_env = &sso_check(\%data);      my $extra_env = &sso_lti_check(\%data);
     if (($data{'balancer'}) && ($data{'server'}) && ($data{'balcookie'})) {  
         if (ref($extra_env) eq 'HASH') {  
             $extra_env->{'request.balancercookie'} = $data{'server'}.':'.$data{'balcookie'};  
         } else {  
             $extra_env = { 'request.balancercookie' => $data{'server'}.':'.$data{'balcookie'} };  
         }  
     } elsif (($data{'server'}) && ($data{'otherbalcookie'})) {  
         my ($balancer,$balcookie) = split(/:/,$data{'otherbalcookie'});  
         if (defined(&Apache::lonnet::hostname($balancer)) && $balcookie =~ /^[a-f0-9]{32}$/) {  
             my $baldom = &Apache::lonnet::host_domain($balancer);  
             if (&Apache::lonnet::shared_institution($baldom)) {  
                 my $cookieid = join('_',$udom,$data{'username'},$balcookie);  
                 &Apache::lonnet::updatebalcookie($cookieid,$balancer,$data{'server'});  
                 if (ref($extra_env) eq 'HASH') {  
                     $extra_env->{'request.balancercookie'} = $data{'otherbalcookie'};  
                 } else {  
                     $extra_env = { 'request.balancercookie' => $data{'otherbalcookie'} };  
                 }  
             }  
         }  
     }  
   
     my (%form,$cid);      my %form;
     if ($data{'symb'} ne '') {      if ($data{'symb'} ne '') {
         $form{'symb'} = $data{'symb'};          $form{'symb'} = $data{'symb'};
     }      }
Line 282  sub handler { Line 270  sub handler {
     if ($data{'noloadbalance'} ne '') {      if ($data{'noloadbalance'} ne '') {
         $form{'noloadbalance'} = $data{'noloadbalance'};          $form{'noloadbalance'} = $data{'noloadbalance'};
     }      }
     if ($data{'role'}) {  
         if ($data{'role'} =~ m{\./($match_domain)/($match_courseid)(?:/\w+|$)}) {  
             unless (&Apache::lonnet::homeserver($2,$1) eq 'no_host') {  
                 $cid = $1.'_'.$2;  
             }  
         }  
     } else {  
         my ($handle,$expirepub);  
  $handle = &Apache::lonnet::check_for_valid_session($r);  
   
 # For "public user" - remove any existing "public" cookie so actual user is logged in.      if (!$data{'role'}) {
         if ($handle) {   my $handle = &Apache::lonnet::check_for_valid_session($r);
             if ($handle=~/^publicuser\_/) {  
                 my $lonidsdir=$r->dir_config('lonIDsDir');  
                 if ($lonidsdir ne '') {  
                     unlink("$lonidsdir/$handle.id");  
                 }  
                 undef($handle);  
                 $expirepub = 1;  
             }  
         }  
  if ($handle) {   if ($handle) {
     &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),      &Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
      $handle);       $handle);
Line 319  sub handler { Line 289  sub handler {
                 $desturl = $data{'origurl'};                  $desturl = $data{'origurl'};
             }              }
     &Apache::lonauth::success($r,$data{'username'},$data{'domain'},      &Apache::lonauth::success($r,$data{'username'},$data{'domain'},
       $home,$desturl,$extra_env,\%form,'',        $home,$desturl,$extra_env,\%form);
                                       $expirepub);  
   
  }   }
  return OK;   return OK;
Line 332  sub handler { Line 301  sub handler {
         $next_url .= '&amp;orgurl='.&escape($data{'origurl'});          $next_url .= '&amp;orgurl='.&escape($data{'origurl'});
     }      }
     &Apache::lonauth::success($r,$data{'username'},$data{'domain'},$home,      &Apache::lonauth::success($r,$data{'username'},$data{'domain'},$home,
       $next_url,$extra_env,\%form,$cid);        $next_url,$extra_env,\%form);
     return OK;      return OK;
 }  }
   

Removed from v.1.25.2.5  
changed lines
  Added in v.1.26


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>