Diff for /loncom/auth/lonlogin.pm between versions 1.199 and 1.203

version 1.199, 2022/06/18 02:10:18 version 1.203, 2022/08/30 12:25:03
Line 68  sub handler { Line 68  sub handler {
             $env{'form.ltoken'} = $info{'ltoken'};              $env{'form.ltoken'} = $info{'ltoken'};
         } elsif ($info{'linkprot'}) {          } elsif ($info{'linkprot'}) {
             $env{'form.linkprot'} = $info{'linkprot'};              $env{'form.linkprot'} = $info{'linkprot'};
             if ($info{'linkprotuser'} ne '') {              foreach my $item ('linkprotuser','linkprotexit') {
                 $env{'form.linkprotuser'} = $info{'linkprotuser'};                  if ($info{$item} ne '') {
                       $env{'form.'.$item} = $info{$item};
                   }
             }              }
         } elsif ($info{'linkkey'} ne '') {          } elsif ($info{'linkkey'} ne '') {
             $env{'form.linkkey'} = $info{'linkkey'};              $env{'form.linkkey'} = $info{'linkkey'};
Line 184  sub handler { Line 186  sub handler {
                     $link_info{'ltoken'} = $env{'form.ltoken'};                      $link_info{'ltoken'} = $env{'form.ltoken'};
                 } elsif ($env{'form.linkprot'}) {                  } elsif ($env{'form.linkprot'}) {
                     $link_info{'linkprot'} = $env{'form.linkprot'};                      $link_info{'linkprot'} = $env{'form.linkprot'};
                     if ($env{'form.linkprotuser'} ne '') {                      foreach my $item ('linkprotuser','linkprotexit') {
                         $link_info{'linkprotuser'} = $env{'form.linkprotuser'};                          if ($env{'form.'.$item} ne '') {
                               $link_info{$item} = $env{'form.'.$item};
                           }
                     }                      }
                 } elsif ($env{'form.linkkey'} ne '') {                  } elsif ($env{'form.linkkey'} ne '') {
                     $link_info{'linkkey'} = $env{'form.linkkey'};                      $link_info{'linkkey'} = $env{'form.linkkey'};
Line 255  sub handler { Line 259  sub handler {
             $dest = &HTML::Entities::encode($env{'form.firsturl'},'\'"<>&');              $dest = &HTML::Entities::encode($env{'form.firsturl'},'\'"<>&');
         }          }
         if (($env{'form.ltoken'}) || ($env{'form.linkprot'})) {          if (($env{'form.ltoken'}) || ($env{'form.linkprot'})) {
             my ($linkprot,$linkprotuser);              my ($linkprot,$linkprotuser,$linkprotexit);
             if ($env{'form.ltoken'}) {              if ($env{'form.ltoken'}) {
                 my %info = &Apache::lonnet::tmpget($env{'form.ltoken'});                  my %info = &Apache::lonnet::tmpget($env{'form.ltoken'});
                 $linkprot = $info{'linkprot'};                  $linkprot = $info{'linkprot'};
                 if ($info{'linkprotuser'} ne '') {                  if ($info{'linkprotuser'} ne '') {
                     $linkprotuser = $info{'linkprotuser'};                      $linkprotuser = $info{'linkprotuser'};
                 }                  }
                 my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});                  if ($info{'linkprotexit'} ne '') {
                       $linkprotexit = $info{'linkprotexit'};
                   }
             } else {              } else {
                 $linkprot = $env{'form.linkprot'};                  $linkprot = $env{'form.linkprot'};
                 $linkprotuser = $env{'form.linkprotuser'};                  $linkprotuser = $env{'form.linkprotuser'};
                   $linkprotexit = $env{'form.linkprotexit'};
             }              }
             if ($linkprot) {              if ($linkprot) {
                 my ($linkprotector,$deeplink) = split(/:/,$linkprot,2);                  my ($linkprotector,$deeplink) = split(/:/,$linkprot,2);
Line 276  sub handler { Line 283  sub handler {
                                           origurl => $deeplink,                                            origurl => $deeplink,
                                           linkprot => $linkprot,                                            linkprot => $linkprot,
                                           linkprotuser => $linkprotuser,                                            linkprotuser => $linkprotuser,
                                             linkprotexit => $linkprotexit,
                                        );                                             );    
                       if ($env{'form.ltoken'}) {
                           my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});
                       }
                     &Apache::migrateuser::logout($r,$ip,$handle,undef,undef,\%linkprotinfo);                      &Apache::migrateuser::logout($r,$ip,$handle,undef,undef,\%linkprotinfo);
                     return OK;                      return OK;
                 }                  }
Line 325  sub handler { Line 336  sub handler {
                 }                  }
             }              }
         }          }
           if ($env{'form.ltoken'}) {
               my $delete = &Apache::lonnet::tmpdel($env{'form.ltoken'});
           }
  $r->print(   $r->print(
                   $start_page                    $start_page
                  .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'                   .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'
Line 450  sub handler { Line 464  sub handler {
   
 # -------------------------------------------------------- Store away log token  # -------------------------------------------------------- Store away log token
     my ($tokenextras,$tokentype,$linkprot_for_login);      my ($tokenextras,$tokentype,$linkprot_for_login);
     my @names = ('role','symb','iptoken','ltoken','linkprotuser','linkprot','linkkey');      my @names = ('role','symb','iptoken','ltoken','linkprotuser','linkprotexit','linkprot','linkkey');
     foreach my $name (@names) {      foreach my $name (@names) {
         if ($env{'form.'.$name} ne '') {          if ($env{'form.'.$name} ne '') {
             if ($name eq 'ltoken') {              if ($name eq 'ltoken') {
Line 458  sub handler { Line 472  sub handler {
                 if ($info{'linkprot'}) {                  if ($info{'linkprot'}) {
                     $linkprot_for_login = $info{'linkprot'};                      $linkprot_for_login = $info{'linkprot'};
                     $tokenextras .= '&linkprot='.&escape($info{'linkprot'});                      $tokenextras .= '&linkprot='.&escape($info{'linkprot'});
                     if ($info{'linkprotuser'}) {                      foreach my $item ('linkprotuser','linkprotexit') {
                         $tokenextras .= '&linkprotuser='.&escape($info{'linkprotuser'});                          if ($info{$item}) {
                               $tokenextras .= '&'.$item.'='.&escape($info{$item});
                           }
                     }                      }
                     $tokentype = 'link';                      $tokentype = 'link';
                     last;                      last;
Line 648  function enableInput() { Line 664  function enableInput() {
 ENDSCRIPT  ENDSCRIPT
   
     my ($lonhost_in_use,@hosts,%defaultdomconf,$saml_prefix,$saml_landing,      my ($lonhost_in_use,@hosts,%defaultdomconf,$saml_prefix,$saml_landing,
         $samlssotext,$samlnonsso,$samlssoimg,$samlssoalt,$samlssourl,$samltooltip);          $samlssotext,$samlnonsso,$samlssoimg,$samlssoalt,$samlssourl,$samltooltip,
           $samlwindow);
     %defaultdomconf = &Apache::loncommon::get_domainconf($defdom);      %defaultdomconf = &Apache::loncommon::get_domainconf($defdom);
     @hosts = &Apache::lonnet::current_machine_ids();      @hosts = &Apache::lonnet::current_machine_ids();
     $lonhost_in_use = $lonhost;      $lonhost_in_use = $lonhost;
Line 669  ENDSCRIPT Line 686  ENDSCRIPT
         $samlssoalt = $defaultdomconf{$saml_prefix.'alt_'.$lonhost_in_use};          $samlssoalt = $defaultdomconf{$saml_prefix.'alt_'.$lonhost_in_use};
         $samlssourl = $defaultdomconf{$saml_prefix.'url_'.$lonhost_in_use};          $samlssourl = $defaultdomconf{$saml_prefix.'url_'.$lonhost_in_use};
         $samltooltip = $defaultdomconf{$saml_prefix.'title_'.$lonhost_in_use};          $samltooltip = $defaultdomconf{$saml_prefix.'title_'.$lonhost_in_use};
           $samlwindow = $defaultdomconf{$saml_prefix.'window_'.$lonhost_in_use};
     }      }
     if ($saml_landing) {      if ($saml_landing) {
        if ($samlssotext eq '') {         if ($samlssotext eq '') {
Line 856  HEADER Line 874  HEADER
   
     my $stdauthformstyle = 'inline-block';      my $stdauthformstyle = 'inline-block';
     my $ssoauthstyle = 'none';      my $ssoauthstyle = 'none';
       my $sso_onclick;
     my $logintype;      my $logintype;
     $r->print('<div style="float:left;margin-top:0;">');      $r->print('<div style="float:left;margin-top:0;">');
     if ($saml_landing) {      if ($saml_landing) {
Line 866  HEADER Line 885  HEADER
         if ($samlssourl  ne '') {          if ($samlssourl  ne '') {
             $ssologin = $samlssourl;              $ssologin = $samlssourl;
         }          }
           my $ssologin_for_js = &js_escape($ssologin);
           my $querystr_for_js;
         if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) {          if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) {
             my $querystring;              my $querystring;
             if ($env{'form.firsturl'} ne '') {              if ($env{'form.firsturl'} ne '') {
Line 886  HEADER Line 907  HEADER
             }              }
             if ($querystring ne '') {              if ($querystring ne '') {
                 $ssologin .= (($ssologin=~/\?/)?'&amp;':'?') . $querystring;                  $ssologin .= (($ssologin=~/\?/)?'&amp;':'?') . $querystring;
                   $querystr_for_js = &js_escape($querystring);
             }              }
         } elsif ($logtoken ne '') {          } elsif ($logtoken ne '') {
             $ssologin .= (($ssologin=~/\?/)?'&amp;':'?') . 'logtoken='.$logtoken;              $ssologin .= (($ssologin=~/\?/)?'&amp;':'?') . 'logtoken='.$logtoken;
               $querystr_for_js = &js_escape('logtoken='.$logtoken);
         }          }
         my $ssohref;          my $ssohref;
           if ($samlwindow) {
               $sso_onclick = <<"ENDJS";
   if (document.getElementById('LC_sso_login_link')) {
       var ssoelem = document.getElementById('LC_sso_login_link')
       ssoelem.addEventListener('click',samlWinFunction,false);
       var windows = {};
       function samlWinFunction(evt) {
           evt.preventDefault();
           var url = '$ssologin_for_js';
           var name = 'lcssowin';
           var querystr = '$querystr_for_js';
           if (querystr) {
               url += '?'+querystr+'&lcssowin=1';
           } else {
               url += '?lcssowin=1';
           }
           if ((typeof windows[name] !== 'undefined') && (!windows[name].closed)) {
               windows[name].close();
           }
           windows[name]=window.open(url,name,'width=350,height=600');
           windows[name].focus();
           return false;
       }
   }
   ENDJS
           }
         if ($samlssoimg ne '') {          if ($samlssoimg ne '') {
             $ssohref = '<a href="'.$ssologin.'" title="'.$samltooltip.'">'.              $ssohref = '<a href="'.$ssologin.'" title="'.$samltooltip.'" id="LC_sso_login_link">'.
                        '<img src="'.$samlssoimg.'" alt="'.$samlssoalt.'" id="lcssobutton" /></a>';                         '<img src="'.$samlssoimg.'" alt="'.$samlssoalt.'" id="lcssobutton" /></a>';
         } else {          } else {
             $ssohref = '<a href="'.$ssologin.'">'.$samlssotext.'</a>';              $ssohref = '<a href="'.$ssologin.'" id="LC_sso_login_link">'.$samlssotext.'</a>';
         }          }
         if (($env{'form.saml'} eq 'no') ||          if (($env{'form.saml'} eq 'no') ||
             (($env{'form.username'} ne '') && ($env{'form.domain'} ne ''))) {              (($env{'form.username'} ne '') && ($env{'form.domain'} ne ''))) {
Line 950  ENDTARG Line 999  ENDTARG
 // <![CDATA[  // <![CDATA[
 if ((window.self !== window.top) && (document.server.target != '_self')) {  if ((window.self !== window.top) && (document.server.target != '_self')) {
     $set_target      $set_target
       $sso_onclick
 }  }
 // ]]>  // ]]>
 </script>  </script>
 ENDJS  ENDJS
         }          }
       } elsif ($samlwindow) {
           $in_frame_js = <<ENDJS;
   <script type="text/javascript">
   // <![CDATA[
   if ((window.self !== window.top) && (document.server.target != '_self')) {
       $sso_onclick
   }
   // ]]>
   </script>
   ENDJS
     }      }
   
     $r->print(<<ENDLOGIN);      $r->print(<<ENDLOGIN);
Line 1149  sub redirect_page { Line 1209  sub redirect_page {
         $path = '/'.$path;          $path = '/'.$path;
     }      }
     my $url = $protocol.'://'.$hostname.$path;      my $url = $protocol.'://'.$hostname.$path;
       my $args = {};
     if ($env{'form.firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {      if ($env{'form.firsturl'} =~ m{^/tiny/$match_domain/\w+$}) {
         $url = $protocol.'://'.$hostname.$env{'form.firsturl'};          $url = $protocol.'://'.$hostname.$env{'form.firsturl'};
         if (($env{'form.ltoken'}) || ($env{'form.linkprot'} ne '') ||          if (($env{'form.ltoken'}) || ($env{'form.linkprot'} ne '') ||
Line 1157  sub redirect_page { Line 1218  sub redirect_page {
             if ($env{'form.ltoken'}) {              if ($env{'form.ltoken'}) {
                 %link_info = &Apache::lonnet::tmpget($env{'form.ltoken'});                  %link_info = &Apache::lonnet::tmpget($env{'form.ltoken'});
                 &Apache::lonnet::tmpdel($env{'form.ltoken'});                  &Apache::lonnet::tmpdel($env{'form.ltoken'});
                   $args->{'only_body'} = 1;
             } elsif ($env{'form.linkprot'}) {              } elsif ($env{'form.linkprot'}) {
                 $link_info{'linkprot'} = $env{'form.linkprot'};                  $link_info{'linkprot'} = $env{'form.linkprot'};
                 if ($env{'form.linkprotuser'}) {                  foreach my $item ('linkprotuser','linkprotexit') {
                     $link_info{'linkprotuser'} = $env{'form.linkprotuser'};                      if ($env{'form.'.$item}) {
                           $link_info{$item} = $env{'form.'.$item};
                       }
                 }                  }
                   $args->{'only_body'} = 1;
             } elsif ($env{'form.linkkey'} ne '') {              } elsif ($env{'form.linkkey'} ne '') {
                 $link_info{'linkkey'} = $env{'form.linkkey'};                  $link_info{'linkkey'} = $env{'form.linkkey'};
             }              }
Line 1196  sub redirect_page { Line 1261  sub redirect_page {
         }          }
         $url .= $querystring;          $url .= $querystring;
     }      }
     my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,      $args->{'redirect'} = [0,$url];
                                                     {'redirect' => [0,$url],});      my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,$args);
     my $end_page   = &Apache::loncommon::end_page();      my $end_page   = &Apache::loncommon::end_page();
     return $start_page.$end_page;      return $start_page.$end_page;
 }  }

Removed from v.1.199  
changed lines
  Added in v.1.203


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