X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FUser.pm;h=af4a6ad99b72e100f366b96a73b70556fa7bb27e;hb=0ea23112cfa0d82738b0f08d60d90579721b7524;hp=f26ace445d4051c452d54b8c3df576ec12569a32;hpb=a69f8a2b55163b5f0eac908918e46a3eb3bd2290;p=freeside.git diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm index f26ace445..af4a6ad99 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) @@ -167,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. @@ -270,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 @@ -572,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 @@ -922,7 +957,7 @@ sub IsPassword { my $hash = MIME::Base64::decode_base64($stored); # Decoding yields 30 byes; first 4 are the salt, the rest are substr(SHA256,0,26) my $salt = substr($hash, 0, 4, ""); - return 0 unless substr(Digest::SHA::sha256($salt . Digest::MD5::md5($value)), 0, 26) eq $hash; + return 0 unless substr(Digest::SHA::sha256($salt . Digest::MD5::md5(encode_utf8($value))), 0, 26) eq $hash; } elsif (length $stored == 32) { # Hex nonsalted-md5 return 0 unless Digest::MD5::md5_hex(encode_utf8($value)) eq $stored; @@ -1355,6 +1390,28 @@ sub SetPreferences { } } +=head2 DeletePreferences NAME/OBJ VALUE + +Delete user preferences associated with given object or name. + +=cut + +sub DeletePreferences { + my $self = shift; + my $name = _PrefName( shift ); + + return (0, $self->loc("No permission to set preferences")) + unless $self->CurrentUserCanModify('Preferences'); + + my $attr = RT::Attribute->new( $self->CurrentUser ); + $attr->LoadByNameAndObject( Object => $self, Name => $name ); + if ( $attr->Id ) { + return $attr->Delete; + } + + return (0, $self->loc("Preferences were not found")); +} + =head2 Stylesheet Returns a list of valid stylesheets take from preferences. @@ -1393,7 +1450,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);