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

version 1.7, 2008/07/01 16:41:57 version 1.11, 2008/07/08 13:57:00
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 284  sub print_username_form { Line 290  sub print_username_form {
             my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);              my %domdefaults = &Apache::lonnet::get_domain_defaults($domain);
             if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) {              if ((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth')) {
                 $output = '<div class="LC_left_float"><h3>'.&mt('Create account with a username provided by your institution').'</h3>';                  $output = '<div class="LC_left_float"><h3>'.&mt('Create account with a username provided by your institution').'</h3>';
                 $output .= &mt('If you already have a log-in ID at your institution, you may be able to use it for LON-CAPA.').'<br />'.&mt('Type in your log-in ID and password to find out.').'<br /><br />';                  $output .= &mt('If you already have a log-in ID at your institution,[_1] you may be able to use it for LON-CAPA.','<br />').'<br /><br />'.&mt('Type in your log-in ID and password to find out.').'<br /><br />';
                 my ($lkey,$ukey) = &Apache::lonpreferences::des_keys();                  my ($lkey,$ukey) = &Apache::lonpreferences::des_keys();
                 my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);                  my ($lextkey,$uextkey) = &getkeys($lkey,$ukey);
                 my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',                  my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',
Line 314  sub print_username_form { Line 320  sub print_username_form {
         if (grep(/^email$/,@{$cancreate})) {          if (grep(/^email$/,@{$cancreate})) {
             $output .= '<div class="LC_left_float"><h3>'.&mt('Create account with an e-mail address as your username').'</h3>';              $output .= '<div class="LC_left_float"><h3>'.&mt('Create account with an e-mail address as your username').'</h3>';
             if (grep(/^login$/,@{$cancreate})) {              if (grep(/^login$/,@{$cancreate})) {
                 $output .= &mt('Provide your e-mail address to request a LON-CAPA account if you do not have a log-in ID at your institution.').'<br /><br />';                  $output .= &mt('Provide your e-mail address to request a LON-CAPA account,[_1] if you do not have a log-in ID at your institution.','<br />').'<br /><br />';
             } else {              } else {
                 $output .= '<br />';                  $output .= '<br />';
             }              }
Line 438  sub send_token { Line 444  sub send_token {
         my $mailmsg = &mt('A request was submitted on [_1] for creation of a LON-CAPA account in the [_2] domain.',localtime(time),$domdesc).' '.          my $mailmsg = &mt('A request was submitted on [_1] for creation of a LON-CAPA account in the [_2] domain.',localtime(time),$domdesc).' '.
              &mt('To complete this process please open a web browser and enter the following'               &mt('To complete this process please open a web browser and enter the following'
                 .' URL in the address/location box: [_1]'                  .' URL in the address/location box: [_1]'
                 ,&Apache::lonnet::absolute_url().'/adm/createaccount?token=$esc_token');                  ,&Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token);
         my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name,          my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name,
                                                  $contact_email);                                                   $contact_email);
         if ($result eq 'ok') {          if ($result eq 'ok') {
Line 461  sub process_mailtoken { Line 467  sub process_mailtoken {
     my %data = &Apache::lonnet::tmpget($token);      my %data = &Apache::lonnet::tmpget($token);
     my $now = time;      my $now = time;
     if (keys(%data) == 0) {      if (keys(%data) == 0) {
         $msg = &mt('Sorry, the URL you provided to complete creation of a new LON-CAPA account was invalid. Either the token included in the URL has been deleted or the URL you provided was invalid.')          $msg = &mt('Sorry, the URL you provided to complete creation of a new LON-CAPA account was invalid.')
               .' '.&mt('Please submit a [_1]new request[_2] for account creation and follow the new link page included in the e-mail that will be sent to you.','<a href="/adm/createaccount">','</a>');                 .' '.&mt('Either the token included in the URL has been deleted or the URL you provided was invalid.')
                  .' '.&mt('Please submit a [_1]new request[_2] for account creation and follow the new link page included in the e-mail that will be sent to you.','<a href="/adm/createaccount">','</a>');
         return $msg;          return $msg;
     }      }
     if (($data{'time'} =~ /^\d+$/) &&      if (($data{'time'} =~ /^\d+$/) &&
Line 668  sub create_account { Line 675  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 701  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 714  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 732  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 740  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 777  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 818  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 881  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);
Line 864  sub create_captcha { Line 914  sub create_captcha {
   
 sub captcha_settings {  sub captcha_settings {
     my %captcha_params = (       my %captcha_params = ( 
                            output_dir     => "/home/httpd/html/captcha",                             output_dir     => $Apache::lonnet::perlvar{'lonDocRoot'}.'/captcha',
                            www_output_dir => "/captcha",                             www_output_dir => "/captcha",
                            db_dir         => "/home/www/captchadb",                             db_dir         => "/home/www/captchadb",
                            numchars       => '5',                             numchars       => '5',

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


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