From faa0b904d0ec18b72e8e848783e52296306890dc Mon Sep 17 00:00:00 2001 From: "mkanat%bugzilla.org" <> Date: Fri, 6 Oct 2006 13:30:18 +0000 Subject: Bug 350232: Allow the Webservice interface to create User Accounts Patch By Max Kanat-Alexander r=Wurblzap, a=justdave --- Bugzilla/WebService/Constants.pm | 6 ++ Bugzilla/WebService/User.pm | 137 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) (limited to 'Bugzilla/WebService') 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 +# Max Kanat-Alexander 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 for a description of what B, B, +and B mean, and for more information about error codes. + +=head2 Account Creation + +=over + +=item C B + +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 - 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 B + +Description: Creates a user account directly in Bugzilla, password and all. + Instead of this, you should use L + when possible, because that makes sure that the email address + specified can actually receive an email. This function + does not check that. + +Params: C B - The email address for the new user. + C - A string, the user's full name. Will be + set to empty if not specified. + C - 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, the numeric id of + the user that was created. + +Errors: The same as L. 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 -- cgit v1.2.3-24-g4f1b