X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FPassword_Mixin.pm;h=da80cd27ff7660bee4de05421cfedc3ad01ac005;hb=22052bd02aa27742afb6b81c5bd609025a945474;hp=834fd6fc3d587cbf9412383cdce3c7120f763360;hpb=4b147e668c23fd3011885ed94d84f4f3bb27c71f;p=freeside.git diff --git a/FS/FS/Password_Mixin.pm b/FS/FS/Password_Mixin.pm index 834fd6fc3..da80cd27f 100644 --- a/FS/FS/Password_Mixin.pm +++ b/FS/FS/Password_Mixin.pm @@ -14,6 +14,8 @@ FS::UID->install_callback( sub { $conf = FS::Conf->new; }); +our @pw_set; + our $me = '[' . __PACKAGE__ . ']'; our $BLOWFISH_COST = 10; @@ -35,7 +37,7 @@ message on failure, an empty string on success. This MUST NOT be called from check(). It should be called by the office UI, self-service ClientAPI, or other I code that processes a password change, and only if the user has taken some action with the intent -of changing the password. +of setting the password. =cut @@ -47,7 +49,7 @@ sub is_password_allowed { # options for Data::Password $DICTIONARY = 4; # minimum length of disallowed words $MINLEN = $conf->config('passwordmin') || 6; - $MAXLEN = $conf->config('passwordmax') || 8; + $MAXLEN = $conf->config('passwordmax') || 12; $GROUPS = 4; # must have all 4 'character groups': numbers, symbols, uppercase, lowercase # other options use the defaults listed below: # $FOLLOWING = 3; # disallows more than 3 chars in a row, by alphabet or keyboard (ie abcd or asdf) @@ -215,6 +217,26 @@ sub insert_password_history { } +=item delete_password_history; + +Removes all password history records attached to this object, in preparation +to delete the object. + +=cut + +sub delete_password_history { + my $self = shift; + my @records = qsearch('password_history', { + $self->password_history_key => $self->get($self->primary_key) + }); + my $error = ''; + foreach (@records) { + $error ||= $_->delete; + } + return $error . ' (clearing password history)' if $error; + ''; +} + =item _blowfishcrypt PASSWORD For internal use: takes PASSWORD and returns a new @@ -234,6 +256,37 @@ sub _blowfishcrypt { =back +=head1 CLASS METHODS + +=over 4 + +=item pw_set + +Returns the list of characters allowed in random passwords (from the +C config). + +=cut + +sub pw_set { + my $class = shift; + if (!@pw_set) { + my $pw_set = $conf->config('password-generated-characters'); + $pw_set =~ s/\s//g; # don't ever allow whitespace + if ( $pw_set =~ /[[:lower:]]/ + && $pw_set =~ /[[:upper:]]/ + && $pw_set =~ /[[:digit:]]/ + && $pw_set =~ /[[:punct:]]/ ) { + @pw_set = split('', $pw_set); + } else { + warn "password-generated-characters set is insufficient; using default."; + @pw_set = split('', 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789()#.,'); + } + } + return @pw_set; +} + +=back + =head1 SEE ALSO L