forked from akamai/AkamaiOPEN-edgegrid-golang
/
multi_cdn.go
130 lines (106 loc) · 3.77 KB
/
multi_cdn.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
package cloudwrapper
import (
"context"
"errors"
"fmt"
"net/http"
"net/url"
"github.com/findmyname666/AkamaiOPEN-edgegrid-golang/v7/pkg/edgegriderr"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
type (
// MultiCDN is the cloudwrapper Multi-CDN API interface
MultiCDN interface {
// ListAuthKeys lists the cdnAuthKeys for a specified contractId and cdnCode
//
// See: https://techdocs.akamai.com/cloud-wrapper/reference/get-auth-keys
ListAuthKeys(context.Context, ListAuthKeysRequest) (*ListAuthKeysResponse, error)
// ListCDNProviders lists CDN providers
//
// See: https://techdocs.akamai.com/cloud-wrapper/reference/get-providers
ListCDNProviders(context.Context) (*ListCDNProvidersResponse, error)
}
// ListAuthKeysRequest is a request struct
ListAuthKeysRequest struct {
ContractID string
CDNCode string
}
// ListAuthKeysResponse contains response list of CDN auth keys
ListAuthKeysResponse struct {
CDNAuthKeys []MultiCDNAuthKey `json:"cdnAuthKeys"`
}
// MultiCDNAuthKey contains CDN auth key information
MultiCDNAuthKey struct {
AuthKeyName string `json:"authKeyName"`
ExpiryDate string `json:"expiryDate"`
HeaderName string `json:"headerName"`
}
// ListCDNProvidersResponse contains response list of CDN providers
ListCDNProvidersResponse struct {
CDNProviders []CDNProvider `json:"cdnProviders"`
}
// CDNProvider contains CDN provider information
CDNProvider struct {
CDNCode string `json:"cdnCode"`
CDNName string `json:"cdnName"`
}
)
// Validate validates ListAuthKeysRequest
func (r ListAuthKeysRequest) Validate() error {
return edgegriderr.ParseValidationErrors(validation.Errors{
"ContractID": validation.Validate(r.ContractID, validation.Required),
"CDNCode": validation.Validate(r.CDNCode, validation.Required),
})
}
var (
// ErrListAuthKeys is returned in case an error occurs on ListAuthKeys operation
ErrListAuthKeys = errors.New("list auth keys")
// ErrListCDNProviders is returned in case an error occurs on ListCDNProviders operation
ErrListCDNProviders = errors.New("list CDN providers")
)
func (c *cloudwrapper) ListAuthKeys(ctx context.Context, params ListAuthKeysRequest) (*ListAuthKeysResponse, error) {
logger := c.Log(ctx)
logger.Debug("ListAuthKeys")
if err := params.Validate(); err != nil {
return nil, fmt.Errorf("%s: %w: %s", ErrListAuthKeys, ErrStructValidation, err)
}
uri, err := url.Parse("/cloud-wrapper/v1/multi-cdn/auth-keys")
if err != nil {
return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListAuthKeys, err)
}
q := uri.Query()
q.Add("contractId", params.ContractID)
q.Add("cdnCode", params.CDNCode)
uri.RawQuery = q.Encode()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil)
if err != nil {
return nil, fmt.Errorf("%w: failed to create request: %s", ErrListAuthKeys, err)
}
var result ListAuthKeysResponse
resp, err := c.Exec(req, &result)
if err != nil {
return nil, fmt.Errorf("%w: request failed: %s", ErrListAuthKeys, err)
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("%s: %w", ErrListAuthKeys, c.Error(resp))
}
return &result, nil
}
func (c *cloudwrapper) ListCDNProviders(ctx context.Context) (*ListCDNProvidersResponse, error) {
logger := c.Log(ctx)
logger.Debug("ListCDNProviders")
uri := "/cloud-wrapper/v1/multi-cdn/providers"
req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, fmt.Errorf("%w: failed to create request: %s", ErrListCDNProviders, err)
}
var result ListCDNProvidersResponse
resp, err := c.Exec(req, &result)
if err != nil {
return nil, fmt.Errorf("%w: request failed: %s", ErrListCDNProviders, err)
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("%s: %w", ErrListCDNProviders, c.Error(resp))
}
return &result, nil
}