Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat git-svn-id: svn://10.0.0.236/trunk@219470 18797224-902f-48f8-a5cc-f745e15eee43
299 lines
6.9 KiB
Perl
299 lines
6.9 KiB
Perl
# -*- Mode: perl; indent-tabs-mode: nil -*-
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public
|
|
# License Version 1.1 (the "License"); you may not use this file
|
|
# except in compliance with the License. You may obtain a copy of
|
|
# the License at http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# The Original Code is the Bugzilla Bug Tracking System.
|
|
#
|
|
# Contributor(s): Marc Schumann <wurblzap@gmail.com>
|
|
# Max Kanat-Alexander <mkanat@bugzilla.org>
|
|
# Mads Bondo Dydensborg <mbd@dbc.dk>
|
|
|
|
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, $params) = @_;
|
|
my $remember = $params->{remember};
|
|
|
|
# Convert $remember from a boolean 0/1 value to a CGI-compatible one.
|
|
if (defined($remember)) {
|
|
$remember = $remember? 'on': '';
|
|
}
|
|
else {
|
|
# Use Bugzilla's default if $remember is not supplied.
|
|
$remember =
|
|
Bugzilla->params->{'rememberlogin'} eq 'defaulton'? 'on': '';
|
|
}
|
|
|
|
# Make sure the CGI user info class works if necessary.
|
|
my $cgi = Bugzilla->cgi;
|
|
$cgi->param('Bugzilla_login', $params->{login});
|
|
$cgi->param('Bugzilla_password', $params->{password});
|
|
$cgi->param('Bugzilla_remember', $remember);
|
|
|
|
Bugzilla->login;
|
|
return { id => type('int')->value(Bugzilla->user->id) };
|
|
}
|
|
|
|
sub logout {
|
|
my $self = shift;
|
|
Bugzilla->logout;
|
|
return undef;
|
|
}
|
|
|
|
#################
|
|
# 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 { 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 and
|
|
log in/out using an existing account.
|
|
|
|
=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 Logging In and Out
|
|
|
|
=over
|
|
|
|
=item C<login> B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item B<Description>
|
|
|
|
Logging in, with a username and password, is required for many
|
|
Bugzilla installations, in order to search for bugs, post new bugs,
|
|
etc. This method logs in an user.
|
|
|
|
=item B<Params>
|
|
|
|
=over
|
|
|
|
=item C<login> (string) - The user's login name.
|
|
|
|
=item C<password> (string) - The user's password.
|
|
|
|
=item C<remember> (bool) B<Optional> - if the cookies returned by the
|
|
call to login should expire with the session or not. In order for
|
|
this option to have effect the Bugzilla server must be configured to
|
|
allow the user to set this option - the Bugzilla parameter
|
|
I<rememberlogin> must be set to "defaulton" or
|
|
"defaultoff". Addionally, the client application must implement
|
|
management of cookies across sessions.
|
|
|
|
=back
|
|
|
|
=item B<Returns>
|
|
|
|
On success, a hash containing one item, C<id>, the numeric id of the
|
|
user that was logged in. A set of http cookies is also sent with the
|
|
response. These cookies must be sent along with any future requests
|
|
to the webservice, for the duration of the session.
|
|
|
|
=item B<Errors>
|
|
|
|
=over
|
|
|
|
=item 300 (Invalid Username or Password)
|
|
|
|
The username does not exist, or the password is wrong.
|
|
|
|
=item 301 (Account Disabled)
|
|
|
|
The account has been disabled. A reason may be specified with the
|
|
error.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=item C<logout> B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item B<Description>
|
|
|
|
Log out the user. Does nothing if there is no user logged in.
|
|
|
|
=item B<Params> (none)
|
|
|
|
=item B<Returns> (nothing)
|
|
|
|
=item B<Errors> (none)
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=head2 Account Creation
|
|
|
|
=over
|
|
|
|
=item C<offer_account_by_email> B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item 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.
|
|
|
|
=item B<Param>
|
|
|
|
=over
|
|
|
|
=item C<email> (string) - the email to send the offer to.
|
|
|
|
=back
|
|
|
|
=item B<Returns> (nothing)
|
|
|
|
=item B<Errors>
|
|
|
|
=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
|
|
|
|
=back
|
|
|
|
=item C<create> B<EXPERIMENTAL>
|
|
|
|
=over
|
|
|
|
=item B<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.
|
|
|
|
=item B<Params>
|
|
|
|
=over
|
|
|
|
=item C<email> (string) - The email address for the new user.
|
|
|
|
=item C<full_name> (string) B<Optional> - The user's full name. Will
|
|
be set to empty if not specified.
|
|
|
|
=item C<password> (string) B<Optional> - 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.
|
|
|
|
=back
|
|
|
|
=item B<Returns>
|
|
|
|
A hash containing one item, C<id>, the numeric id of the user that was
|
|
created.
|
|
|
|
=item B<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
|
|
|
|
=back
|