summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2006-10-06 15:30:18 +0200
committermkanat%bugzilla.org <>2006-10-06 15:30:18 +0200
commitfaa0b904d0ec18b72e8e848783e52296306890dc (patch)
tree3a592a75b7f9d6a3a2c169ef1c23278ada4ca4eb
parentce0b20a534cc5e4906bceb529e9e925207087604 (diff)
downloadbugzilla-faa0b904d0ec18b72e8e848783e52296306890dc.tar.gz
bugzilla-faa0b904d0ec18b72e8e848783e52296306890dc.tar.xz
Bug 350232: Allow the Webservice interface to create User Accounts
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=Wurblzap, a=justdave
-rwxr-xr-xBugzilla/WebService/Constants.pm6
-rwxr-xr-xBugzilla/WebService/User.pm137
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