forked from cloudflare/cloudflare-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
origin_ca.go
148 lines (111 loc) · 3.82 KB
/
origin_ca.go
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package cloudflare
import (
"encoding/json"
"time"
"github.com/pkg/errors"
)
// OriginCA resource
// This is the origin_ca resource definition as defined here:
// https://api.cloudflare.com/#cloudflare-ca
type OriginCA struct {
ID string `json:"id"`
Certificate string `json:"certificate"`
Hostnames []string `json:"hostnames"`
ExpiresOn time.Time `json:"expires_on"`
RequestType string `json:"request_type"`
RequestValidity string `json:"requested_validity"`
Csr string `json:"csr"`
}
// OriginCertificateID is the resource sent back for a revoke action
type OriginCertificateID struct {
ID string `json:"id"`
}
// OriginCAResponse is the APIv4 response envelop containing the OriginCA result
type OriginCAResponse struct {
Response
Result OriginCA `json:"result"`
}
// OriginCAResponseList is the APIv4 response envelop containing a listof OriginCA result
type OriginCAResponseList struct {
Response
Result []OriginCA `json:"result"`
ResultInfo ResultInfo `json:"result_info"`
}
// OriginCAResponseRevoke is the APIv4 response envelop containing a revoked cert id
type OriginCAResponseRevoke struct {
Response
Result OriginCertificateID `json:"result"`
}
// CreateOriginCertificate will create an origin certificate for a User
// API reference: https://api.cloudflare.com/#cloudflare-ca-create-certificate
func (api *API) CreateOriginCertificate(certificate OriginCA) (*OriginCA, error) {
uri := "/certificates"
res, err := api.makeRequest("POST", uri, certificate)
if err != nil {
return nil, errors.Wrap(err, errMakeRequestError)
}
var originResponse *OriginCAResponse
err = json.Unmarshal(res, &originResponse)
if err != nil {
return nil, errors.Wrap(err, errUnmarshalError)
}
if !originResponse.Success {
return nil, errors.New(errRequestNotSuccessful)
}
createdCert := originResponse.Result
return &createdCert, nil
}
// OriginCertificates will list all certificates owned by the users
// API reference: https://api.cloudflare.com/#cloudflare-ca-list-certificates
func (api *API) OriginCertificates() ([]OriginCA, error) {
uri := "/certificates"
res, err := api.makeRequest("GET", uri, nil)
if err != nil {
return nil, errors.Wrap(err, errMakeRequestError)
}
var originResponse *OriginCAResponseList
err = json.Unmarshal(res, &originResponse)
if err != nil {
return nil, errors.Wrap(err, errUnmarshalError)
}
if !originResponse.Success {
return nil, errors.New(errRequestNotSuccessful)
}
return originResponse.Result, nil
}
// OriginCertificate will get the details for a given certificate
// API reference: https://api.cloudflare.com/#cloudflare-ca-certificate-details
func (api *API) OriginCertificate(certificateID string) (*OriginCA, error) {
uri := "/certificates/" + certificateID
res, err := api.makeRequest("GET", uri, nil)
if err != nil {
return nil, errors.Wrap(err, errMakeRequestError)
}
var originResponse *OriginCAResponse
err = json.Unmarshal(res, &originResponse)
if err != nil {
return nil, errors.Wrap(err, errUnmarshalError)
}
if !originResponse.Success {
return nil, errors.New(errRequestNotSuccessful)
}
return &originResponse.Result, nil
}
// RevokeOriginCertificate will revoke a given certificate
// API reference: https://api.cloudflare.com/#cloudflare-ca-revoke-certificate
func (api *API) RevokeOriginCertificate(certificateID string) (*OriginCertificateID, error) {
uri := "/certificates/" + certificateID
res, err := api.makeRequest("DELETE", uri, nil)
if err != nil {
return nil, errors.Wrap(err, errMakeRequestError)
}
var originResponse *OriginCAResponseRevoke
err = json.Unmarshal(res, &originResponse)
if err != nil {
return nil, errors.Wrap(err, errUnmarshalError)
}
if !originResponse.Success {
return nil, errors.New(errRequestNotSuccessful)
}
return &originResponse.Result, nil
}