summaryrefslogtreecommitdiffstats
path: root/extensions/Push/lib/Connector/ReviewBoard/Client.pm
blob: 4848d820faf6eec88df60a9d54279c3cef2fa0f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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::Extension::Push::Connector::ReviewBoard::Client;

use 5.10.1;
use strict;
use warnings;

use Carp qw(croak);
use LWP::UserAgent;
use Scalar::Util qw(blessed);
use URI;

use Bugzilla::Extension::Push::Connector::ReviewBoard::ReviewRequest;

BEGIN {
    unless (LWP::UserAgent->can('delete')) {
        *LWP::UserAgent::delete = sub {
            my ($self, @parameters) = @_;
            require HTTP::Request::Common;
            my @suff = $self->_process_colonic_headers(\@parameters, 1);
            return $self->request(HTTP::Request::Common::DELETE(@parameters), @suff);
        };
    }
};

sub new {
    my ($class, %params) = @_;

    croak "->new() is a class method" if blessed($class);
    return bless(\%params, $class);
}

sub username { $_[0]->{username} }
sub password { $_[0]->{password} }
sub base_uri { $_[0]->{base_uri} }
sub realm    { $_[0]->{realm} // 'Web API' }
sub proxy    { $_[0]->{proxy} }

sub _netloc {
    my $self = shift;

    my $uri  = URI->new($self->base_uri);
    return $uri->host . ':' . $uri->port;
}

sub useragent {
    my $self = shift;

    unless ($self->{useragent}) {
        my $ua = LWP::UserAgent->new(agent => Bugzilla->params->{urlbase});
        $ua->credentials(
            $self->_netloc,
            $self->realm,
            $self->username,
            $self->password,
        );
        $ua->proxy('https', $self->proxy) if $self->proxy;
        $ua->timeout(10);

        $self->{useragent} = $ua;
    }

    return $self->{useragent};
}

sub review_request {
    my $self = shift;

    return Bugzilla::Extension::Push::Connector::ReviewBoard::ReviewRequest->new(client => $self, @_);
}

1;