forked from fastly/go-fastly
-
Notifications
You must be signed in to change notification settings - Fork 2
/
request_setting.go
129 lines (102 loc) · 3.68 KB
/
request_setting.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
package fastly
import (
"fmt"
"net/http"
"sort"
)
type RequestSettingConfig config
type RequestSetting struct {
ServiceID string `json:"service_id,omitempty"`
Version uint `json:"version,string,omitempty"`
Name string `json:"name,omitempty"`
BypassBusyWait Compatibool `json:"bypass_busy_wait"`
DefaultHost string `json:"default_host"`
ForceMiss Compatibool `json:"force_miss"`
ForceSSL Compatibool `json:"force_ssl"`
GeoHeaders Compatibool `json:"geo_headers"`
HashKeys string `json:"hash_keys"`
MaxStaleAge int `json:"max_stale_age,string"`
RequestCondition string `json:"request_condition"`
TimerSupport Compatibool `json:"timer_support"`
// Takes specific string values
XFF string `json:"xff,omitempty"`
Action string `json:"action"`
}
// requestSettingsByName is a sortable list of requestSettings.
type requestSettingsByName []*RequestSetting
// Len, Swap, and Less implement the sortable interface.
func (s requestSettingsByName) Len() int { return len(s) }
func (s requestSettingsByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s requestSettingsByName) Less(i, j int) bool {
return s[i].Name < s[j].Name
}
// List requestSettings for a specific service and version.
func (c *RequestSettingConfig) List(serviceID string, version uint) ([]*RequestSetting, *http.Response, error) {
u := fmt.Sprintf("/service/%s/version/%d/request_settings", serviceID, version)
req, err := c.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
requestSettings := new([]*RequestSetting)
resp, err := c.client.Do(req, requestSettings)
if err != nil {
return nil, resp, err
}
sort.Stable(requestSettingsByName(*requestSettings))
return *requestSettings, resp, nil
}
// Get fetches a specific request setting by name.
func (c *RequestSettingConfig) Get(serviceID string, version uint, name string) (*RequestSetting, *http.Response, error) {
u := fmt.Sprintf("/service/%s/version/%d/request_settings/%s", serviceID, version, name)
req, err := c.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}
requestSetting := new(RequestSetting)
resp, err := c.client.Do(req, requestSetting)
if err != nil {
return nil, resp, err
}
return requestSetting, resp, nil
}
// Create a new request setting.
func (c *RequestSettingConfig) Create(serviceID string, version uint, requestSetting *RequestSetting) (*RequestSetting, *http.Response, error) {
u := fmt.Sprintf("/service/%s/version/%d/request_settings", serviceID, version)
req, err := c.client.NewJSONRequest("POST", u, requestSetting)
if err != nil {
return nil, nil, err
}
b := new(RequestSetting)
resp, err := c.client.Do(req, b)
if err != nil {
return nil, resp, err
}
return b, resp, nil
}
// Update a request setting
func (c *RequestSettingConfig) Update(serviceID string, version uint, name string, requestSetting *RequestSetting) (*RequestSetting, *http.Response, error) {
u := fmt.Sprintf("/service/%s/version/%d/request_settings/%s", serviceID, version, name)
req, err := c.client.NewJSONRequest("PUT", u, requestSetting)
if err != nil {
return nil, nil, err
}
b := new(RequestSetting)
resp, err := c.client.Do(req, b)
if err != nil {
return nil, resp, err
}
return b, resp, nil
}
// Delete a request setting
func (c *RequestSettingConfig) Delete(serviceID string, version uint, name string) (*http.Response, error) {
u := fmt.Sprintf("/service/%s/version/%d/request_settings/%s", serviceID, version, name)
req, err := c.client.NewRequest("DELETE", u, nil)
if err != nil {
return nil, err
}
resp, err := c.client.Do(req, nil)
if err != nil {
return resp, err
}
return resp, nil
}