Diff for /loncom/auth/lonauth.pm between versions 1.101.10.1 and 1.106

version 1.101.10.1, 2010/09/15 18:28:45 version 1.106, 2010/07/20 02:42:33
Line 111  sub success { Line 111  sub success {
         }          }
     }      }
   
     my $windowinfo=&Apache::lonmenu::open($env{'browser.os'});      my $windowinfo = Apache::lonhtmlcommon::scripttag('self.name="loncapaclient";');
     my $startupremote=&Apache::lonmenu::startupremote($destination);      my $header = '<meta HTTP-EQUIV="Refresh" CONTENT="0; url='.$destination.'" />';
     my $remoteinfo=&Apache::lonmenu::load_remote_msg($lowerurl);  
     my $setflags=&Apache::lonmenu::setflags();  
     my $maincall=&Apache::lonmenu::maincall();  
     my $brcrum = [{'href' => '',      my $brcrum = [{'href' => '',
                    'text' => 'Successful Login'},];                     'text' => 'Successful Login'},];
     my $start_page=&Apache::loncommon::start_page('Successful Login',      my $start_page=&Apache::loncommon::start_page('Successful Login',
                                                   $startupremote,                                                    $header,
                                                   {'no_inline_link' => 1,                                                    {'bread_crumbs' => $brcrum,});
                                                    'bread_crumbs' => $brcrum,});  
     my $end_page  =&Apache::loncommon::end_page();      my $end_page  =&Apache::loncommon::end_page();
   
     my $continuelink;   my $continuelink='<a href="'.$destination.'">'.&mt('Continue').'</a>';
     if ($env{'environment.remote'} eq 'off') {  
  $continuelink='<a href="'.$destination.'">'.&mt('Continue').'</a>';  
     }  
 # ------------------------------------------------- Output for successful login  # ------------------------------------------------- Output for successful login
   
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
Line 142  sub success { Line 135  sub success {
        );         );
     $r->print(<<ENDSUCCESS);      $r->print(<<ENDSUCCESS);
 $start_page  $start_page
 $setflags  
 $windowinfo  $windowinfo
 <h1>$lt{'wel'}</h1>  <h1>$lt{'wel'}</h1>
 $lt{'mes'}<p>  $lt{'mes'}<p>
 <a href="/adm/$lt{'log'}">$lt{'pro'}</a></p>  <a href="/adm/$lt{'log'}">$lt{'pro'}</a></p>
 $remoteinfo  
 $maincall  
 $continuelink  $continuelink
 $end_page  $end_page
 ENDSUCCESS  ENDSUCCESS
Line 158  ENDSUCCESS Line 148  ENDSUCCESS
   
 sub failed {  sub failed {
     my ($r,$message,$form) = @_;      my ($r,$message,$form) = @_;
     my $start_page = &Apache::loncommon::start_page('Unsuccessful Login',undef,      my $start_page = &Apache::loncommon::start_page('Unsuccessful Login',undef);
     {'no_inline_link' => 1,});  
     my $retry = '/adm/login?username='.$form->{'uname'}.      my $retry = '/adm/login?username='.$form->{'uname'}.
                 '&domain='.$form->{'udom'};                  '&domain='.$form->{'udom'};
     if (exists($form->{role})) {      if (exists($form->{role})) {
Line 209  sub handler { Line 198  sub handler {
 # -------------------------------- Prevent users from attempting to login twice  # -------------------------------- Prevent users from attempting to login twice
     my $handle = &Apache::lonnet::check_for_valid_session($r);      my $handle = &Apache::lonnet::check_for_valid_session($r);
     if ($handle ne '') {      if ($handle ne '') {
           my $lonidsdir=$r->dir_config('lonIDsDir');
           if ($handle=~/^publicuser\_/) {
   # For "public user" - remove it, we apparently really want to login
               unlink($r->dir_config('lonIDsDir')."/$handle.id");
           } else {
 # Indeed, a valid token is found  # Indeed, a valid token is found
  &Apache::loncommon::content_type($r,'text/html');              &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
  $r->send_http_header;      &Apache::loncommon::content_type($r,'text/html');
  my $start_page =       $r->send_http_header;
     &Apache::loncommon::start_page('Already logged in');      my $start_page = 
  my $end_page =           &Apache::loncommon::start_page('Already logged in');
     &Apache::loncommon::end_page();      my $end_page = 
         $r->print(          &Apache::loncommon::end_page();
            $start_page              my $dest = '/adm/roles';
           .'<h1>'.&mt('You are already logged in!').'</h1>'              if ($env{'form.firsturl'} ne '') {
           .'<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].'                  $dest = $env{'form.firsturl'};
                     ,'<a href="/adm/roles">','</a>','<a href="/adm/logout">','</a>')              }
           .'</p>'              $r->print(
           .'<p><a href="/adm/loginproblems.html">'.&mt('Login problems?').'</a></p>'                 $start_page
           .$end_page                .'<h1>'.&mt('You are already logged in!').'</h1>'
         );                .'<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].'
         return OK;                      ,'<a href="'.$dest.'">','</a>','<a href="/adm/logout">','</a>')
                 .'</p>'
                 .$end_page
               );
               return OK;
           }
     }      }
   
 # ---------------------------------------------------- No valid token, continue  # ---------------------------------------------------- No valid token, continue
Line 336  sub handler { Line 335  sub handler {
     if (grep(/^login$/,@cancreate)) {      if (grep(/^login$/,@cancreate)) {
         $defaultauth = 1;          $defaultauth = 1;
     }      }
     my $uname = $form{'uname'};      my $clientcancheckhost = 1;
     my $authhost=Apache::lonnet::authenticate($uname,$upass,      my $authhost=Apache::lonnet::authenticate($form{'uname'},$upass,
                                               $form{'udom'},$defaultauth);                                                $form{'udom'},$defaultauth,
                                                 $clientcancheckhost);
           
 # --------------------------------------------------------------------- Failed?  # --------------------------------------------------------------------- Failed?
   
     if ($authhost eq 'no_host') {      if ($authhost eq 'no_host') {
         my $lc_uname = lc($form{'uname'});   &failed($r,'Username and/or password could not be authenticated.',
         if ($uname eq $lc_uname) {   \%form);
             &failed($r,'Username and/or password could not be authenticated.',          return OK;
                     \%form);      } elsif ($authhost eq 'no_account_on_host') {
           my %domconfig = 
               &Apache::lonnet::get_dom('configuration',['usercreation'],$form{'udom'});
           if (grep(/^login$/,@cancreate)) {
               my $domdesc = &Apache::lonnet::domain($form{'udom'},'description');
               &check_can_host($r,\%form,'no_account_on_host',$domdesc);
               my $start_page = 
                   &Apache::loncommon::start_page('Create a user account in LON-CAPA');
               my $lonhost = $r->dir_config('lonHostID');
               my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
               my $contacts = 
                   &Apache::loncommon::build_recipient_list(undef,'helpdeskmail',
                                                           $form{'udom'},$origmail);
               my ($contact_email) = split(',',$contacts); 
               my $output = &Apache::createaccount::username_check($form{'uname'}, 
                                                                   $form{'udom'},$domdesc,'',
                                                                   $lonhost,$contact_email,$contact_name);
               &Apache::loncommon::content_type($r,'text/html');
               $r->send_http_header;
               &Apache::createaccount::print_header($r,$start_page);
               $r->print('<h3>'.&mt('Account creation').'</h3>'.
                         &mt('Although your username and password were authenticated, you do not currently have a LON-CAPA account at this institution.').'<br />'.
                         $output.&Apache::loncommon::end_page());
             return OK;              return OK;
         } else {          } else {
             $authhost=Apache::lonnet::authenticate($lc_uname,$upass,              &failed($r,'Although your username and password were authenticated, you do not currently have a LON-CAPA account in this domain, and you are not permitted to create one.',\%form);
                                                    $form{'udom'},$defaultauth);              return OK;
             if ($authhost eq 'no_host') {  
                 &failed($r,'Username (in lower case) and/or password could not be authenticated.',  
                         \%form);  
                 return OK;  
             } elsif ($authhost eq 'no_account_on_host') {  
                 &create_account($r,\%form,\@cancreate,$lc_uname,$contact_name);  
                 return OK;  
             } else {  
                 $form{'uname'} = $lc_uname;   
             }  
         }          }
     } elsif ($authhost eq 'no_account_on_host') {  
         &create_account($r,\%form,\@cancreate,$uname);  
         return OK;  
     }      }
   
     if (($firsturl eq '') ||       if (($firsturl eq '') || 
Line 394  sub handler { Line 403  sub handler {
  }   }
     }      }
   
       &check_can_host($r,\%form,$authhost);
   
     if ($r->dir_config("lonBalancer") eq 'yes') {      if ($r->dir_config("lonBalancer") eq 'yes') {
  &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,   &success($r,$form{'uname'},$form{'udom'},$authhost,'noredirect',undef,
  \%form);   \%form);
  $r->internal_redirect('/adm/switchserver');          my ($otherserver) = &choose_server($form{'udom'});
    $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);
     } else {      } else {
  &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,   &success($r,$form{'uname'},$form{'udom'},$authhost,$firsturl,undef,
  \%form);   \%form);
Line 405  sub handler { Line 417  sub handler {
     return OK;      return OK;
 }  }
   
 sub create_account {  sub check_can_host {
     my ($r,$form,$cancreate,$uname,$contact_name) = @_;      my ($r,$form,$authhost,$domdesc) = @_;
     return unless((ref($form) eq 'HASH') && (ref($cancreate) eq 'ARRAY'));      return unless (ref($form) eq 'HASH');
     my %domconfig =      my $canhost = 1;
         &Apache::lonnet::get_dom('configuration',['usercreation'],$form->{'udom'});      my $lonhost = $r->dir_config('lonHostID');
     if (grep(/^login$/,@{$cancreate})) {      my $udom = $form->{'udom'};
         my $start_page =      my @intdoms = &Apache::lonnet::get_internet_names($lonhost);
             &Apache::loncommon::start_page('Create a user account in LON-CAPA',      my $uprimary_id = &Apache::lonnet::domain($udom,'primary');
                                            '',{'no_inline_link'   => 1,});      my $uint_dom = &Apache::lonnet::internet_dom($uprimary_id);
         my $domdesc = &Apache::lonnet::domain($form->{'udom'},'description');      unless ($uint_dom ne '' && grep(/^\Q$uint_dom\E$/,@intdoms)) {
         my $lonhost = $r->dir_config('lonHostID');          my $machine_dom = &Apache::lonnet::host_domain($lonhost);
         my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'};          my $hostname = &Apache::lonnet::hostname($lonhost);
         my $contacts =          my $serverhomeID = &Apache::lonnet::get_server_homeID($hostname);
             &Apache::loncommon::build_recipient_list(undef,'helpdeskmail',          my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
                                                     $form->{'udom'},$origmail);          my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);
         my ($contact_email) = split(',',$contacts);          my %udomdefaults = &Apache::lonnet::get_domain_defaults($udom);
         my $output =           my $loncaparev;
             &Apache::createaccount::username_check($uname,$form->{'udom'},          if ($authhost eq 'no_account_on_host') {
                                                    $domdesc,'',$lonhost,              $loncaparev = &Apache::lonnet::get_server_loncaparev($machine_dom);
                                                    $contact_email,$contact_name);          } else {
         &Apache::loncommon::content_type($r,'text/html');              $loncaparev = &Apache::lonnet::get_server_loncaparev($machine_dom,$lonhost);
         $r->send_http_header;          }
         &Apache::createaccount::print_header($r,$start_page);          $canhost = &Apache::lonnet::can_host_session($udom,$lonhost,$loncaparev,
         $r->print('<h3>'.&mt('Account creation').'</h3>'.                                                       $udomdefaults{'remotesessions'},
                   &mt('Although your username and password were authenticated, you do not currently have a LON-CAPA account at this institution.').'<br />'.                                                       $defdomdefaults{'hostedsessions'});
                   $output.&Apache::loncommon::end_page());      }
     } else {      unless ($canhost) {
         &failed($r,'Although your username and password were authenticated, you do not currently have a LON-CAPA account in this domain, and you are not permitted to create one.',$form);          if ($authhost eq 'no_account_on_host') {
               my ($login_host,$hostname) = &choose_server($udom);
               &Apache::loncommon::content_type($r,'text/html');
               $r->send_http_header;
               if ($login_host ne '') {
                   my $protocol = $Apache::lonnet::protocol{$login_host};
                   $protocol = 'http' if ($protocol ne 'https');
                   my $newurl = $protocol.'://'.$hostname.'/adm/createaccount';
                   $r->print(&Apache::loncommon::start_page('Create a user account in LON-CAPA').
                             '<h3>'.&mt('Account creation').'</h3>'.
                             &mt('You do not currently have a LON-CAPA account at this institution.').'<br />'.
                             '<p>'.&mt('You will be able to create one by logging into a LON-CAPA server within the [_1] domain.',$domdesc).'</p>'.
                             '<p>'.&mt('[_1]Log in[_2]','<a href="'.$newurl.'">','</a>').
                             &Apache::loncommon::end_page());
               } else {
                   $r->print(&Apache::loncommon::start_page('Access to LON-CAPA unavailable').
                             '<h3>'.&mt('Account creation unavailable').'</h3>'.
                             &mt('You do not currently have a LON-CAPA account at this institution.').'<br />'.
                             '<p>'.&mt('Currently a LON-CAPA server is not available within the [_1] domain for you to log-in to, to create an account.',$domdesc).'</p>'.
                             &Apache::loncommon::end_page());
               }
               return OK;
           } else {
               &success($r,$form->{'uname'},$udom,$authhost,'noredirect',undef,
                        $form);
               my ($otherserver) = &choose_server($udom);
               $r->internal_redirect('/adm/switchserver?otherserver='.$otherserver);
           }
       }
   }
   
   sub choose_server {
       my ($udom) = @_;
       my %domconfhash = &Apache::loncommon::get_domainconf($udom);
       my %servers = &Apache::lonnet::get_servers($udom);
       my $lowest_load = 30000;
       my ($login_host,$hostname);
       foreach my $lonhost (keys(%servers)) {
           my $loginvia = $domconfhash{$udom.'.login.loginvia_'.$lonhost};
           if ($loginvia eq '') {
               ($login_host, $lowest_load) =
               &Apache::lonnet::compare_server_load($lonhost, $login_host, $lowest_load);
           }
       }
       if ($login_host ne '') {
           $hostname = $servers{$login_host};
     }      }
     return;      return ($login_host,$hostname);
 }  }
   
 1;  1;

Removed from v.1.101.10.1  
changed lines
  Added in v.1.106


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