New features for 7.1

This commit is contained in:
Roy Johnson 2006-10-11 19:26:10 +00:00
parent 5b5858055a
commit a43577a119
5 changed files with 300 additions and 3 deletions

View file

@ -24,12 +24,59 @@ use WebGUI::Utility;
our @ISA = qw(WebGUI::Auth);
#-------------------------------------------------------------------
sub _hasNonWordCharacters {
my $self = shift;
my $password = shift;
my $numberRequired = shift;
my @characters = split(//,$password);
my $counter = 0;
foreach my $character (@characters) {
$self->session->errorHandler->warn($character);
$counter++ if ($character =~ /\W/);
return 1 if ($counter == $numberRequired);
}
return 0;
}
#-------------------------------------------------------------------
sub _hasNumberCharacters {
my $self = shift;
my $password = shift;
my $numberRequired = shift;
my @characters = split(//,$password);
my $counter = 0;
foreach my $character (@characters) {
$counter++ if ($character =~ /\d/);
return 1 if ($counter == $numberRequired);
}
return 0;
}
#-------------------------------------------------------------------
sub _hasMixedCaseCharacters {
my $self = shift;
my $password = shift;
my $numberRequired = shift;
my @characters = split(//,$password);
my ($numberOfCaps, $hasLower, $counter);
foreach my $character (@characters) {
$hasLower = 1 if ($character =~ /[a-z]/);
$numberOfCaps++ if ($character =~ /[A-Z]/);
return 1 if ($hasLower && $numberOfCaps == $numberRequired);
}
return 0;
}
#-------------------------------------------------------------------
=head2 _isValidPassword ( )
Validates the password.
Validates the password9.
=cut
@ -41,7 +88,8 @@ sub _isValidPassword {
WebGUI::Macro::negate(\$confirm);
my $error = "";
my $i18n = WebGUI::International->new($self->session,'AuthWebGUI');
my $i18n = WebGUI::International->new($self->session,'AuthWebGUI');
if ($password ne $confirm) {
$error .= '<li>'.$i18n->get(3).'</li>';
}
@ -53,6 +101,18 @@ sub _isValidPassword {
$error .= '<li>'.$i18n->get(7)." ".$self->getSetting("passwordLength").'</li>';
}
if ($self->getSetting("requiredDigits") && !$self->_hasNumberCharacters($password, $self->getSetting("requiredDigits"))) {
$error .= '<li>'.sprintf($i18n->echo("Password must conatain at least %s numeric characters."), $self->getSetting("requiredDigits")).'</li>';
}
if ($self->getSetting("nonWordCharacters") && !$self->_hasNonWordCharacters($password, $self->getSetting("nonWordCharacters"))) {
$error .= '<li>'.sprintf($i18n->echo("Password must contain at least %s non-word characters such as , ! @ etc."), $self->getSetting("nonWordCharacters")).'</li>';
}
if ($self->getSetting("requiredMixedCase") && !$self->_hasMixedCaseCharacters($password, $self->getSetting("requiredMixedCase"))) {
$error .= '<li>'.sprintf($i18n->echo("Password must contain at least %s upper case characters and at least one lowercase character (mixed case)."), $self->getSetting("requiredMixedCase")).'</li>';
}
$self->error($error);
return $error eq "";
}
@ -301,7 +361,7 @@ sub editUserFormSave {
my $userId = $self->session->form->get("uid");
my $properties;
my $userData = $self->getParams($userId);
unless (!$self->session->form->process('authWebGUI.identifier') || $self->session->form->process('authWebGUI.identifier') eq "password") {
unless (!$self->session->form->process('authWebGUI.identifier') || $self->session->form->process('authWebGUI.identifier') eq "password" || !$self->_isValidPassword($self->session->form->get('authWebGUI.identifier'))) {
$properties->{identifier} = Digest::MD5::md5_base64($self->session->form->process('authWebGUI.identifier'));
if($userData->{identifier} ne $properties->{identifier}){
$properties->{passwordLastUpdated} =$self->session->datetime->time();
@ -337,6 +397,21 @@ sub editUserSettingsForm {
-value=>$self->session->setting->get("webguiPasswordLength"),
-label=>$i18n->get(15),
);
$f->integer(
-name => "webguiRequiredDigits",
-label => $i18n->echo("Number of digits required in password"),
-value => $self->session->setting->get("webguiRequiredDigits")
);
$f->integer(
-name => "webguiNonWordCharacters",
-label => $i18n->echo("Number of non-word characters required in password"),
-value => $self->session->setting->get("webguiNonWordCharacters")
);
$f->integer(
-name => "webguiRequiredMixedCase",
-label => $i18n->echo("Number of upper case case characters required in password"),
-value => $self->session->setting->get("webguiRequiredMixedCase")
);
$f->interval(
-name=>"webguiPasswordTimeout",
-label=>$i18n->get(16),
@ -426,6 +501,9 @@ sub editUserSettingsFormSave {
my $f = $self->session->form;
my $s = $self->session->setting;
$s->set("webguiPasswordLength", $f->process("webguiPasswordLength","integer"));
$s->set("webguiRequiredDigits", $f->process("webguiRequiredDigits","integer"));
$s->set("webguiNonWordCharacters", $f->process("webguiNonWordCharacters","integer"));
$s->set("webguiRequiredMixedCase", $f->process("webguiRequiredMixedCase","integer"));
$s->set("webguiPasswordTimeout", $f->process("webguiPasswordTimeout","interval"));
$s->set("webguiExpirePasswordOnCreation", $f->process("webguiExpirePasswordOnCreation","yesNo"));
$s->set("webguiSendWelcomeMessage", $f->process("webguiSendWelcomeMessage","yesNo"));