forked from cloudflare/cloudflare-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpages_domain.go
194 lines (161 loc) · 5.54 KB
/
pages_domain.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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
package cloudflare
import (
"context"
"fmt"
"net/http"
"time"
"github.com/goccy/go-json"
)
// PagesDomain represents a pages domain.
type PagesDomain struct {
ID string `json:"id"`
Name string `json:"name"`
Status string `json:"status"`
VerificationData VerificationData `json:"verification_data"`
ValidationData ValidationData `json:"validation_data"`
ZoneTag string `json:"zone_tag"`
CreatedOn *time.Time `json:"created_on"`
}
// VerificationData represents verification data for a domain.
type VerificationData struct {
Status string `json:"status"`
}
// ValidationData represents validation data for a domain.
type ValidationData struct {
Status string `json:"status"`
Method string `json:"method"`
}
// PagesDomainsParameters represents parameters for a pages domains request.
type PagesDomainsParameters struct {
AccountID string
ProjectName string
}
// PagesDomainsResponse represents an API response for a pages domains request.
type PagesDomainsResponse struct {
Response
Result []PagesDomain `json:"result,omitempty"`
}
// PagesDomainParameters represents parameters for a pages domain request.
type PagesDomainParameters struct {
AccountID string `json:"-"`
ProjectName string `json:"-"`
DomainName string `json:"name,omitempty"`
}
// PagesDomainResponse represents an API response for a pages domain request.
type PagesDomainResponse struct {
Response
Result PagesDomain `json:"result,omitempty"`
}
// GetPagesDomains gets all domains for a pages project.
//
// API Reference: https://api.cloudflare.com/#pages-domains-get-domains
func (api *API) GetPagesDomains(ctx context.Context, params PagesDomainsParameters) ([]PagesDomain, error) {
if params.AccountID == "" {
return []PagesDomain{}, ErrMissingAccountID
}
if params.ProjectName == "" {
return []PagesDomain{}, ErrMissingProjectName
}
uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/domains", params.AccountID, params.ProjectName)
res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
if err != nil {
return []PagesDomain{}, err
}
var pageDomainResponse PagesDomainsResponse
if err := json.Unmarshal(res, &pageDomainResponse); err != nil {
return []PagesDomain{}, err
}
return pageDomainResponse.Result, nil
}
// GetPagesDomain gets a single domain.
//
// API Reference: https://api.cloudflare.com/#pages-domains-get-domains
func (api *API) GetPagesDomain(ctx context.Context, params PagesDomainParameters) (PagesDomain, error) {
if params.AccountID == "" {
return PagesDomain{}, ErrMissingAccountID
}
if params.ProjectName == "" {
return PagesDomain{}, ErrMissingProjectName
}
if params.DomainName == "" {
return PagesDomain{}, ErrMissingDomain
}
uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/domains/%s", params.AccountID, params.ProjectName, params.DomainName)
res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
if err != nil {
return PagesDomain{}, err
}
var pagesDomainResponse PagesDomainResponse
if err := json.Unmarshal(res, &pagesDomainResponse); err != nil {
return PagesDomain{}, err
}
return pagesDomainResponse.Result, nil
}
// PagesPatchDomain retries the validation status of a single domain.
//
// API Reference: https://api.cloudflare.com/#pages-domains-patch-domain
func (api *API) PagesPatchDomain(ctx context.Context, params PagesDomainParameters) (PagesDomain, error) {
if params.AccountID == "" {
return PagesDomain{}, ErrMissingAccountID
}
if params.ProjectName == "" {
return PagesDomain{}, ErrMissingProjectName
}
if params.DomainName == "" {
return PagesDomain{}, ErrMissingDomain
}
uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/domains/%s", params.AccountID, params.ProjectName, params.DomainName)
res, err := api.makeRequestContext(ctx, http.MethodPatch, uri, nil)
if err != nil {
return PagesDomain{}, err
}
var pagesDomainResponse PagesDomainResponse
if err := json.Unmarshal(res, &pagesDomainResponse); err != nil {
return PagesDomain{}, err
}
return pagesDomainResponse.Result, nil
}
// PagesAddDomain adds a domain to a pages project.
//
// API Reference: https://api.cloudflare.com/#pages-domains-add-domain
func (api *API) PagesAddDomain(ctx context.Context, params PagesDomainParameters) (PagesDomain, error) {
if params.AccountID == "" {
return PagesDomain{}, ErrMissingAccountID
}
if params.ProjectName == "" {
return PagesDomain{}, ErrMissingProjectName
}
if params.DomainName == "" {
return PagesDomain{}, ErrMissingDomain
}
uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/domains", params.AccountID, params.ProjectName)
res, err := api.makeRequestContext(ctx, http.MethodPost, uri, params)
if err != nil {
return PagesDomain{}, err
}
var pagesDomainResponse PagesDomainResponse
if err := json.Unmarshal(res, &pagesDomainResponse); err != nil {
return PagesDomain{}, err
}
return pagesDomainResponse.Result, nil
}
// PagesDeleteDomain removes a domain from a pages project.
//
// API Reference: https://api.cloudflare.com/#pages-domains-delete-domain
func (api *API) PagesDeleteDomain(ctx context.Context, params PagesDomainParameters) error {
if params.AccountID == "" {
return ErrMissingAccountID
}
if params.ProjectName == "" {
return ErrMissingProjectName
}
if params.DomainName == "" {
return ErrMissingDomain
}
uri := fmt.Sprintf("/accounts/%s/pages/projects/%s/domains/%s", params.AccountID, params.ProjectName, params.DomainName)
_, err := api.makeRequestContext(ctx, http.MethodDelete, uri, params)
if err != nil {
return err
}
return nil
}