-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathadvanced_settings_pragma_header.go
168 lines (143 loc) · 5.74 KB
/
advanced_settings_pragma_header.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
package appsec
import (
"context"
"encoding/json"
"fmt"
"net/http"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/v10/pkg/session"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
type (
// The AdvancedSettingsPragma interface supports retrieving or modifying the pragma header
// excluded conditions for a configuration or policy.
AdvancedSettingsPragma interface {
// GetAdvancedSettingsPragma returns the Pragma header's excluded conditions.
//
// See:https://techdocs.akamai.com/application-security/reference/get-policies-pragma-header
GetAdvancedSettingsPragma(ctx context.Context, params GetAdvancedSettingsPragmaRequest) (*GetAdvancedSettingsPragmaResponse, error)
// UpdateAdvancedSettingsPragma updates the pragma header excluded conditions.
//
// See: https://techdocs.akamai.com/application-security/reference/put-policies-pragma-header
UpdateAdvancedSettingsPragma(ctx context.Context, params UpdateAdvancedSettingsPragmaRequest) (*UpdateAdvancedSettingsPragmaResponse, error)
}
// GetAdvancedSettingsPragmaRequest is used to retrieve the pragma settings for a security policy.
GetAdvancedSettingsPragmaRequest struct {
ConfigID int `json:"-"`
Version int `json:"-"`
PolicyID string `json:"-"`
Group string `json:"group"`
}
// GetAdvancedSettingsPragmaResponse is returned from a call to GetAdvancedSettingsPragma.
GetAdvancedSettingsPragmaResponse struct {
Action string `json:"action,,omitempty"`
ConditionOperator string `json:"conditionOperator,omitempty"`
ExcludeCondition []ExcludeCondition `json:"excludeCondition,omitempty"`
}
// ExcludeCondition describes the pragma header's excluded conditions.
ExcludeCondition struct {
Type string `json:"type"`
PositiveMatch bool `json:"positiveMatch"`
Header string `json:"header"`
Value []string `json:"value"`
Name string `json:"name"`
ValueCase bool `json:"valueCase"`
ValueWildcard bool `json:"valueWildcard"`
UseHeaders bool `json:"useHeaders"`
}
// UpdateAdvancedSettingsPragmaRequest is used to modify the pragma settings for a security policy.
UpdateAdvancedSettingsPragmaRequest struct {
ConfigID int `json:"-"`
Version int `json:"-"`
PolicyID string `json:"-"`
JsonPayloadRaw json.RawMessage `json:"-"`
}
// UpdateAdvancedSettingsPragmaResponse is returned from a call to UpdateAdvancedSettingsPragma.
UpdateAdvancedSettingsPragmaResponse struct {
Action string `json:"action"`
ConditionOperator string `json:"conditionOperator"`
ExcludeCondition []ExcludeCondition `json:"excludeCondition"`
}
)
// Validate validates a GetAdvancedSettingsPragmaRequest.
func (v GetAdvancedSettingsPragmaRequest) Validate() error {
return validation.Errors{
"ConfigID": validation.Validate(v.ConfigID, validation.Required),
"Version": validation.Validate(v.Version, validation.Required),
}.Filter()
}
// Validate validates an UpdateAdvancedSettingsPragmaRequest.
func (v UpdateAdvancedSettingsPragmaRequest) Validate() error {
return validation.Errors{
"ConfigID": validation.Validate(v.ConfigID, validation.Required),
"Version": validation.Validate(v.Version, validation.Required),
}.Filter()
}
func (p *appsec) GetAdvancedSettingsPragma(ctx context.Context, params GetAdvancedSettingsPragmaRequest) (*GetAdvancedSettingsPragmaResponse, error) {
logger := p.Log(ctx)
logger.Debug("GetAdvancedSettingsPragma")
if err := params.Validate(); err != nil {
return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
}
var uri string
if params.PolicyID != "" {
uri = fmt.Sprintf(
"/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/pragma-header",
params.ConfigID,
params.Version,
params.PolicyID)
} else {
uri = fmt.Sprintf(
"/appsec/v1/configs/%d/versions/%d/advanced-settings/pragma-header",
params.ConfigID,
params.Version)
}
req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, fmt.Errorf("failed to create GetAdvancedSettingsPragma request: %w", err)
}
req.Header.Set("Content-Type", "application/json")
var result GetAdvancedSettingsPragmaResponse
resp, err := p.Exec(req, &result)
if err != nil {
return nil, fmt.Errorf("get advanced settings pragma request failed: %w", err)
}
defer session.CloseResponseBody(resp)
if resp.StatusCode != http.StatusOK {
return nil, p.Error(resp)
}
return &result, nil
}
func (p *appsec) UpdateAdvancedSettingsPragma(ctx context.Context, params UpdateAdvancedSettingsPragmaRequest) (*UpdateAdvancedSettingsPragmaResponse, error) {
logger := p.Log(ctx)
logger.Debug("UpdateAdvancedSettingsPragma")
if err := params.Validate(); err != nil {
return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
}
var uri string
if params.PolicyID != "" {
uri = fmt.Sprintf(
"/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/pragma-header",
params.ConfigID,
params.Version,
params.PolicyID)
} else {
uri = fmt.Sprintf(
"/appsec/v1/configs/%d/versions/%d/advanced-settings/pragma-header",
params.ConfigID,
params.Version)
}
req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
if err != nil {
return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsPragma request: %w", err)
}
var result UpdateAdvancedSettingsPragmaResponse
resp, err := p.Exec(req, &result, params.JsonPayloadRaw)
if err != nil {
return nil, fmt.Errorf("update advanced settings pragma request failed: %w", err)
}
defer session.CloseResponseBody(resp)
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
return nil, p.Error(resp)
}
return &result, nil
}