Diff for /loncom/lti/ltiauth.pm between versions 1.20 and 1.29

version 1.20, 2021/08/04 19:59:11 version 1.29, 2022/02/01 19:54:36
Line 68  sub handler { Line 68  sub handler {
         }          }
     }      }
 #  #
 # Check for existing session, and restored temporarily  # Check for existing session, and restore temporarily
 # deleted form items to %env, if session exists.  # deleted form items to %env, if session exists.
 #  #
     if ($handle ne '') {      if ($handle ne '') {
Line 197  sub handler { Line 197  sub handler {
                                 delete($env{'form.'.$key});                                  delete($env{'form.'.$key});
                             }                              }
                             my $ltoken = &Apache::lonnet::tmpput({'linkprot' => $itemid.$ltitype.':'.$tail},                              my $ltoken = &Apache::lonnet::tmpput({'linkprot' => $itemid.$ltitype.':'.$tail},
                                                                  $lonhost);                                                                   $lonhost,'link');
                             if ($ltoken) {                              if ($ltoken) {
                                 $r->internal_redirect($tail.'?ltoken='.$ltoken);                                  $r->internal_redirect($tail.'?ltoken='.$ltoken);
                                 $r->set_handlers('PerlHandler'=> undef);                                  $r->set_handlers('PerlHandler'=> undef);
Line 495  sub handler { Line 495  sub handler {
     if ($sourcecrs ne '') {      if ($sourcecrs ne '') {
         %consumers = &Apache::lonnet::get_dom('lticonsumers',[$sourcecrs],$cdom);          %consumers = &Apache::lonnet::get_dom('lticonsumers',[$sourcecrs],$cdom);
         if (exists($consumers{$sourcecrs})) {          if (exists($consumers{$sourcecrs})) {
             if ($consumers{$sourcecrs} =~ /^$match_courseid$/) {              if ($consumers{$sourcecrs} =~ /^\Q$itemid:\E($match_courseid)$/) {
                 my $crshome = &Apache::lonnet::homeserver($consumers{$sourcecrs},$cdom);                  my $storedcnum = $1;
                   my $crshome = &Apache::lonnet::homeserver($storedcnum,$cdom);
                 if ($crshome =~ /(con_lost|no_host|no_such_host)/) {                  if ($crshome =~ /(con_lost|no_host|no_such_host)/) {
                     &invalid_request($r,20);                      &invalid_request($r,20);
                     return OK;                      return OK;
                 } else {                  } else {
                     $posscnum = $consumers{$sourcecrs};                      $posscnum = $storedcnum;
                 }                  }
             }              }
         }          }
Line 613  sub handler { Line 614  sub handler {
   
     my $reqcrs;      my $reqcrs;
     if ($cnum eq '') {      if ($cnum eq '') {
         if ((@ltiroles) && ($lti{$itemid}{'mapcrs'}) &&          if ($lti{$itemid}{'crsinc'}) {
             ($ltiroles[0] eq 'Instructor') && ($lcroles[0] eq 'cc') && ($lti{$itemid}{'makecrs'})) {              if ((@ltiroles) && ($lti{$itemid}{'mapcrs'}) &&
             my (%can_request,%request_domains);                  ($ltiroles[0] eq 'Instructor') && ($lcroles[0] eq 'cc') && ($lti{$itemid}{'makecrs'})) {
             &Apache::lonnet::check_can_request($cdom,\%can_request,\%request_domains,$uname,$udom);                  my (%can_request,%request_domains);
             if ($can_request{'lti'}) {                  &Apache::lonnet::check_can_request($cdom,\%can_request,\%request_domains,$uname,$udom);
                 $reqcrs = 1;                  if ($can_request{'lti'}) {
                 &lti_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,                      $reqcrs = 1;
                              $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,                      &lti_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,
                              $reqcrs,$sourcecrs);                                   $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,
                                    $reqcrs,$sourcecrs);
                   } else {
                       &invalid_request($r,27);
                   }
             } else {              } else {
                 &invalid_request($r,27);                  &invalid_request($r,28);
             }              }
         } else {          } else {
             &invalid_request($r,28);              &lti_session($r,$itemid,$uname,$udom,$uhome,$lonhost,undef,$mapurl,$tail,
                            $symb,$cdom,$cnum,$params,\@ltiroles,$lti{$itemid},\@lcroles,
                            $reqcrs,$sourcecrs);
         }          }
         return OK;          return OK;
     }      }
Line 634  sub handler { Line 641  sub handler {
 #  #
 # If LON-CAPA course is a Community, and LON-CAPA role  # If LON-CAPA course is a Community, and LON-CAPA role
 # indicated is cc, change role indicated to co.  # indicated is cc, change role indicated to co.
 #   #
   
     my %crsenv;      my %crsenv;
     if ($lcroles[0] eq 'cc') {      if ($lcroles[0] eq 'cc') {
Line 739  sub handler { Line 746  sub handler {
     }      }
   
 #  #
 # Store consumer-to-LON-CAPA course mapping  # Retrieve course type of LON-CAPA course to check if mapping from a Consumer
   # course identifier permitted for this type of course (one of: official,
   # unofficial, community, textbook, placement or lti.
   #
   
       unless (%crsenv) {
           %crsenv = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
       }
       my $crstype = lc($crsenv{'type'});
       if ($crstype eq '') {
           $crstype = 'course';
       }
       if ($crstype eq 'course') {
           if ($crsenv{'internal.coursecode'}) {
               $crstype = 'official';
           } elsif ($crsenv{'internal.textbook'}) {
               $crstype = 'textbook';
           } elsif ($crsenv{'internal.lti'}) {
               $crstype = 'lti';
           } else {
               $crstype = 'unofficial';
           }
       }
   
   #
   # Store consumer-to-LON-CAPA course mapping if permitted
 #  #
   
     if (($sourcecrs ne '')  && ($consumers{$sourcecrs} eq '') && ($cnum ne '')) {      if (($lti{$itemid}{'storecrs'}) && ($sourcecrs ne '') && 
         &Apache::lonnet::put_dom('lticonsumers',{ $sourcecrs => $cnum },$cdom);          ($consumers{$sourcecrs} eq '') && ($cnum ne '')) {
           if (ref($lti{$itemid}{'mapcrstype'}) eq 'ARRAY') {
               if (grep(/^$crstype$/,@{$lti{$itemid}{'mapcrstype'}})) {
                   &Apache::lonnet::put_dom('lticonsumers',{ $sourcecrs => $itemid.':'.$cnum },$cdom);
               }
           }
     }      }
   
 #  #
Line 854  sub lti_session { Line 891  sub lti_session {
             my $lowest_load;              my $lowest_load;
             ($otherserver,undef,undef,undef,$lowest_load) = &Apache::lonnet::choose_server($udom);              ($otherserver,undef,undef,undef,$lowest_load) = &Apache::lonnet::choose_server($udom);
             if ($lowest_load > 100) {              if ($lowest_load > 100) {
                 $otherserver = &Apache::lonnet::spareserver($lowest_load,$lowest_load,1,$udom);                  $otherserver = &Apache::lonnet::spareserver($r,$lowest_load,$lowest_load,1,$udom);
             }              }
         }          }
         if ($otherserver ne '') {          if ($otherserver ne '') {
Line 894  sub lti_session { Line 931  sub lti_session {
                 $env{'request.lti.uri'} = $tail;                  $env{'request.lti.uri'} = $tail;
             } else {              } else {
                 unless ($tail eq '/adm/roles') {                  unless ($tail eq '/adm/roles') {
                     $env{'form.origurl'} = '/adm/navmaps';                      if ($cnum) {
                           $env{'form.origurl'} = '/adm/navmaps';
                       }
                 }                  }
             }              }
         }          }
Line 930  sub lti_session { Line 969  sub lti_session {
         if ($params->{'launch_presentation_document_target'}) {          if ($params->{'launch_presentation_document_target'}) {
             $env{'request.lti.target'} = $params->{'launch_presentation_document_target'};              $env{'request.lti.target'} = $params->{'launch_presentation_document_target'};
         }          }
         foreach my $key (%{$params}) {          foreach my $key (keys(%{$params})) {
             delete($env{'form.'.$key});              delete($env{'form.'.$key});
         }          }
         my $redirecturl = '/adm/switchserver';          my $redirecturl = '/adm/switchserver';
Line 942  sub lti_session { Line 981  sub lti_session {
     } else {      } else {
         # need to login them in, so generate the need data that          # need to login them in, so generate the need data that
         # migrate expects to do login          # migrate expects to do login
         foreach my $key (%{$params}) {          foreach my $key (keys(%{$params})) {
             delete($env{'form.'.$key});              delete($env{'form.'.$key});
         }          }
         if (($ltihash->{'callback'}) && ($params->{$ltihash->{'callback'}})) {          if (($ltihash->{'callback'}) && ($params->{$ltihash->{'callback'}})) {
Line 1002  sub lti_session { Line 1041  sub lti_session {
                 $info{'origurl'} = $tail;                  $info{'origurl'} = $tail;
             } else {              } else {
                 unless ($tail eq '/adm/roles') {                  unless ($tail eq '/adm/roles') {
                     $info{'origurl'} = '/adm/navmaps';                      if ($cnum) {
                           $info{'origurl'} = '/adm/navmaps';
                       }
                 }                  }
             }              }
         }          }
Line 1036  sub course_from_tinyurl { Line 1077  sub course_from_tinyurl {
     my ($tail) = @_;      my ($tail) = @_;
     my ($urlcdom,$urlcnum);      my ($urlcdom,$urlcnum);
     if ($tail =~ m{^/tiny/($match_domain)/(\w+)$}) {      if ($tail =~ m{^/tiny/($match_domain)/(\w+)$}) {
         my ($urlcdom,$key) = ($1,$2);          ($urlcdom,my $key) = ($1,$2);
         my $tinyurl;          my $tinyurl;
         my ($result,$cached)=&Apache::lonnet::is_cached_new('tiny',$urlcdom."\0".$key);          my ($result,$cached)=&Apache::lonnet::is_cached_new('tiny',$urlcdom."\0".$key);
         if (defined($cached)) {          if (defined($cached)) {

Removed from v.1.20  
changed lines
  Added in v.1.29


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