File Coverage

blib/lib/WWW/Hetzner/Cloud/API/Certificates.pm
Criterion Covered Total %
statement 37 47 78.7
branch 8 24 33.3
condition 1 2 50.0
subroutine 10 12 83.3
pod 6 6 100.0
total 62 91 68.1


line stmt bran cond sub pod time code
1             package WWW::Hetzner::Cloud::API::Certificates;
2             # ABSTRACT: Hetzner Cloud Certificates API
3              
4             our $VERSION = '0.100';
5              
6 25     25   202 use Moo;
  25         85  
  25         194  
7 25     25   10694 use Carp qw(croak);
  25         76  
  25         1967  
8 25     25   15067 use WWW::Hetzner::Cloud::Certificate;
  25         123  
  25         1190  
9 25     25   195 use namespace::clean;
  25         52  
  25         150  
10              
11              
12             has client => (
13             is => 'ro',
14             required => 1,
15             weak_ref => 1,
16             );
17              
18             sub _wrap {
19 3     3   6 my ($self, $data) = @_;
20 3         46 return WWW::Hetzner::Cloud::Certificate->new(
21             client => $self->client,
22             %$data,
23             );
24             }
25              
26             sub _wrap_list {
27 1     1   3 my ($self, $list) = @_;
28 1         3 return [ map { $self->_wrap($_) } @$list ];
  1         3  
29             }
30              
31              
32             sub list {
33 1     1 1 937 my ($self, %params) = @_;
34              
35 1         10 my $result = $self->client->get('/certificates', params => \%params);
36 1   50     7 return $self->_wrap_list($result->{certificates} // []);
37             }
38              
39              
40             sub get {
41 1     1 1 21 my ($self, $id) = @_;
42 1 50       5 croak "Certificate ID required" unless $id;
43              
44 1         9 my $result = $self->client->get("/certificates/$id");
45 1         4 return $self->_wrap($result->{certificate});
46             }
47              
48              
49             sub create {
50 1     1 1 22 my ($self, %params) = @_;
51              
52 1 50       4 croak "name required" unless $params{name};
53 1 50       3 croak "type required (uploaded or managed)" unless $params{type};
54              
55             my $body = {
56             name => $params{name},
57             type => $params{type},
58 1         4 };
59              
60             # For uploaded certificates
61 1 50       25 $body->{certificate} = $params{certificate} if $params{certificate};
62 1 50       4 $body->{private_key} = $params{private_key} if $params{private_key};
63              
64             # For managed certificates
65 1 50       4 $body->{domain_names} = $params{domain_names} if $params{domain_names};
66              
67 1 50       3 $body->{labels} = $params{labels} if $params{labels};
68              
69 1         9 my $result = $self->client->post('/certificates', $body);
70 1         4 return $self->_wrap($result->{certificate});
71             }
72              
73              
74             sub update {
75 0     0 1 0 my ($self, $id, %params) = @_;
76 0 0       0 croak "Certificate ID required" unless $id;
77              
78 0         0 my $body = {};
79 0 0       0 $body->{name} = $params{name} if exists $params{name};
80 0 0       0 $body->{labels} = $params{labels} if exists $params{labels};
81              
82 0         0 my $result = $self->client->put("/certificates/$id", $body);
83 0         0 return $self->_wrap($result->{certificate});
84             }
85              
86              
87             sub delete {
88 1     1 1 19 my ($self, $id) = @_;
89 1 50       4 croak "Certificate ID required" unless $id;
90              
91 1         7 return $self->client->delete("/certificates/$id");
92             }
93              
94              
95             sub retry {
96 0     0 1   my ($self, $id) = @_;
97 0 0         croak "Certificate ID required" unless $id;
98              
99 0           return $self->client->post("/certificates/$id/actions/retry", {});
100             }
101              
102              
103             1;
104              
105             __END__