diff options
-rwxr-xr-x | Bugzilla/WebService/Constants.pm | 6 | ||||
-rwxr-xr-x | Bugzilla/WebService/User.pm | 137 |
2 files changed, 143 insertions, 0 deletions
diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index f9728e246..ba26f3bfa 100755 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -58,6 +58,12 @@ use constant WS_ERROR_CODE => { account_disabled => 301, auth_invalid_email => 302, extern_id_conflict => -303, + + # User errors are 500-600. + account_exists => 500, + illegal_email_address => 501, + password_too_short => 502, + password_too_long => 503, }; # These are the fallback defaults for errors not in ERROR_CODE. diff --git a/Bugzilla/WebService/User.pm b/Bugzilla/WebService/User.pm index 813b2fc2a..aa3c7490b 100755 --- a/Bugzilla/WebService/User.pm +++ b/Bugzilla/WebService/User.pm @@ -13,13 +13,25 @@ # The Original Code is the Bugzilla Bug Tracking System. # # Contributor(s): Marc Schumann <wurblzap@gmail.com> +# Max Kanat-Alexander <mkanat@bugzilla.org> package Bugzilla::WebService::User; use strict; use base qw(Bugzilla::WebService); + +import SOAP::Data qw(type); + use Bugzilla; use Bugzilla::Constants; +use Bugzilla::Error; +use Bugzilla::User; +use Bugzilla::Util qw(trim); +use Bugzilla::Token; + +############## +# User Login # +############## sub login { my $self = shift; @@ -52,4 +64,129 @@ sub logout { Bugzilla->logout; } +################# +# User Creation # +################# + +sub offer_account_by_email { + my $self = shift; + my ($params) = @_; + my $email = trim($params->{email}) + || ThrowCodeError('param_required', { param => 'email' }); + + $email = Bugzilla::User->check_login_name_for_creation($email); + + # Create and send a token for this new account. + Bugzilla::Token::issue_new_user_account_token($email); + + return undef; +} + +sub create { + my $self = shift; + my ($params) = @_; + + Bugzilla->user->in_group('editusers') + || ThrowUserError("auth_failure", { group => "editusers", + action => "add", + object => "users"}); + + my $email = trim($params->{email}) + || ThrowCodeError('param_required', { param => 'email' }); + my $realname = trim($params->{full_name}); + my $password = trim($params->{password}) || '*'; + + my $user = Bugzilla::User->create({ + login_name => $email, + realname => $realname, + cryptpassword => $password + }); + + return { user_id => type('int')->value($user->id) }; +} + 1; + +__END__ + +=head1 NAME + +Bugzilla::Webservice::User - The User Account and Login API + +=head1 DESCRIPTION + +This part of the Bugzilla API allows you to create User Accounts. + +=head1 METHODS + +See L<Bugzilla::WebService> for a description of what B<STABLE>, B<UNSTABLE>, +and B<EXPERIMENTAL> mean, and for more information about error codes. + +=head2 Account Creation + +=over + +=item C<offer_account_by_email> B<EXPERIMENTAL> + +Description: Sends an email to the user, offering to create an account. + The user will have to click on a URL in the email, and + choose their password and real name. + This is the recommended way to create a Bugzilla account. + +Params: C<email> - The email to send the offer to. + +Returns: nothing + +=over + +=item 500 (Illegal Email Address) + +This Bugzilla does not allow you to create accounts with the format of +email address you specified. Account creation may be entirely disabled. + +=item 501 (Account Already Exists) + +An account with that email address already exists in Bugzilla. + +=back + +=item C<create> B<EXPERIMENTAL> + +Description: Creates a user account directly in Bugzilla, password and all. + Instead of this, you should use L</offer_account_by_email> + when possible, because that makes sure that the email address + specified can actually receive an email. This function + does not check that. + +Params: C<email> B<Required> - The email address for the new user. + C<full_name> - A string, the user's full name. Will be + set to empty if not specified. + C<password> - The password for the new user account, in + plain text. It will be stripped of leading and trailing + whitespace. If blank or not specified, the newly + created account will exist in Bugzilla, but will not + be allowed to log in using DB authentication until a + password is set either by the user (through resetting + their password) or by the administrator. + +Returns: A hash containing one item, C<user_id>, the numeric id of + the user that was created. + +Errors: The same as L</offer_account_by_email>. If a password + is specified, the function may also throw: + +=over + +=item 502 (Password Too Short) + +The password specified is too short. (Usually, this means the +password is under three characters.) + +=item 503 (Password Too Long) + +The password specified is too long. (Usually, this means the +password is over ten characters.) + +=back + +=back |