]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 350232: Allow the Webservice interface to create User Accounts
authormkanat%bugzilla.org <>
Fri, 6 Oct 2006 13:30:18 +0000 (13:30 +0000)
committermkanat%bugzilla.org <>
Fri, 6 Oct 2006 13:30:18 +0000 (13:30 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=Wurblzap, a=justdave

Bugzilla/WebService/Constants.pm
Bugzilla/WebService/User.pm

index f9728e24656ef6e95fd470ce1e023f716204d1e2..ba26f3bfa12172f8056005c6e10c03ea2f432b46 100755 (executable)
@@ -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.
index 813b2fc2a4978b839f842fc34d91ccf17af691e8..aa3c7490b8ced083d8984911e96ddfd1668b6a14 100755 (executable)
 # 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