--- loncom/interface/createaccount.pm 2017/08/03 16:22:08 1.74 +++ loncom/interface/createaccount.pm 2019/08/25 02:42:56 1.79 @@ -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.74 2017/08/03 16:22:08 raeburn Exp $ +# $Id: createaccount.pm,v 1.79 2019/08/25 02:42:56 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; @@ -328,7 +329,7 @@ sub handler { &print_header($r,$start_page,$courseid,$pagetitle); my $now=time; if ((grep(/^login$/,@{$cancreate})) && (!grep(/^email$/,@{$cancreate}))) { - if (open(my $jsh,"<$include/londes.js")) { + if (open(my $jsh,"<","$include/londes.js")) { while(my $line = <$jsh>) { $r->print($line); } @@ -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'); @@ -634,7 +641,7 @@ sub print_username_form { push(@posstypes,'default'); } $output .= '
'.&mt('Choose your affiliation at [_1]',$domdesc).'
'."\n". - ''; return $output; } my (%rulematch,%inst_results,%curr_rules,%got_rules,%alerts); @@ -878,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);
+ $min = $Apache::lonnet::passwdmin;
+ if (ref($passwdconf{'chars'}) eq 'ARRAY') {
+ if ($passwdconf{'min'} =~ /^\d+$/) {
+ if ($passwdconf{'min'} > $min) {
+ $min = $passwdconf{'min'};
+ }
+ }
+ if ($passwdconf{'max'} =~ /^\d+$/) {
+ $max = $passwdconf{'max'};
+ }
+ @chars = @{$passwdconf{'chars'}};
+ }
+ 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') { + my $plainpass = &Apache::loncommon::des_decrypt($key,$encpass); + if (($min > 0) || ($max ne '') || (@chars > 0)) { + 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 .= '