forked from akamai/AkamaiOPEN-edgegrid-golang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
available.go
183 lines (154 loc) · 4.58 KB
/
available.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
package papi
import (
"fmt"
"io/ioutil"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/client-v1"
"github.com/xeipuuv/gojsonschema"
)
// AvailableCriteria represents a collection of available rule criteria
type AvailableCriteria struct {
client.Resource
ContractID string `json:"contractId"`
GroupID string `json:"groupId"`
ProductID string `json:"productId"`
RuleFormat string `json:"ruleFormat"`
AvailableCriteria struct {
Items []struct {
Name string `json:"name"`
SchemaLink string `json:"schemaLink"`
} `json:"items"`
} `json:"availableCriteria"`
}
// NewAvailableCriteria creates a new AvailableCriteria
func NewAvailableCriteria() *AvailableCriteria {
availableCriteria := &AvailableCriteria{}
availableCriteria.Init()
return availableCriteria
}
// GetAvailableCriteria retrieves criteria available for a given property
//
// API Docs: https://developer.akamai.com/api/luna/papi/resources.html#listavailablecriteria
// Endpoint: GET /papi/v1/properties/{propertyId}/versions/{propertyVersion}/available-criteria{?contractId,groupId}
func (availableCriteria *AvailableCriteria) GetAvailableCriteria(property *Property) error {
req, err := client.NewRequest(
Config,
"GET",
fmt.Sprintf(
"/papi/v1/properties/%s/versions/%d/available-criteria?contractId=%s&groupId=%s",
property.PropertyID,
property.LatestVersion,
property.Contract.ContractID,
property.Group.GroupID,
),
nil,
)
if err != nil {
return err
}
res, err := client.Do(Config, req)
if err != nil {
return err
}
if client.IsError(res) {
return client.NewAPIError(res)
}
if err = client.BodyJSON(res, availableCriteria); err != nil {
return err
}
return nil
}
// AvailableBehaviors represents a collection of available rule behaviors
type AvailableBehaviors struct {
client.Resource
ContractID string `json:"contractId"`
GroupID string `json:"groupId"`
ProductID string `json:"productId"`
RuleFormat string `json:"ruleFormat"`
Behaviors struct {
Items []AvailableBehavior `json:"items"`
} `json:"behaviors"`
}
// NewAvailableBehaviors creates a new AvailableBehaviors
func NewAvailableBehaviors() *AvailableBehaviors {
availableBehaviors := &AvailableBehaviors{}
availableBehaviors.Init()
return availableBehaviors
}
// PostUnmarshalJSON is called after JSON unmarshaling into EdgeHostnames
//
// See: jsonhooks-v1/jsonhooks.Unmarshal()
func (availableBehaviors *AvailableBehaviors) PostUnmarshalJSON() error {
availableBehaviors.Init()
for key := range availableBehaviors.Behaviors.Items {
availableBehaviors.Behaviors.Items[key].parent = availableBehaviors
}
availableBehaviors.Complete <- true
return nil
}
// GetAvailableBehaviors retrieves available behaviors for a given property
//
// See: Property.GetAvailableBehaviors
// API Docs: https://developer.akamai.com/api/luna/papi/resources.html#listavailablebehaviors
// Endpoint: GET /papi/v1/properties/{propertyId}/versions/{propertyVersion}/available-behaviors{?contractId,groupId}
func (availableBehaviors *AvailableBehaviors) GetAvailableBehaviors(property *Property) error {
req, err := client.NewRequest(
Config,
"GET",
fmt.Sprintf(
"/papi/v1/properties/%s/versions/%d/available-behaviors?contractId=%s&groupId=%s",
property.PropertyID,
property.LatestVersion,
property.Contract.ContractID,
property.Group.GroupID,
),
nil,
)
if err != nil {
return err
}
res, err := client.Do(Config, req)
if err != nil {
return err
}
if client.IsError(res) {
return client.NewAPIError(res)
}
if err = client.BodyJSON(res, availableBehaviors); err != nil {
return err
}
return nil
}
// AvailableBehavior represents an available behavior resource
type AvailableBehavior struct {
client.Resource
parent *AvailableBehaviors
Name string `json:"name"`
SchemaLink string `json:"schemaLink"`
}
// NewAvailableBehavior creates a new AvailableBehavior
func NewAvailableBehavior(parent *AvailableBehaviors) *AvailableBehavior {
availableBehavior := &AvailableBehavior{parent: parent}
availableBehavior.Init()
return availableBehavior
}
// GetSchema retrieves the JSON schema for an available behavior
func (behavior *AvailableBehavior) GetSchema() (*gojsonschema.Schema, error) {
req, err := client.NewRequest(
Config,
"GET",
behavior.SchemaLink,
nil,
)
if err != nil {
return nil, err
}
res, err := client.Do(Config, req)
if err != nil {
return nil, err
}
schemaBytes, _ := ioutil.ReadAll(res.Body)
schemaBody := string(schemaBytes)
loader := gojsonschema.NewStringLoader(schemaBody)
schema, err := gojsonschema.NewSchema(loader)
return schema, err
}