--- loncom/interface/createaccount.pm 2019/07/29 13:54:02 1.72.4.2
+++ loncom/interface/createaccount.pm 2019/05/05 23:19:47 1.78
@@ -4,7 +4,7 @@
# kerberos, or SSO) or an e-mail address. Requests to use an e-mail address as
# username may be processed automatically, or may be queued for approval.
#
-# $Id: createaccount.pm,v 1.72.4.2 2019/07/29 13:54:02 raeburn Exp $
+# $Id: createaccount.pm,v 1.78 2019/05/05 23:19:47 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -37,6 +37,7 @@ use Apache::lonacc;
use Apache::lonnet;
use Apache::loncommon;
use Apache::lonhtmlcommon;
+use Apache::lonuserutils;
use Apache::lonlocal;
use Apache::lonauth;
use Apache::resetpw;
@@ -520,10 +521,12 @@ ENDSCRIPT
}
sub javascript_checkpass {
- my ($now,$context) = @_;
+ my ($now,$context,$domain) = @_;
my $nopass = &mt('You must enter a password.');
my $mismatchpass = &mt('The passwords you entered did not match.')."\n".
&mt('Please try again.');
+ my ($numrules,$intargjs) =
+ &Apache::lonuserutils::passwd_validation_js('upass',$domain);
&js_escape(\$nopass);
&js_escape(\$mismatchpass);
my $js = <<"ENDSCRIPT";
@@ -540,6 +543,10 @@ sub javascript_checkpass {
return false;
}
if (upass == upasscheck) {
+ var numrules = $numrules;
+ if (numrules > 0) {
+$intargjs
+ }
client.elements.upasscheck$now.value='';
if (validate_email(client)) {
send(one,two,'$context');
@@ -835,8 +842,24 @@ sub process_email_request {
} else {
my ($captcha_chk,$captcha_error) = &Apache::loncommon::captcha_response('usercreation',$server);
if ($captcha_chk != 1) {
- $output = &invalid_state('captcha',$domdesc,$contact_name,
- $contact_email,$captcha_error);
+ $output = ''.
+ &mt('Validation of the code you entered failed.').''.
+ '
'.$captcha_error."\n".'
'. + &mt('[_1]Return[_2] to the previous page to try again.', + '','')."\n". + '
'. + ''."\n"; + if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) { + $output .= ''."\n"; + } + if ($env{'form.type'}) { + my $usertype = &get_usertype($domain); + if ($usertype ne '') { + $output .= ''."\n". + ''."\n"; + } + } + $output .= ''; return $output; } my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts); @@ -894,16 +917,72 @@ sub send_token { $env{'form.logtoken'} =~ s/(`)//g; if ($env{'form.logtoken'}) { my $logtoken = $env{'form.logtoken'}; + my $earlyout; my $tmpinfo=Apache::lonnet::reply('tmpget:'.$logtoken,$server); if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) { $msg = &mt('Information needed to process your request is missing, inaccessible or expired.') - .''.&mt('[_1]Return[_2] to the previous page to try again.',
+ '','');
+ $earlyout = 1;
} else {
my $reply = &Apache::lonnet::reply('tmpdel:'.$logtoken,$server);
unless ($reply eq 'ok') {
$msg .= &mt('Request could not be processed.');
}
}
+# Check if the password entered by the user satisfies domain's requirements
+ my %passwdconf = &Apache::lonnet::get_passwdconf($domain);
+ my ($min,$max,@chars);
+ if (ref($passwdconf{'chars'}) eq 'ARRAY') {
+ if ($passwdconf{'min'} =~ /^\d+$/) {
+ $min = $passwdconf{'min'};
+ }
+ if ($passwdconf{'max'} =~ /^\d+$/) {
+ $max = $passwdconf{'max'};
+ }
+ @chars = @{$passwdconf{'chars'}};
+ } else {
+ $min = 7;
+ }
+ if (($min ne '') || ($max ne '') || (@chars > 0)) {
+ my ($plainpass,$encpass);
+ my $encpass = $env{'form.upass'};
+ if ($encpass eq '') {
+ $msg = &mt('Password retrieved was blank.').
+ '
'.&mt('[_1]Return[_2] to the previous page to try again.', + '',''); + $earlyout = 1; + } else { +# Split the logtoken to retrieve the DES key and decrypt the encypted password + my ($key,$caller)=split(/&/,$tmpinfo); + if ($caller eq 'createaccount') { + $plainpass = &Apache::loncommon::des_decrypt($key,$encpass); + my $warning = &Apache::loncommon::check_passwd_rules($domain,$plainpass); + if ($warning) { + $msg = $warning. + '
'.&mt('[_1]Return[_2] to the previous page to try again.', + '',''); + $earlyout = 1; + } + } + } + } + if ($earlyout) { + $msg .= '
'. + ''."\n"; + if ($env{'form.courseid'} =~ /^$match_domain\_$match_courseid$/) { + $msg .= ''."\n"; + } + if ($env{'form.type'}) { + my $usertype = &get_usertype($domain); + if ($usertype ne '') { + $msg .= ''. + ''."\n"; + } + } + $msg .= ''; + return $msg; + } my %info = ('ip' => $ENV{'REMOTE_ADDR'}, 'time' => $now, 'domain' => $domain, @@ -1096,7 +1175,7 @@ sub print_dataentry_form { close($jsh); $output = &javascript_setforms($now,$emailusername,$captcha,$usertype,$recaptchaversion, $usernameset,$condition,$excluded). - "\n".&javascript_checkpass($now,'email'); + "\n".&javascript_checkpass($now,'email',$domain); my ($lkey,$ukey) = &Apache::loncommon::des_keys(); my ($lextkey,$uextkey) = &getkeys($lkey,$ukey); my $logtoken=Apache::lonnet::reply('tmpput:'.$ukey.$lkey.'&createaccount:createaccount', @@ -1704,8 +1783,6 @@ sub invalid_state { $msg .= &mt('Username rules at this institution do not allow the e-mail address you provided to be used as a username.'); } elsif ($error eq 'userformat') { $msg .= &mt('The e-mail address you provided may not be used as a username at this LON-CAPA institution.'); - } elsif ($error eq 'captcha') { - $msg .= &mt('Validation of the code you entered failed.'); } elsif ($error eq 'noemails') { $msg .= &mt('Creation of a new user account using an e-mail address as username is not permitted at this LON-CAPA institution.'); } elsif ($error eq 'emailfail') {