Diff for /loncom/auth/migrateuser.pm between versions 1.25.2.2 and 1.27

version 1.25.2.2, 2020/05/02 17:35:40 version 1.27, 2018/03/23 01:01:29
Line 35  use Apache::lonauth; Line 35  use Apache::lonauth;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonlogin();  use Apache::lonlogin();
   use Apache::ltiauth;
   
 sub goto_login {  sub goto_login {
     my ($r,$domain) = @_;      my ($r,$domain,$data) = @_;
     &Apache::loncommon::content_type($r,'text/html');      if ((ref($data) eq 'HASH') && ($data->{'lti.login'})) {
     $r->send_http_header;          &Apache::ltiauth::invalid_request($r,'22');
     my $url = '/adm/login';      } else {
     if ($domain) {          &Apache::loncommon::content_type($r,'text/html');
         $url .= '?domain='.$domain;          $r->send_http_header;
     }          my $url = '/adm/login';
     $r->print(&Apache::loncommon::start_page('Going to login',undef,          if ($domain) {
      {'redirect' => [0,$url],}).              $url .= '?domain='.$domain;
       '<h1>'.&mt('One moment please...').'</h1>'.          }
       '<p>'.&mt('Transferring to login page.').'</p>'.          $r->print(&Apache::loncommon::start_page('Going to login',undef,
       &Apache::loncommon::end_page());           {'redirect' => [0,$url],}).
             '<h1>'.&mt('One moment please...').'</h1>'.
             '<p>'.&mt('Transferring to login page.').'</p>'.
             &Apache::loncommon::end_page());
       }
     return OK;      return OK;
 }  }
   
   
 sub sso_check {  sub sso_check {
     my ($data) = @_;      my ($data) = @_;
     my %extra_env;      my %extra_env;
Line 68  sub sso_check { Line 72  sub sso_check {
     return \%extra_env;      return \%extra_env;
 }  }
   
   sub lti_check {
       my ($data) = @_;
       my %lti_env;
       if (ref($data) eq 'HASH') {
           if ($data->{'lti.login'}) {
               $lti_env{'request.lti.login'} = $data->{'lti.login'};
               if ($data->{'lti.reqcrs'}) {
                   $lti_env{'request.lti.reqcrs'} = $data->{'lti.reqcrs'};
               }
               if ($data->{'lti.reqrole'}) {
                   $lti_env{'request.lti.reqrole'} = $data->{'lti.reqrole'};
               }
               if ($data->{'lti.selfenrollrole'}) {
                   $lti_env{'request.lti.selfenrollrole'} = $data->{'lti.selfenrollrole'};
               }
           }
           if ($data->{'lti.passbackid'}) {
               $lti_env{'request.lti.passbackid'} = $data->{'lti.passbackid'};
           }
           if ($data->{'lti.passbackurl'}) {
               $lti_env{'request.lti.passbackurl'} = $data->{'lti.passbackurl'};
           }
           if ($data->{'lti.rosterid'}) {
               $lti_env{'request.lti.rosterid'} = $data->{'lti.rosterid'};
           }
           if ($data->{'lti.rosterurl'}) {
               $lti_env{'request.lti.rosterurl'} = $data->{'lti.rosterurl'};
           }
       }
       return \%lti_env;
   }
   
 sub ip_changed {  sub ip_changed {
     my ($r,$udom,$camefrom,$dataref) = @_;      my ($r,$udom,$camefrom,$dataref) = @_;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
Line 171  sub ip_changed { Line 207  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 228  sub handler { Line 259  sub handler {
     &Apache::lonlocal::get_language_handle($r);      &Apache::lonlocal::get_language_handle($r);
   
     if ($delete ne 'ok') {      if ($delete ne 'ok') {
  return &goto_login($r);   return &goto_login($r,undef,\%data);
     }      }
   
     if (!defined($data{'username'}) || !defined($data{'domain'})) {      if (!defined($data{'username'}) || !defined($data{'domain'})) {
         return &goto_login($r);          return &goto_login($r,undef,\%data);
     }      }
     if ($data{'ip'} ne $ENV{'REMOTE_ADDR'}) {      if ($data{'ip'} ne $ENV{'REMOTE_ADDR'}) {
         &Apache::lonnet::logthis('IP change when session migration requested -- was: '.          &Apache::lonnet::logthis('IP change when session migration requested -- was: '.
Line 246  sub handler { Line 277  sub handler {
     if (&Apache::lonnet::domain($data{'domain'})) {      if (&Apache::lonnet::domain($data{'domain'})) {
         $udom=$data{'domain'};          $udom=$data{'domain'};
     }      }
     if ($home =~ /(con_lost|no_such_host)/) { return &goto_login($r,$udom); }      if ($home =~ /(con_lost|no_such_host)/) { return &goto_login($r,$udom,\%data); }
   
     my $extra_env = &sso_check(\%data);      my $sso_env = &sso_check(\%data);
     if (($data{'balancer'}) && ($data{'server'}) && ($data{'balcookie'})) {      my $lti_env = &lti_check(\%data);
         if (ref($extra_env) eq 'HASH') {  
             $extra_env->{'request.balancercookie'} = $data{'server'}.':'.$data{'balcookie'};      my $extra_env;
         } else {      if ((ref($sso_env) eq 'HASH') && (keys(%{$sso_env}))) {
             $extra_env = { 'request.balancercookie' => $data{'server'}.':'.$data{'balcookie'} };          $extra_env = $sso_env;
         }      } elsif ((ref($lti_env) eq 'HASH') && (keys(%{$lti_env}))) {
           $extra_env = $lti_env;
     }      }
   
     my (%form,$cid);      my %form;
     if ($data{'symb'} ne '') {      if ($data{'symb'} ne '') {
         $form{'symb'} = $data{'symb'};          $form{'symb'} = $data{'symb'};
     }      }
Line 267  sub handler { Line 299  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+|$)}) {      if (!$data{'role'}) {
             unless (&Apache::lonnet::homeserver($2,$1) eq 'no_host') {  
                 $cid = $1.'_'.$2;  
             }  
         }  
     } else {  
  my $handle = &Apache::lonnet::check_for_valid_session($r);   my $handle = &Apache::lonnet::check_for_valid_session($r);
  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);
             if ($data{'origurl'} ne '') {  #FIXME if user is not currently logged in as an LTI log-in log them out.
               if ($data{'lti.login'}) {
                   if (($data{'lti.reqcrs'}) && ($data{'lti.reqrole'} eq 'cc')) {
                       $form{'lti.reqcrs'} = $data{'lti.reqcrs'};
                       $form{'lti.reqrole'} = $data{'lti.reqrole'};
                       $form{'lti.sourcecrs'} = $data{'lti.sourcecrs'};
                       &Apache::loncommon::content_type($r,'text/html');
                       $r->send_http_header;
                       &Apache::ltiauth::lti_reqcrs($r,$data{'domain'},\%form,$data{'username'},$data{'domain'});
                   } elsif ($data{'lti.selfenrollrole'}) {
                       if (&Apache::ltiauth::lti_enroll($data{'username'},data{'domain'},
                                                    $data{'lti.selfenrollrole'}) eq 'ok') {
                           my $url = '/adm/roles?selectrole=1&'.
                                     &escape($data{'lti.selfenrollrole'}).'=1';
                           if ($data{'origurl'} =~ m{/default_\d+\.sequence$}) {
                               $url .= '&orgurl='.$data{'origurl'}.'&navmap=1';
                           } elsif ($data{'origurl'} ne '') {
                               $url .= '&orgurl='.$data{'origurl'};
                           }
                           $r->internal_redirect($url);
                       } else {
                           &Apache::ltiauth::invalid_request($r,23);
                       }
                   } elsif ($data{'origurl'} ne '') {
                       my $url = $data{'origurl'};
                       if ($url =~ m{/default_\d+\.sequence$}) {
                           $url .= (($url =~/\?/)?'&':'?').'navmap=1';
                       }
                       $r->internal_redirect($url);
                   }
               } elsif ($data{'origurl'} ne '') {
                 $r->internal_redirect($data{'origurl'});                  $r->internal_redirect($data{'origurl'});
             } elsif ($env{'request.course.id'}) {              } elsif ($env{'request.course.id'}) {
                 $r->internal_redirect('/adm/navmaps');                  $r->internal_redirect('/adm/navmaps');
Line 289  sub handler { Line 346  sub handler {
             my $desturl = '/adm/roles';              my $desturl = '/adm/roles';
             if ($data{'origurl'} ne '') {              if ($data{'origurl'} ne '') {
                 $desturl = $data{'origurl'};                  $desturl = $data{'origurl'};
                   if ($data{'lti.login'}) {
                       $desturl = $data{'origurl'};
                       if ($desturl =~ m{/default_\d+\.sequence$}) {
                           $desturl .= (($desturl =~/\?/)?'&':'?').'navmap=1';
                       }
                   }
               }
               my $skipcritical;
               if (($data{'lti.login'}) && ($data{'lti.reqcrs'}) &&
                   ($data{'lti.reqrole'} eq 'cc')) {
                   $skipcritical = 1;
             }              }
     &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,$skipcritical);
   
  }   }
  return OK;   return OK;
   
     }      }
   
     my $next_url='/adm/roles?selectrole=1&amp;'.&escape($data{'role'}).'=1';      my $next_url='/adm/roles?selectrole=1&amp;'.&escape($data{'role'}).'=1';
Line 303  sub handler { Line 369  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.2  
changed lines
  Added in v.1.27


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