X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FUser.pm;h=018ac8a62fff83349d4083346e928981ae897123;hb=b8988e1d3ac75af63c85e8563e57701030315a9e;hp=9b4a8268389826fdd4105070a64bf4eb27bc166a;hpb=a6fe07e49e3fc12169e801b1ed6874c3a5bd8500;p=freeside.git diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm index 9b4a82683..018ac8a62 100755 --- a/rt/lib/RT/User.pm +++ b/rt/lib/RT/User.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -102,6 +102,7 @@ sub _OverlayAccessible { AuthSystem => { public => 1, admin => 1 }, Gecos => { public => 1, admin => 1 }, PGPKey => { public => 1, admin => 1 }, + PrivateKey => { admin => 1 }, } } @@ -166,18 +167,10 @@ sub Create { return ( 0, $self->loc("Must specify 'Name' attribute") ); } - #SANITY CHECK THE NAME AND ABORT IF IT'S TAKEN - if (RT->SystemUser) { #This only works if RT::SystemUser has been defined - my $TempUser = RT::User->new(RT->SystemUser); - $TempUser->Load( $args{'Name'} ); - return ( 0, $self->loc('Name in use') ) if ( $TempUser->Id ); - - my ($val, $message) = $self->ValidateEmailAddress( $args{'EmailAddress'} ); - return (0, $message) unless ( $val ); - } else { - $RT::Logger->warning( "$self couldn't check for pre-existing users"); - } - + my ( $val, $msg ) = $self->ValidateName( $args{'Name'} ); + return ( 0, $msg ) unless $val; + ( $val, $msg ) = $self->ValidateEmailAddress( $args{'EmailAddress'} ); + return ( 0, $msg ) unless ($val); $RT::Handle->BeginTransaction(); # Groups deal with principal ids, rather than user ids. @@ -269,6 +262,30 @@ sub Create { return ( $id, $self->loc('User created') ); } +=head2 ValidateName STRING + +Returns either (0, "failure reason") or 1 depending on whether the given +name is valid. + +=cut + +sub ValidateName { + my $self = shift; + my $name = shift; + + return ( 0, $self->loc('empty name') ) unless defined $name && length $name; + + my $TempUser = RT::User->new( RT->SystemUser ); + $TempUser->Load($name); + + if ( $TempUser->id && ( !$self->id || $TempUser->id != $self->id ) ) { + return ( 0, $self->loc('Name in use') ); + } + else { + return 1; + } +} + =head2 ValidatePassword STRING Returns either (0, "failure reason") or 1 depending on whether the given @@ -571,6 +588,25 @@ sub ValidateEmailAddress { } } +=head2 SetName + +Check to make sure someone else isn't using this name already + +=cut + +sub SetName { + my $self = shift; + my $Value = shift; + + my ( $val, $message ) = $self->ValidateName($Value); + if ($val) { + return $self->_Set( Field => 'Name', Value => $Value ); + } + else { + return ( 0, $message ); + } +} + =head2 SetEmailAddress Check to make sure someone else isn't using this email address already @@ -932,7 +968,7 @@ sub IsPassword { # crypt() output return 0 unless crypt(encode_utf8($value), $stored) eq $stored; } else { - $RT::Logger->warn("Unknown password form"); + $RT::Logger->warning("Unknown password form"); return 0; } @@ -1392,7 +1428,7 @@ $user->WatchedQueues('Cc', 'AdminCc'); sub WatchedQueues { my $self = shift; - my @roles = @_ || ('Cc', 'AdminCc'); + my @roles = @_ ? @_ : ('Cc', 'AdminCc'); $RT::Logger->debug('WatcheQueues got user ' . $self->Name);