зеркало из https://github.com/mozilla/pjs.git
Bug 350232: Allow the Webservice interface to create User Accounts
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=Wurblzap, a=justdave
This commit is contained in:
Родитель
2d19259a04
Коммит
f4e854950e
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче