@@ -8,11 +8,15 @@ import (
8
8
)
9
9
10
10
const (
11
- CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12
- GetRuleByIDPath = "%s/api/secure/rules/%d"
13
- UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14
- DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15
- GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
11
+ CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12
+ GetRuleByIDPath = "%s/api/secure/rules/%d"
13
+ UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14
+ DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15
+ GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
16
+ CreateStatefulRulePath = "%s/api/policies/v3/statefulRules"
17
+ UpdateStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
18
+ DeleteStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
19
+ GetStatefulRuleGroupPath = "%s/api/policies/v3/statefulRules/groups?name=%s&type=%s"
16
20
)
17
21
18
22
type RuleInterface interface {
@@ -22,6 +26,10 @@ type RuleInterface interface {
22
26
UpdateRule (ctx context.Context , rule Rule ) (Rule , error )
23
27
DeleteRule (ctx context.Context , ruleID int ) error
24
28
GetRuleGroup (ctx context.Context , ruleName string , ruleType string ) ([]Rule , error )
29
+ CreateStatefulRule (ctx context.Context , rule Rule ) (Rule , error )
30
+ UpdateStatefulRule (ctx context.Context , rule Rule ) (Rule , error )
31
+ DeleteStatefulRule (ctx context.Context , ruleID int ) error
32
+ GetStatefulRuleGroup (ctx context.Context , ruleName string , ruleType string ) ([]Rule , error )
25
33
}
26
34
27
35
func (client * Client ) CreateRule (ctx context.Context , rule Rule ) (Rule , error ) {
@@ -125,3 +133,85 @@ func (client *Client) DeleteRuleURL(ruleID int) string {
125
133
func (client * Client ) GetRuleGroupURL (ruleName string , ruleType string ) string {
126
134
return fmt .Sprintf (GetRuleGroupPath , client .config .url , url .QueryEscape (ruleName ), url .QueryEscape (ruleType ))
127
135
}
136
+
137
+ func (client * Client ) CreateStatefulRuleURL () string {
138
+ return fmt .Sprintf (CreateStatefulRulePath , client .config .url )
139
+ }
140
+
141
+ func (client * Client ) UpdateStatefulRuleURL (ruleID int ) string {
142
+ return fmt .Sprintf (UpdateStatefulRulePath , client .config .url , ruleID )
143
+ }
144
+
145
+ func (client * Client ) DeleteStatefulRuleURL (ruleID int ) string {
146
+ return fmt .Sprintf (DeleteStatefulRulePath , client .config .url , ruleID )
147
+ }
148
+
149
+ func (client * Client ) GetStatefulRuleGroupURL (ruleName string , ruleType string ) string {
150
+ return fmt .Sprintf (GetStatefulRuleGroupPath , client .config .url , url .QueryEscape (ruleName ), url .QueryEscape (ruleType ))
151
+ }
152
+
153
+ func (client * Client ) CreateStatefulRule (ctx context.Context , rule Rule ) (Rule , error ) {
154
+ payload , err := Marshal (rule )
155
+ if err != nil {
156
+ return Rule {}, err
157
+ }
158
+ response , err := client .requester .Request (ctx , http .MethodPost , client .CreateStatefulRuleURL (), payload )
159
+ if err != nil {
160
+ return Rule {}, err
161
+ }
162
+ defer response .Body .Close ()
163
+
164
+ if response .StatusCode != http .StatusOK {
165
+ return Rule {}, client .ErrorFromResponse (response )
166
+ }
167
+
168
+ return Unmarshal [Rule ](response .Body )
169
+ }
170
+
171
+ func (client * Client ) UpdateStatefulRule (ctx context.Context , rule Rule ) (Rule , error ) {
172
+ payload , err := Marshal (rule )
173
+ if err != nil {
174
+ return Rule {}, err
175
+ }
176
+
177
+ response , err := client .requester .Request (ctx , http .MethodPut , client .UpdateStatefulRuleURL (rule .ID ), payload )
178
+ if err != nil {
179
+ return Rule {}, err
180
+ }
181
+
182
+ defer response .Body .Close ()
183
+
184
+ if response .StatusCode != http .StatusOK {
185
+ return Rule {}, client .ErrorFromResponse (response )
186
+ }
187
+
188
+ return Unmarshal [Rule ](response .Body )
189
+ }
190
+
191
+ func (client * Client ) DeleteStatefulRule (ctx context.Context , ruleID int ) error {
192
+ response , err := client .requester .Request (ctx , http .MethodDelete , client .DeleteStatefulRuleURL (ruleID ), nil )
193
+ if err != nil {
194
+ return err
195
+ }
196
+ defer response .Body .Close ()
197
+
198
+ if response .StatusCode != http .StatusNoContent && response .StatusCode != http .StatusOK {
199
+ return client .ErrorFromResponse (response )
200
+ }
201
+
202
+ return err
203
+ }
204
+
205
+ func (client * Client ) GetStatefulRuleGroup (ctx context.Context , ruleName string , ruleType string ) ([]Rule , error ) {
206
+ response , err := client .requester .Request (ctx , http .MethodGet , client .GetStatefulRuleGroupURL (ruleName , ruleType ), nil )
207
+ if err != nil {
208
+ return []Rule {}, err
209
+ }
210
+ defer response .Body .Close ()
211
+
212
+ if response .StatusCode != http .StatusOK {
213
+ return []Rule {}, client .ErrorFromResponse (response )
214
+ }
215
+
216
+ return Unmarshal [[]Rule ](response .Body )
217
+ }
0 commit comments