156 lines
3.7 KiB
Perl
156 lines
3.7 KiB
Perl
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
# defined by the Mozilla Public License, v. 2.0.
|
|
|
|
package Bugzilla::User::APIKey;
|
|
|
|
use 5.10.1;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use parent qw(Bugzilla::Object);
|
|
|
|
use Bugzilla::User;
|
|
use Bugzilla::Util qw(generate_random_password trim);
|
|
|
|
#####################################################################
|
|
# Overriden Constants that are used as methods
|
|
#####################################################################
|
|
|
|
use constant DB_TABLE => 'user_api_keys';
|
|
use constant DB_COLUMNS => qw(
|
|
id
|
|
user_id
|
|
api_key
|
|
description
|
|
revoked
|
|
last_used
|
|
);
|
|
|
|
use constant UPDATE_COLUMNS => qw(description revoked last_used);
|
|
use constant VALIDATORS => {
|
|
api_key => \&_check_api_key,
|
|
description => \&_check_description,
|
|
revoked => \&Bugzilla::Object::check_boolean,
|
|
};
|
|
use constant LIST_ORDER => 'id';
|
|
use constant NAME_FIELD => 'api_key';
|
|
|
|
# turn off auditing and exclude these objects from memcached
|
|
use constant { AUDIT_CREATES => 0,
|
|
AUDIT_UPDATES => 0,
|
|
AUDIT_REMOVES => 0,
|
|
USE_MEMCACHED => 0 };
|
|
|
|
# Accessors
|
|
sub id { return $_[0]->{id} }
|
|
sub user_id { return $_[0]->{user_id} }
|
|
sub api_key { return $_[0]->{api_key} }
|
|
sub description { return $_[0]->{description} }
|
|
sub revoked { return $_[0]->{revoked} }
|
|
sub last_used { return $_[0]->{last_used} }
|
|
|
|
# Helpers
|
|
sub user {
|
|
my $self = shift;
|
|
$self->{user} //= Bugzilla::User->new({name => $self->user_id, cache => 1});
|
|
return $self->{user};
|
|
}
|
|
|
|
sub update_last_used {
|
|
my $self = shift;
|
|
my $timestamp = shift
|
|
|| Bugzilla->dbh->selectrow_array('SELECT LOCALTIMESTAMP(0)');
|
|
$self->set('last_used', $timestamp);
|
|
$self->update;
|
|
}
|
|
|
|
# Setters
|
|
sub set_description { $_[0]->set('description', $_[1]); }
|
|
sub set_revoked { $_[0]->set('revoked', $_[1]); }
|
|
|
|
# Validators
|
|
sub _check_api_key { return generate_random_password(40); }
|
|
sub _check_description { return trim($_[1]) || ''; }
|
|
1;
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
Bugzilla::User::APIKey - Model for an api key belonging to a user.
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
use Bugzilla::User::APIKey;
|
|
|
|
my $api_key = Bugzilla::User::APIKey->new($id);
|
|
my $api_key = Bugzilla::User::APIKey->new({ name => $api_key });
|
|
|
|
# Class Functions
|
|
$user_api_key = Bugzilla::User::APIKey->create({
|
|
description => $description,
|
|
});
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This package handles Bugzilla User::APIKey.
|
|
|
|
C<Bugzilla::User::APIKey> is an implementation of L<Bugzilla::Object>, and
|
|
thus provides all the methods of L<Bugzilla::Object> in addition to the methods
|
|
listed below.
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 Accessor Methods
|
|
|
|
=over
|
|
|
|
=item C<id>
|
|
|
|
The internal id of the api key.
|
|
|
|
=item C<user>
|
|
|
|
The Bugzilla::User object that this api key belongs to.
|
|
|
|
=item C<user_id>
|
|
|
|
The user id that this api key belongs to.
|
|
|
|
=item C<api_key>
|
|
|
|
The API key, which is a random string.
|
|
|
|
=item C<description>
|
|
|
|
An optional string that lets the user describe what a key is used for.
|
|
For example: "Dashboard key", "Application X key".
|
|
|
|
=item C<revoked>
|
|
|
|
If true, this api key cannot be used.
|
|
|
|
=item C<last_used>
|
|
|
|
The date that this key was last used. undef if never used.
|
|
|
|
=item C<update_last_used>
|
|
|
|
Updates the last used value to the current timestamp. This is updated even
|
|
if the RPC call resulted in an error. It is not updated when the description
|
|
or the revoked flag is changed.
|
|
|
|
=item C<set_description>
|
|
|
|
Sets the new description
|
|
|
|
=item C<set_revoked>
|
|
|
|
Sets the revoked flag
|
|
|
|
=back
|