--- loncom/interface/domainprefs.pm 2019/08/21 20:31:37 1.160.6.98
+++ loncom/interface/domainprefs.pm 2019/08/25 14:35:21 1.160.6.99
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.160.6.98 2019/08/21 20:31:37 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.99 2019/08/25 14:35:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -4341,6 +4341,7 @@ sub print_passwords {
}
} elsif ($position eq 'lower') {
my ($min,$max,%chars,$numsaved);
+ $min = $Apache::lonnet::passwdmin;
if (ref($settings) eq 'HASH') {
if ($settings->{min}) {
$min = $settings->{min};
@@ -4354,8 +4355,6 @@ sub print_passwords {
if ($settings->{numsaved}) {
$numsaved = $settings->{numsaved};
}
- } else {
- $min = '7';
}
my %rulenames = &Apache::lonlocal::texthash(
uc => 'At least one upper case letter',
@@ -4366,14 +4365,16 @@ sub print_passwords {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= '
'.$titles{'min'}.' | '.
''.
- ''.
- ' '.&mt('(Leave blank for no minimum)').''.
+ ''.
+ ' '.&mt('(Enter an integer: 7 or larger)').''.
' |
';
$itemcount ++;
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= ''.$titles{'max'}.' | '.
''.
- ''.
+ ''.
' '.&mt('(Leave blank for no maximum)').''.
' |
';
$itemcount ++;
@@ -4413,7 +4414,8 @@ sub print_passwords {
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= ''.$titles{'numsaved'}.' | '.
''.
- ''.
+ ''.
' '.&mt('(Leave blank to not save previous passwords)').''.
' |
';
} else {
@@ -7135,16 +7137,22 @@ ENDSCRIPT
}
sub passwords_javascript {
- my $intauthcheck = &mt('Warning: disallowing login for an authenticated user if the stored cost is less than the default will require a password reset by/for the user.');
- my $intauthcost = &mt('Warning: bcrypt encryption cost for internal authentication must be an integer.');
- &js_escape(\$intauthcheck);
- &js_escape(\$intauthcost);
+ my %intalert = &Apache::lonlocal::texthash (
+ authcheck => 'Warning: disallowing login for an authenticated user if the stored cost is less than the default will require a password reset by/for the user.',
+ authcost => 'Warning: bcrypt encryption cost for internal authentication must be an integer.',
+ passmin => 'Warning: minimum password length must be a positive integer greater than 6.',
+ passmax => 'Warning: maximum password length must be a positive integer (or blank).',
+ passexp => 'Warning: days before password expiration must be a positive integer (or blank).',
+ passnum => 'Warning: number of previous passwords to save must be a positive integer (or blank).',
+ );
+ &js_escape(\%intalert);
+ my $defmin = $Apache::lonnet::passwdmin;
my $intauthjs = <<"ENDSCRIPT";
function warnIntAuth(field) {
if (field.name == 'intauth_check') {
if (field.value == '2') {
- alert('$intauthcheck');
+ alert('$intalert{authcheck}');
}
}
if (field.name == 'intauth_cost') {
@@ -7152,7 +7160,60 @@ function warnIntAuth(field) {
if (field.value != '') {
var regexdigit=/^\\d+\$/;
if (!regexdigit.test(field.value)) {
- alert('$intauthcost');
+ alert('$intalert{authcost}');
+ }
+ }
+ }
+ return;
+}
+
+function warnIntPass(field) {
+ field.value.replace(/^\s+/,'');
+ field.value.replace(/\s+\$/,'');
+ var regexdigit=/^\\d+\$/;
+ if (field.name == 'passwords_min') {
+ if (field.value == '') {
+ alert('$intalert{passmin}');
+ field.value = '$defmin';
+ } else {
+ if (!regexdigit.test(field.value)) {
+ alert('$intalert{passmin}');
+ field.value = '$defmin';
+ }
+ var minval = parseInt(field.value,10);
+ if (minval < $defmin) {
+ alert('$intalert{passmin}');
+ field.value = '$defmin';
+ }
+ }
+ } else {
+ if (field.value == '0') {
+ field.value = '';
+ }
+ if (field.value != '') {
+ if (field.name == 'passwords_expire') {
+ var regexpposnum=/^\\d+(|\\.\\d*)\$/;
+ if (!regexpposnum.test(field.value)) {
+ alert('$intalert{passexp}');
+ field.value = '';
+ } else {
+ var expval = parseFloat(field.value);
+ if (expval == 0) {
+ alert('$intalert{passexp}');
+ field.value = '';
+ }
+ }
+ } else {
+ if (!regexdigit.test(field.value)) {
+ if (field.name == 'passwords_max') {
+ alert('$intalert{passmax}');
+ } else {
+ if (field.name == 'passwords_numsaved') {
+ alert('$intalert{passnum}');
+ }
+ }
+ }
+ field.value = '';
}
}
}
@@ -10575,8 +10636,8 @@ sub modify_passwords {
'intauth_cost' => 10,
'intauth_check' => 0,
'intauth_switch' => 0,
- 'min' => 7,
);
+ $staticdefaults{'min'} = $Apache::lonnet::passwdmin;
foreach my $type (@oktypes) {
$staticdefaults{'resetpostlink'}{$type} = ['email','username'];
}
@@ -10756,7 +10817,18 @@ sub modify_passwords {
}
foreach my $rule ('min','max','numsaved') {
$env{'form.passwords_'.$rule} =~ s/^\s+|\s+$//g;
- if ($env{'form.passwords_'.$rule} =~ /^\d+$/) {
+ my $ruleok;
+ if ($rule eq 'min') {
+ if ($env{'form.passwords_'.$rule} =~ /^\d+$/) {
+ if ($env{'form.passwords_'.$rule} >= $Apache::lonnet::passwdmin) {
+ $ruleok = 1;
+ }
+ }
+ } elsif (($env{'form.passwords_'.$rule} =~ /^\d+$/) &&
+ ($env{'form.passwords_'.$rule} ne '0')) {
+ $ruleok = 1;
+ }
+ if ($ruleok) {
$newvalues{$rule} = $env{'form.passwords_'.$rule};
if (exists($current{$rule})) {
if ($newvalues{$rule} ne $current{$rule}) {
@@ -10963,7 +11035,8 @@ sub modify_passwords {
if ($confighash{'passwords'}{$rule} eq '') {
if ($rule eq 'min') {
$resulttext .= ''.&mt('[_1] not set.',$titles{$rule});
- ' '.&mt('Default of 7 will be used').'';
+ ' '.&mt('Default of [_1] will be used',
+ $Apache::lonnet::passwdmin).'';
} else {
$resulttext .= ''.&mt('[_1] set to none',$titles{$rule}).'';
}