Diff for /loncom/interface/createaccount.pm between versions 1.7 and 1.8

version 1.7, 2008/07/01 16:41:57 version 1.8, 2008/07/04 18:53:22
Line 42  use Authen::Captcha; Line 42  use Authen::Captcha;
 use DynaLoader; # for Crypt::DES version  use DynaLoader; # for Crypt::DES version
 use Crypt::DES;  use Crypt::DES;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   use HTML::Entities;
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 122  sub handler { Line 123  sub handler {
         my ($output,$msg);          my ($output,$msg);
         if (grep(/^sso$/,@cancreate)) {          if (grep(/^sso$/,@cancreate)) {
             $msg = &mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account in this domain.");              $msg = &mt("Although your username and password were authenticated by your institution's Single Sign On system, you do not currently have a LON-CAPA account in this domain.");
             ($output, my $checkfail) = &username_check($sso_username,$domain,$domdesc,$courseid);              ($output, my $checkfail) = &username_check($sso_username,$domain,
             if ($checkfail) {                                                         $domdesc,$courseid,
                                                          $lonhost,$contact_email); 
               if ($checkfail eq 'username') {
                 $msg .= &mt('A LON-CAPA account may not be created with the username you use.');                  $msg .= &mt('A LON-CAPA account may not be created with the username you use.');
               } elsif ($checkfail eq 'authtoken') {
                   $msg .= &mt('Error creating token.');
             } else {              } else {
                 $msg .= &mt('To create one, use the table below to provide information about yourself (if appropriate), then click the "Create LON-CAPA account" button.');                  $msg .= &mt('To create one, use the table below to provide information about yourself (if appropriate), then click the "Create LON-CAPA account" button.');
             }              }
Line 181  sub handler { Line 186  sub handler {
                                          $courseid);                                           $courseid);
     } elsif ($env{'form.phase'} eq 'username_validation') {      } elsif ($env{'form.phase'} eq 'username_validation') {
         $output = &username_validation($env{'form.uname'},$domain,$domdesc,          $output = &username_validation($env{'form.uname'},$domain,$domdesc,
                                        $contact_name,$contact_email,$courseid);                                         $contact_name,$contact_email,$courseid,
                                          $lonhost);
     } elsif (!$token) {      } elsif (!$token) {
         my $now=time;          my $now=time;
         if (grep(/^login$/,@cancreate)) {          if (grep(/^login$/,@cancreate)) {
Line 668  sub create_account { Line 674  sub create_account {
 }  }
   
 sub username_validation {  sub username_validation {
     my ($username,$domain,$domdesc,$contact_name,$contact_email,$courseid) = @_;      my ($username,$domain,$domdesc,$contact_name,$contact_email,$courseid,$lonhost) = @_;
     my ($retrieved,$output,$upass);      my ($retrieved,$output,$upass);
   
     $username= &LONCAPA::clean_username($username);      $username= &LONCAPA::clean_username($username);
Line 694  sub username_validation { Line 700  sub username_validation {
             $authok = 'non_authorized';              $authok = 'non_authorized';
         }          }
         if ($authok eq 'authorized') {          if ($authok eq 'authorized') {
             ($output,undef) = &username_check($username,$domain,$domdesc,$courseid);                          ($output,undef) = &username_check($username,$domain,$domdesc,
                                                 $courseid,$lonhost,$contact_email); 
         } else {          } else {
             $output = '<div class="LC_warning">'              $output = '<div class="LC_warning">'
                      .&mt('Username and/or password could not be authenticated.')                       .&mt('Username and/or password could not be authenticated.')
Line 706  sub username_validation { Line 713  sub username_validation {
 }  }
   
 sub username_check {  sub username_check {
     my ($username,$domain,$domdesc,$courseid) = @_;      my ($username,$domain,$domdesc,$courseid,$lonhost,$contact_email) = @_;
     my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);      my (%rulematch,%inst_results,$newuser,%alerts,%curr_rules,%got_rules);
     $newuser = 1;      $newuser = 1;
     my $checkhash;      my $checkhash;
Line 724  sub username_check { Line 731  sub username_check {
                         &Apache::loncommon::user_rule_formats($domain,$domdesc,                          &Apache::loncommon::user_rule_formats($domain,$domdesc,
                                 $curr_rules{$domain}{'username'},'username');                                  $curr_rules{$domain}{'username'},'username');
                     if ($userchkmsg) {                      if ($userchkmsg) {
                         $checkfail = 1;                          $checkfail = 'username';
                     }                      }
                 }                  }
                 return ($userchkmsg,$checkfail);                  return ($userchkmsg,$checkfail);
Line 732  sub username_check { Line 739  sub username_check {
         }          }
     }      }
     my $submit_text = &mt('Create LON-CAPA account');      my $submit_text = &mt('Create LON-CAPA account');
     # FIXME need a cookie to confirm credentials were validated.  
     my $output = '<form method="post" action="/adm/createaccount">'.      my $output = '<form method="post" action="/adm/createaccount">'.
                  &Apache::loncreateuser::personal_data_display($username,$domain,1,                   &Apache::loncreateuser::personal_data_display($username,$domain,1,
                                     undef,$inst_results{$username.':'.$domain}).                                      undef,$inst_results{$username.':'.$domain}).
                 '<br /><br /><input type="hidden" name="uname" value="'.$username.'" />'."\n".                  '<br /><br /><input type="hidden" name="uname" value="'.$username.'" />'."\n".
                 '<input type="hidden" name="udom" value="'.$domain.'" />'."\n".                  '<input type="hidden" name="udom" value="'.$domain.'" />'."\n".
                 '<input type="hidden" name="phase" value="username_activation" />';                  '<input type="hidden" name="phase" value="username_activation" />';
       my $now = time;
       my %info = ('ip'         => $ENV{'REMOTE_ADDR'},
                   'time'       => $now,
                   'domain'     => $domain,
                   'username'   => $username);
       my $authtoken = &Apache::lonnet::tmpput(\%info,$lonhost);
       if ($authtoken !~ /^error/ && $authtoken ne 'no_such_host') {
           $output .= '<input type="hidden" name="authtoken" value="'.&HTML::Entities::encode($authtoken,'&<>"').'" />';
       } else {
           $output = &mt('An error occurred when storing a token').'<br />'.
                     &mt('You will not be able to proceed to the next stage of account creation').
                     &linkto_email_help($contact_email,$domdesc);
           return($output,'authtoken');
       }
     if ($courseid ne '') {      if ($courseid ne '') {
         $output .= '<input type="hidden" name="courseid" value="'.$courseid.'" />';          $output .= '<input type="hidden" name="courseid" value="'.$courseid.'" />';
     }      }
Line 756  sub username_activation { Line 776  sub username_activation {
                     &mt('Return to previous page').'</a>'.                      &mt('Return to previous page').'</a>'.
                     &Apache::loncommon::end_page();                      &Apache::loncommon::end_page();
     my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);      my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
       my %data = &Apache::lonnet::tmpget($env{'form.authtoken'});
       my $now = time;
       my $earlyout;
       my $timeout = 300;
       if (keys(%data) == 0) {
           $output = &mt('Sorry, your authentication has expired.');
           $earlyout = 'fail';
       }
       if (($data{'time'} !~ /^\d+$/) ||
           ($data{'domain'} ne $domain) || 
           ($data{'username'} ne $username)) {
           $earlyout = 'fail';
           $output = &mt('The credentials you provided could not be verified.');   
       } elsif ($now - $data{'time'} > $timeout) {
           $earlyout = 'fail';
           $output = &mt('Sorry, your authentication has expired.');
       }
       if ($earlyout ne '') {
           $output .= '<br />'.&mt('Please [_1]start again[_2].','<a href="/adm/createaccount">','</a>');
           return($earlyout,$output);
       }
     if ((($domdefaults{'auth_def'} =~/^krb(4|5)$/) &&       if ((($domdefaults{'auth_def'} =~/^krb(4|5)$/) && 
          ($domdefaults{'auth_arg_def'} ne '')) ||            ($domdefaults{'auth_arg_def'} ne '')) || 
         ($domdefaults{'auth_def'} eq 'localauth')) {          ($domdefaults{'auth_def'} eq 'localauth')) {
Line 776  sub username_activation { Line 817  sub username_activation {
                           $env{'form.cgeneration'},undef,undef,                            $env{'form.cgeneration'},undef,undef,
                           $env{'form.cpermanentemail'});                            $env{'form.cpermanentemail'});
         if ($result eq 'ok') {          if ($result eq 'ok') {
               my $delete = &Apache::lonnet::tmpdel($env{'form.authtoken'});
             $output = &mt('A LON-CAPA account has been created for username: [_1] in domain: [_2].',$username,$domain);              $output = &mt('A LON-CAPA account has been created for username: [_1] in domain: [_2].',$username,$domain);
             my %form = &start_session($r,$username,$domain,$lonhost,$courseid);              my %form = &start_session($r,$username,$domain,$lonhost,$courseid);
             my $nostart = 1;              my $nostart = 1;
Line 838  sub invalid_state { Line 880  sub invalid_state {
     if ($msgtext) {      if ($msgtext) {
         $msg .= '<br />'.$msgtext;          $msg .= '<br />'.$msgtext;
     }      }
       $msg .= &linkto_email_help($contact_email,$domdesc);
       return $msg;
   }
   
   sub linkto_email_help {
       my ($contact_email,$domdesc) = @_;
       my $msg;
     if ($contact_email ne '') {      if ($contact_email ne '') {
         my $escuri = &HTML::Entities::encode('/adm/createaccount','&<>"');          my $escuri = &HTML::Entities::encode('/adm/createaccount','&<>"');
         $msg .= '<br />'.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for the [_3] domain.','<a href="/adm/helpdesk?origurl='.$escuri.'">','</a>',$domdesc);          $msg .= '<br />'.&mt('You may wish to contact the [_1]LON-CAPA helpdesk[_2] for the [_3] domain.','<a href="/adm/helpdesk?origurl='.$escuri.'">','</a>',$domdesc);

Removed from v.1.7  
changed lines
  Added in v.1.8


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