[LON-CAPA-cvs] cvs: loncom(GCI_1) /interface createaccount.pm

raeburn raeburn@source.lon-capa.org
Mon, 14 Sep 2009 15:33:48 -0000


This is a MIME encoded message

--raeburn1252942428
Content-Type: text/plain

raeburn		Mon Sep 14 15:33:48 2009 EDT

  Modified files:              (Branch: GCI_1)
    /loncom/interface	createaccount.pm 
  Log:
  - Customization for GCI_1
  - Wording changes to use GCI WebCenter
  - Use Captcha::reCAPTCHA in place of Authen::Captcha
  
  
--raeburn1252942428
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20090914153348.txt"

Index: loncom/interface/createaccount.pm
diff -u loncom/interface/createaccount.pm:1.32 loncom/interface/createaccount.pm:1.32.2.1
--- loncom/interface/createaccount.pm:1.32	Sat Mar 14 02:04:22 2009
+++ loncom/interface/createaccount.pm	Mon Sep 14 15:33:48 2009
@@ -3,7 +3,7 @@
 # institutional log-in ID (institutional authentication required - localauth
 #  or kerberos) or an e-mail address.
 #
-# $Id: createaccount.pm,v 1.32 2009/03/14 02:04:22 raeburn Exp $
+# $Id: createaccount.pm,v 1.32.2.1 2009/09/14 15:33:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -39,7 +39,7 @@
 use Apache::lonlocal;
 use Apache::lonauth;
 use Apache::resetpw;
-use Authen::Captcha;
+use Captcha::reCAPTCHA;
 use DynaLoader; # for Crypt::DES version
 use Crypt::DES;
 use LONCAPA qw(:DEFAULT :match);
@@ -63,7 +63,7 @@
     &Apache::lonlocal::get_language_handle($r);
 
     if ($sso_username ne '' && $sso_domain ne '') {
-        $domain = $sso_domain; 
+        $domain = $sso_domain;
     } else {
         $domain = &Apache::lonnet::default_login_domain();
         if (defined($env{'form.courseid'})) {
@@ -150,7 +150,7 @@
         &print_header($r,$start_page,$courseid);
         my $output = '<h3>'.&mt('Account creation unavailable').'</h3>'.
                      '<span class="LC_warning">'.
-                     &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted at this institution ([_1]).',$domdesc).'</span><br /><br />';
+                     &mt('Creation of a new user account using an e-mail address or an institutional log-in ID as username is not permitted for the GCI WebCenter.').'</span><br /><br />';
         $r->print($output);
         &print_footer($r);
         return OK;
@@ -405,7 +405,7 @@
         }
         if (grep(/^email$/,@{$cancreate})) {
             $output .= '<div class="LC_left_float"><h3>'.&mt('Create account with an e-mail address as your username').'</h3>';
-            my $captchaform = &create_captcha();
+            my $captchaform = &create_recaptcha();
             if ($captchaform) {
                 my $submit_text = &mt('Request LON-CAPA account');
                 my $emailform = '<input type="text" name="useremail" size="25" value="" />';
@@ -476,30 +476,14 @@
                &Apache::lonhtmlcommon::row_closure(1)."\n".
                &Apache::lonhtmlcommon::row_title(&mt('Password'),
                                                 'LC_pick_box_title')."\n".
-               $upassform;
-    if ($context eq 'selfenroll') {
-        my $udomform = '<input type="text" name="udom" size="10" value="'.
-                        $domain.'" />';
-        $output .= &Apache::lonhtmlcommon::row_closure(1)."\n".
-                   &Apache::lonhtmlcommon::row_title(&mt('Domain'),
-                                                     'LC_pick_box_title')."\n".
-                   $udomform."\n";
-    } else {
-        $output .= '<input type="hidden" name="udom" value="'.$domain.'" />';
-    }
-    $output .= &Apache::lonhtmlcommon::row_closure(1).
-               &Apache::lonhtmlcommon::row_title().
-               '<br /><input type="submit" name="username_validation" value="'.
-               $submit_text.'" />'."\n";
-    if ($context eq 'selfenroll') {
-        $output .= '<br /><br /><table width="100%"><tr><td align="right">'.
-                   '<span class="LC_fontsize_medium">'.
-                   '<a href="/adm/resetpw">'.&mt('Forgot password?').'</a>'.
-                   '</span></td></tr></table>'."\n";
-    }
-    $output .= &Apache::lonhtmlcommon::row_closure(1)."\n".
-               &Apache::lonhtmlcommon::end_pick_box().'<br />'."\n";
-    $output .= '<input type="hidden" name="lextkey" value="'.$lextkey.'">'."\n".
+               $upassform."\n".'<br /><br />'."\n".
+               '<input type="button" name="username_validation" value="'.
+               $submit_text.'" onclick="javascript:send()" />'."\n".
+               &Apache::lonhtmlcommon::row_closure(1)."\n".
+               &Apache::lonhtmlcommon::end_pick_box()."\n".
+               '<p><a href="/adm/resetpw">'.&mt('Forgot password?').'</a>'.
+               '</p>'."\n".
+               '<input type="hidden" name="lextkey" value="'.$lextkey.'">'."\n".
                '<input type="hidden" name="uextkey" value="'.$uextkey.'">'."\n".
                '</form>';
     return $output;
@@ -526,23 +510,18 @@
                                          $contact_name,$contact_email);
                 return $output;
             } else {
-                my $code = $env{'form.code'};
-                my $md5sum = $env{'form.crypt'};
-                my %captcha_params = &captcha_settings();
-                my $captcha = Authen::Captcha->new(
-                                  output_folder => $captcha_params{'output_dir'},
-                                  data_folder   => $captcha_params{'db_dir'},
-                                 );
-                my $captcha_chk = $captcha->check_code($code,$md5sum);
-                my %captcha_hash = (
-                                  0       => 'Code not checked (file error)',
-                                  -1      => 'Failed: code expired',
-                                  -2      => 'Failed: invalid code (not in database)',
-                                  -3      => 'Failed: invalid code (code does not match crypt)',
-                                   );
-                if ($captcha_chk != 1) {
+                 my $captcha = Captcha::reCAPTCHA->new;
+                 my $captcha_result =
+                     $captcha->check_answer(
+                                            'PRIVATEKEY',
+                                            $ENV{'REMOTE_ADDR'},
+                                            $env{'form.recaptcha_challenge_field'},
+                                            $env{'form.recaptcha_response_field'},
+                                           ); # generate private key for IP
+                                              # from http://recaptcha.net/
+                if (!$captcha_result->{is_valid}) {
                     $output = &invalid_state('captcha',$domdesc,$contact_name,
-                                             $contact_email,$captcha_hash{$captcha_chk});
+                                             $contact_email);
                     return $output;
                 }
                 my $uhome=&Apache::lonnet::homeserver($useremail,$domain);
@@ -605,7 +584,7 @@
     if ($token !~ /^error/ && $token ne 'no_such_host') {
         my $esc_token = &escape($token);
         my $showtime = localtime(time);
-        my $mailmsg = &mt('A request was submitted on [_1] for creation of a LON-CAPA account at the following institution: [_2].',$showtime,$domdesc).' '.
+        my $mailmsg = &mt('A request was submitted on [_1] for creation of a GCI WebCenter account.',$showtime).' '.
              &mt('To complete this process please open a web browser and enter the following URL in the address/location box: [_1]',
                  &Apache::lonnet::absolute_url().'/adm/createaccount?token='.$esc_token);
         my $result = &Apache::resetpw::send_mail($domdesc,$email,$mailmsg,$contact_name,
@@ -647,7 +626,7 @@
                 if ($result eq 'ok') {
                     $msg = $output; 
                     my $shownow = &Apache::lonlocal::locallocaltime($now);
-                    my $mailmsg = &mt('A LON-CAPA account for the institution: [_1] has been created [_2] from IP address: [_3].  If you did not perform this action or authorize it, please contact the [_4] ([_5]).',$domdesc,$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n";
+                    my $mailmsg = &mt('A GCI WebCenter account has been created [_1] from IP address: [_2].  If you did not perform this action or authorize it, please contact the [_3] ([_4]).',$shownow,$ENV{'REMOTE_ADDR'},$contact_name,$contact_email)."\n";
                     my $mailresult = &Apache::resetpw::send_mail($domdesc,$data{'email'},
                                                                  $mailmsg,$contact_name,
                                                                  $contact_email);
@@ -728,7 +707,7 @@
         my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount',
                                            $lonhost);
         my $formtag = '<form name="server" method="post" target="_top" action="/adm/createaccount">';
-        my ($datatable,$rowcount) =
+        my ($datatable,$rowcount,$editable) =
             &Apache::loncreateuser::personal_data_display($username,$domain,
                                                           'email','selfcreate');
         if ($rowcount) {
@@ -845,7 +824,7 @@
         my $result = &Apache::lonnet::authenticate($username,$upass,$domain);
         if ($result ne 'no_host') { 
             my %form = &start_session($r,$username,$domain,$lonhost,$courseid);
-            $output = '<br /><br />'.&mt('A LON-CAPA account already exists for username [_1] at this institution ([_2]).','<tt>'.$username.'</tt>',$domdesc).'<br />'.&mt('The password entered was also correct so you have been logged in.');
+            $output = '<br /><br />'.&mt('A GCI WebCenter account already exists for username [_1].','<tt>'.$username.'</tt>').'<br />'.&mt('The password entered was also correct so you have been logged in.');
             return ('existingaccount',$output);
         } else {
             $output = &login_failure_msg($courseid);
@@ -1126,37 +1105,11 @@
     return $msg;
 }
 
-sub create_captcha {
-    my ($output_dir,$db_dir) = @_;
-    my %captcha_params = &captcha_settings();
-    my ($output,$maxtries,$tries) = ('',10,0);
-    while ($tries < $maxtries) {
-        $tries ++;
-        my $captcha = Authen::Captcha->new (
-                                           output_folder => $captcha_params{'output_dir'},
-                                           data_folder   => $captcha_params{'db_dir'},
-                                          );
-        my $md5sum = $captcha->generate_code($captcha_params{'numchars'});
-
-        if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') {
-            $output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n".
-                      &mt('Type in the letters/numbers shown below').'&nbsp;'.
-                     '<input type="text" size="5" name="code" value="" /><br />'.
-                     '<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png">';
-            last;
-        }
-    }
-    return $output;
-}
-
-sub captcha_settings {
-    my %captcha_params = ( 
-                           output_dir     => $Apache::lonnet::perlvar{'lonCaptchaDir'},
-                           www_output_dir => "/captchaspool",
-                           db_dir         => $Apache::lonnet::perlvar{'lonCaptchaDb'},
-                           numchars       => '5',
-                         );
-    return %captcha_params;
+sub create_recaptcha {
+    my $captcha = Captcha::reCAPTCHA->new;
+    return $captcha->get_options_setter({theme => 'white'})."\n".
+           $captcha->get_html('PUBLICKEY');  # generate public key for IP
+                                             # from http://recaptcha.net/
 }
 
 sub getkeys {

--raeburn1252942428--