@@ -8,11 +8,15 @@ import (
88)
99
1010const (
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"
1620)
1721
1822type RuleInterface interface {
@@ -22,6 +26,10 @@ type RuleInterface interface {
2226 UpdateRule (ctx context.Context , rule Rule ) (Rule , error )
2327 DeleteRule (ctx context.Context , ruleID int ) error
2428 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 )
2533}
2634
2735func (client * Client ) CreateRule (ctx context.Context , rule Rule ) (Rule , error ) {
@@ -125,3 +133,85 @@ func (client *Client) DeleteRuleURL(ruleID int) string {
125133func (client * Client ) GetRuleGroupURL (ruleName string , ruleType string ) string {
126134 return fmt .Sprintf (GetRuleGroupPath , client .config .url , url .QueryEscape (ruleName ), url .QueryEscape (ruleType ))
127135}
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