Diff for /loncom/auth/lonlogin.pm between versions 1.150 and 1.158

version 1.150, 2012/04/11 11:40:07 version 1.158, 2013/11/26 03:17:09
Line 46  sub handler { Line 46  sub handler {
  (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'},   (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'},
       $ENV{'REDIRECT_QUERY_STRING'}),        $ENV{'REDIRECT_QUERY_STRING'}),
  ['interface','username','domain','firsturl','localpath','localres',   ['interface','username','domain','firsturl','localpath','localres',
   'token','role','symb']);    'token','role','symb','iptoken']);
     if (!defined($env{'form.firsturl'})) {      if (!defined($env{'form.firsturl'})) {
         &Apache::lonacc::get_posted_cgi($r,['firsturl']);          &Apache::lonacc::get_posted_cgi($r,['firsturl']);
     }      }
Line 103  sub handler { Line 103  sub handler {
   
 # ---------------------------------------------------- No valid token, continue  # ---------------------------------------------------- No valid token, continue
   
  # ---------------------------- Not possible to really login to domain "public"  # ---------------------------- Not possible to really login to domain "public"
     if ($env{'form.domain'} eq 'public') {      if ($env{'form.domain'} eq 'public') {
  $env{'form.domain'}='';   $env{'form.domain'}='';
  $env{'form.username'}='';   $env{'form.username'}='';
     }      }
   
   # ------ Is this page requested because /adm/migrateuser detected an IP change?
       my %sessiondata;
       if ($env{'form.iptoken'}) {
           %sessiondata = &Apache::lonnet::tmpget($env{'form.iptoken'});
           my $delete = &Apache::lonnet::tmpdel($env{'form.token'});
       }
 # ----------------------------------------------------------- Process Interface  # ----------------------------------------------------------- Process Interface
     $env{'form.interface'}=~s/\W//g;      $env{'form.interface'}=~s/\W//g;
   
     my $httpbrowser=$ENV{"HTTP_USER_AGENT"};      (undef,undef,undef,undef,undef,undef,my $clientmobile) =
           &Apache::loncommon::decode_user_agent();
   
     my $iconpath=       my $iconpath= 
  &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));   &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
Line 119  sub handler { Line 127  sub handler {
     my $lonhost = $r->dir_config('lonHostID');      my $lonhost = $r->dir_config('lonHostID');
     my $domain = &Apache::lonnet::default_login_domain();      my $domain = &Apache::lonnet::default_login_domain();
     if ($lonhost ne '') {      if ($lonhost ne '') {
         my $redirect = &check_loginvia($domain,$lonhost);          unless ($sessiondata{'sessionserver'}) {
         if ($redirect) {              my $redirect = &check_loginvia($domain,$lonhost);
             $r->print($redirect);              if ($redirect) {
             return OK;                  $r->print($redirect);
         }                   return OK;
               }
           }
     }      }
   
     if (($env{'form.domain'}) &&       if (($sessiondata{'domain'}) &&
           (&Apache::lonnet::domain($env{'form.domain'},'description'))) {
           $domain=$sessiondata{'domain'};
       } elsif (($env{'form.domain'}) && 
  (&Apache::lonnet::domain($env{'form.domain'},'description'))) {   (&Apache::lonnet::domain($env{'form.domain'},'description'))) {
  $domain=$env{'form.domain'};   $domain=$env{'form.domain'};
     }      }
   
     my $role    = $r->dir_config('lonRole');      my $role    = $r->dir_config('lonRole');
     my $loadlim = $r->dir_config('lonLoadLim');      my $loadlim = $r->dir_config('lonLoadLim');
     my $uloadlim= $r->dir_config('lonUserLoadLim');      my $uloadlim= $r->dir_config('lonUserLoadLim');
Line 141  sub handler { Line 155  sub handler {
     my $host_name = &Apache::lonnet::hostname($lonhost);      my $host_name = &Apache::lonnet::hostname($lonhost);
   
 # --------------------------------------------- Default values for login fields  # --------------------------------------------- Default values for login fields
       
     my $authusername=($env{'form.username'}?$env{'form.username'}:'');      my ($authusername,$authdomain);
     my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain);      if ($sessiondata{'username'}) {
           $authusername=$sessiondata{'username'};
       } else {
           $env{'form.username'} = &Apache::loncommon::cleanup_html($env{'form.username'});
           $authusername=($env{'form.username'}?$env{'form.username'}:'');
       }
       if ($sessiondata{'domain'}) {
           $authdomain=$sessiondata{'domain'};
       } else {
           $env{'form.domain'} = &Apache::loncommon::cleanup_html($env{'form.domain'});
           $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain);
       }
   
 # ---------------------------------------------------------- Determine own load  # ---------------------------------------------------------- Determine own load
     my $loadavg;      my $loadavg;
Line 229  sub handler { Line 254  sub handler {
         if ($spares) {          if ($spares) {
             $spares.= '<br />';              $spares.= '<br />';
         }          }
 my %all_hostnames = &Apache::lonnet::all_hostnames();          my %all_hostnames = &Apache::lonnet::all_hostnames();
 foreach my $hostid (sort          foreach my $hostid (sort
     {      {
  &Apache::lonnet::hostname($a) cmp   &Apache::lonnet::hostname($a) cmp
     &Apache::lonnet::hostname($b);      &Apache::lonnet::hostname($b);
     }      }
     keys(%all_hostnames)) {      keys(%all_hostnames)) {
     next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid});              next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid});
     my $hostname = &Apache::lonnet::hostname($hostid);              my $hostname = &Apache::lonnet::hostname($hostid);
     next if (($last eq $hostname) || ($hostname eq ''));              next if (($last eq $hostname) || ($hostname eq ''));
     $spares.='<br /><a href="http://'.              $spares.='<br /><a href="http://'.
  $hostname.               $hostname.
  '/adm/login?domain='.$authdomain.'">'.               '/adm/login?domain='.$authdomain.'">'.
  $hostname.'</a>';               $hostname.'</a>';
     $last=$hostname;              $last=$hostname;
 }           }
 $r->print(           $r->print(
    '<html>'     '<html>'
   .'<head><title>'    .'<head><title>'
   .&mt('The LearningOnline Network with CAPA')    .&mt('The LearningOnline Network with CAPA')
Line 254  $r->print( Line 279  $r->print(
   .'<h1>'.&mt('The LearningOnline Network with CAPA').'</h1>'    .'<h1>'.&mt('The LearningOnline Network with CAPA').'</h1>'
   .'<img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />'    .'<img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />'
   .'<h3>'.&mt('This LON-CAPA server is temporarily not available for login.').'</h3>');    .'<h3>'.&mt('This LON-CAPA server is temporarily not available for login.').'</h3>');
     if ($spares) {          if ($spares) {
         $r->print('<p>'.&mt('Please attempt to login to one of the following servers:')              $r->print('<p>'.&mt('Please attempt to login to one of the following servers:')
                  .'</p>'                       .'</p>'
                  .$spares);                       .$spares);
     }          }
     $r->print('</body>'          $r->print('</body>'
   .'</html>'                   .'</html>'
     );          );
 return OK;          return OK;
 }      }
   
 # ----------------------------------------------- Apparently we are in business  # ----------------------------------------------- Apparently we are in business
 $servadm=~s/\,/\<br \/\>/g;      $servadm=~s/\,/\<br \/\>/g;
   
 # ----------------------------------------------------------- Front page design  # ----------------------------------------------------------- Front page design
 my $pgbg=&Apache::loncommon::designparm('login.pgbg',$domain);      my $pgbg=&Apache::loncommon::designparm('login.pgbg',$domain);
 my $font=&Apache::loncommon::designparm('login.font',$domain);      my $font=&Apache::loncommon::designparm('login.font',$domain);
 my $link=&Apache::loncommon::designparm('login.link',$domain);      my $link=&Apache::loncommon::designparm('login.link',$domain);
 my $vlink=&Apache::loncommon::designparm('login.vlink',$domain);      my $vlink=&Apache::loncommon::designparm('login.vlink',$domain);
 my $alink=&Apache::loncommon::designparm('login.alink',$domain);      my $alink=&Apache::loncommon::designparm('login.alink',$domain);
 my $mainbg=&Apache::loncommon::designparm('login.mainbg',$domain);      my $mainbg=&Apache::loncommon::designparm('login.mainbg',$domain);
 my $loginbox_bg=&Apache::loncommon::designparm('login.sidebg',$domain);      my $loginbox_bg=&Apache::loncommon::designparm('login.sidebg',$domain);
 my $loginbox_header_bgcol=&Apache::loncommon::designparm('login.bgcol',$domain);      my $loginbox_header_bgcol=&Apache::loncommon::designparm('login.bgcol',$domain);
 my $loginbox_header_textcol=&Apache::loncommon::designparm('login.textcol',$domain);      my $loginbox_header_textcol=&Apache::loncommon::designparm('login.textcol',$domain);
 my $logo=&Apache::loncommon::designparm('login.logo',$domain);      my $logo=&Apache::loncommon::designparm('login.logo',$domain);
 my $img=&Apache::loncommon::designparm('login.img',$domain);      my $img=&Apache::loncommon::designparm('login.img',$domain);
 my $domainlogo=&Apache::loncommon::domainlogo($domain);      my $domainlogo=&Apache::loncommon::domainlogo($domain);
 my $showbanner = 1;      my $showbanner = 1;
 my $showmainlogo = 1;      my $showmainlogo = 1;
 if (defined(&Apache::loncommon::designparm('login.showlogo_img',$domain))) {      if (defined(&Apache::loncommon::designparm('login.showlogo_img',$domain))) {
     $showbanner = &Apache::loncommon::designparm('login.showlogo_img',$domain);          $showbanner = &Apache::loncommon::designparm('login.showlogo_img',$domain);
 }      }
 if (defined(&Apache::loncommon::designparm('login.showlogo_logo',$domain))) {      if (defined(&Apache::loncommon::designparm('login.showlogo_logo',$domain))) {
     $showmainlogo = &Apache::loncommon::designparm('login.showlogo_logo',$domain);          $showmainlogo = &Apache::loncommon::designparm('login.showlogo_logo',$domain);
 }      }
 my $showadminmail=&Apache::loncommon::designparm('login.adminmail',$domain);      my $showadminmail;
 my $showcoursecat =      my @possdoms = &Apache::lonnet::current_machine_domains();
 &Apache::loncommon::designparm('login.coursecatalog',$domain);      if (grep(/^\Q$domain\E$/,@possdoms)) {
 my $shownewuserlink =           $showadminmail=&Apache::loncommon::designparm('login.adminmail',$domain);
 &Apache::loncommon::designparm('login.newuser',$domain);      }
 my $now=time;      my $showcoursecat =
 my $js = (<<ENDSCRIPT);          &Apache::loncommon::designparm('login.coursecatalog',$domain);
       my $shownewuserlink = 
           &Apache::loncommon::designparm('login.newuser',$domain);
       my $showhelpdesk =
           &Apache::loncommon::designparm('login.helpdesk',$domain);
       my $now=time;
       my $js = (<<ENDSCRIPT);
   
 <script type="text/javascript" language="JavaScript">  <script type="text/javascript" language="JavaScript">
 // <![CDATA[  // <![CDATA[
Line 339  ENDSCRIPT Line 370  ENDSCRIPT
   
 # --------------------------------------------------- Print login screen header  # --------------------------------------------------- Print login screen header
   
 my %add_entries = (      my %add_entries = (
        bgcolor      => "$mainbg",         bgcolor      => "$mainbg",
        text         => "$font",         text         => "$font",
        link         => "$link",         link         => "$link",
Line 347  my %add_entries = ( Line 378  my %add_entries = (
        alink        => "$alink",         alink        => "$alink",
                onload       => 'javascript:enableInput();',);                 onload       => 'javascript:enableInput();',);
   
 $r->print(&Apache::loncommon::start_page('The LearningOnline Network with CAPA Login',$js,      $r->print(&Apache::loncommon::start_page('The LearningOnline Network with CAPA Login',$js,
        { 'redirect'       => [$expire,'/adm/roles'],          { 'redirect'       => [$expire,'/adm/roles'], 
  'add_entries' => \%add_entries,   'add_entries' => \%add_entries,
  'only_body'   => 1,}));   'only_body'   => 1,}));
   
 # ----------------------------------------------------------------------- Texts  # ----------------------------------------------------------------------- Texts
   
 my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
           'un'       => 'Username',            'un'       => 'Username',
           'pw'       => 'Password',            'pw'       => 'Password',
           'dom'      => 'Domain',            'dom'      => 'Domain',
Line 372  my %lt=&Apache::lonlocal::texthash( Line 403  my %lt=&Apache::lonlocal::texthash(
        );         );
 # -------------------------------------------------- Change password field name  # -------------------------------------------------- Change password field name
   
 my $forgotpw = &forgotpwdisplay(%lt);      my $forgotpw = &forgotpwdisplay(%lt);
 $forgotpw .= '<br />' if $forgotpw;      $forgotpw .= '<br />' if $forgotpw;
 my $loginhelp = &loginhelpdisplay($authdomain,%lt);      my $loginhelp = &Apache::lonauth::loginhelpdisplay($authdomain);
 $loginhelp .= '<br />' if $loginhelp;      if ($loginhelp) {
           $loginhelp = '<a href="'.$loginhelp.'">'.$lt{'help'}.'</a><br />';
       }
   
 # ---------------------------------------------------- Serve out DES JavaScript  # ---------------------------------------------------- Serve out DES JavaScript
 {      {
 my $jsh=Apache::File->new($include."/londes.js");      my $jsh=Apache::File->new($include."/londes.js");
 $r->print(<$jsh>);      $r->print(<$jsh>);
 }      }
 # ---------------------------------------------------------- Serve rest of page  # ---------------------------------------------------------- Serve rest of page
   
 $r->print(      $r->print(
     '<div class="LC_Box"'      '<div class="LC_Box"'
    .' style="margin:0 auto; padding:10px; width:90%; height: auto; background-color:#FFFFFF;">'     .' style="margin:0 auto; padding:10px; width:90%; height: auto; background-color:#FFFFFF;">'
 );  );
   
 #      $r->print(<<ENDSERVERFORM);
 #  If the loadbalancing yielded just http:// because perhaps there's no loadbalancing?  
 #  then just us a relative link to authenticate:  
 #  
   
 $r->print(<<ENDSERVERFORM);  
 <form name="server" action="/adm/authenticate" method="post" target="_top">  <form name="server" action="/adm/authenticate" method="post" target="_top">
    <input type="hidden" name="logtoken" value="$logtoken" />     <input type="hidden" name="logtoken" value="$logtoken" />
    <input type="hidden" name="serverid" value="$lonhost" />     <input type="hidden" name="serverid" value="$lonhost" />
Line 407  $r->print(<<ENDSERVERFORM); Line 435  $r->print(<<ENDSERVERFORM);
    <input type="hidden" name="localres" value="$env{'form.localres'}" />     <input type="hidden" name="localres" value="$env{'form.localres'}" />
   </form>    </form>
 ENDSERVERFORM  ENDSERVERFORM
 my $coursecatalog;      my $coursecatalog;
 if (($showcoursecat eq '') || ($showcoursecat)) {      if (($showcoursecat eq '') || ($showcoursecat)) {
     $coursecatalog = &coursecatalog_link($lt{'catalog'}).'<br />';          $coursecatalog = &coursecatalog_link($lt{'catalog'}).'<br />';
 }      }
 my $newuserlink;      my $newuserlink;
 if ($shownewuserlink) {      if ($shownewuserlink) {
     $newuserlink = &newuser_link($lt{'newuser'}).'<br />';          $newuserlink = &newuser_link($lt{'newuser'}).'<br />';
 }      }
 my $logintitle =      my $logintitle =
     '<h2 class="LC_hcell"'          '<h2 class="LC_hcell"'
    .' style="background:'.$loginbox_header_bgcol.';'         .' style="background:'.$loginbox_header_bgcol.';'
    .' color:'.$loginbox_header_textcol.'">'         .' color:'.$loginbox_header_textcol.'">'
    .$lt{'log'}         .$lt{'log'}
    .'</h2>';         .'</h2>';
   
 my $noscript_warning='<noscript><span class="LC_warning"><b>'      my $noscript_warning='<noscript><span class="LC_warning"><b>'
                      .&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.')                          .&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.')
                     .'</b></span></noscript>';                          .'</b></span></noscript>';
 my $helpdeskscript;      my $helpdeskscript;
 my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,      my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,
                                    $authdomain,\$helpdeskscript);                                         $authdomain,\$helpdeskscript,
                                          $showhelpdesk,\@possdoms);
 my $loginform=(<<LFORM);  
       my $mobileargs;
       if ($clientmobile) {
           $mobileargs = 'autocapitalize="off" autocorrect="off"'; 
       }
       my $loginform=(<<LFORM);
 <form name="client" action="" onsubmit="return(send())">  <form name="client" action="" onsubmit="return(send())">
   <input type="hidden" name="lextkey" value="$lextkey" />    <input type="hidden" name="lextkey" value="$lextkey" />
   <input type="hidden" name="uextkey" value="$uextkey" />    <input type="hidden" name="uextkey" value="$uextkey" />
   <b><label for="uname">$lt{'un'}</label>:</b><br />    <b><label for="uname">$lt{'un'}</label>:</b><br />
   <input type="text" name="uname" id="uname" size="15" value="$authusername" readonly="readonly" /><br />    <input type="text" name="uname" id="uname" size="15" value="$authusername" readonly="readonly" $mobileargs /><br />
   <b><label for="upass$now">$lt{'pw'}</label>:</b><br />    <b><label for="upass$now">$lt{'pw'}</label>:</b><br />
   <input type="password" name="upass$now" id="upass$now" size="15" readonly="readonly" /><br />    <input type="password" name="upass$now" id="upass$now" size="15" readonly="readonly" /><br />
   <b><label for="udom">$lt{'dom'}</label>:</b><br />    <b><label for="udom">$lt{'dom'}</label>:</b><br />
   <input type="text" name="udom" id="udom" size="15" value="$authdomain" readonly="readonly" /><br />    <input type="text" name="udom" id="udom" size="15" value="$authdomain" readonly="readonly" $mobileargs /><br />
   <input type="submit" value="$lt{'log'}" />    <input type="submit" value="$lt{'log'}" />
 </form>  </form>
 LFORM  LFORM
Line 533  END Line 566  END
 END  END
     }      }
   
 $r->print(<<ENDDOCUMENT);      $r->print(<<ENDDOCUMENT);
     <div style="float: left;">      <div style="float: left;">
      <table border="0" cellspacing="0" cellpadding="0">       <table border="0" cellspacing="0" cellpadding="0">
 $domainrow  $domainrow
Line 620  sub redirect_page { Line 653  sub redirect_page {
 }  }
   
 sub contactdisplay {  sub contactdisplay {
     my ($lt,$servadm,$showadminmail,$authdomain,$helpdeskscript) = @_;      my ($lt,$servadm,$showadminmail,$authdomain,$helpdeskscript,$showhelpdesk,
           $possdoms) = @_;
     my $contactblock;      my $contactblock;
     my $showhelpdesk = 0;      my $origmail;
     my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'};      if (ref($possdoms) eq 'ARRAY') {
     if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) {          if (grep(/^\Q$authdomain\E$/,@{$possdoms})) { 
         $showhelpdesk = 1;              $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
           }
       }
       my $requestmail = 
           &Apache::loncommon::build_recipient_list(undef,'helpdeskmail',
                                                    $authdomain,$origmail);
       unless ($showhelpdesk eq '0') {
           if ($requestmail =~ m/[^\@]+\@[^\@]+/) {
               $showhelpdesk = 1;
           } else {
               $showhelpdesk = 0;
           }
     }      }
     if ($servadm && $showadminmail) {      if ($servadm && $showadminmail) {
         $contactblock .= $$lt{'servadm'}.':<br />'.          $contactblock .= $$lt{'servadm'}.':<br />'.
Line 638  sub contactdisplay { Line 683  sub contactdisplay {
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 function helpdesk() {  function helpdesk() {
     var codedom = document.client.udom.value;      var possdom = document.client.udom.value;
       var codedom = possdom.replace( new RegExp("[^A-Za-z0-9.\\-]","g"),'');
     if (codedom == '') {      if (codedom == '') {
         codedom = "$authdomain";          codedom = "$authdomain";
     }      }
Line 661  sub forgotpwdisplay { Line 707  sub forgotpwdisplay {
     }      }
     return;      return;
 }  }
   
 sub loginhelpdisplay {  
     my ($authdomain,%lt) = @_;  
     my $login_help = 1;  
     if ($login_help) {  
         my $dom = $authdomain;  
         if ($dom eq '') {  
             $dom = &Apache::lonnet::default_login_domain();  
         }  
         my %helpconfig = &Apache::lonnet::get_dom('configuration',['helpsettings'],$dom);  
         my $loginhelp_url = $helpconfig{'helpsettings'}{'loginhelpurl'};  
         if ($loginhelp_url ne '') {  
             return '<a href="'.$loginhelp_url.'">'.$lt{'help'}.'</a>';  
         } else {  
             return '<a href="/adm/loginproblems.html">'.$lt{'help'}.'</a>';  
         }  
     }  
     return;  
 }  
   
 sub coursecatalog_link {  sub coursecatalog_link {
     my ($linkname) = @_;      my ($linkname) = @_;

Removed from v.1.150  
changed lines
  Added in v.1.158


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