Skip to content

Commit 4983724

Browse files
DXE-4081 Merge pull request #209 from akamai/release/v8.4.0
2 parents 165dd6c + 6e036de commit 4983724

34 files changed

+1242
-54
lines changed

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
11
# EDGEGRID GOLANG RELEASE NOTES
22

3+
## 8.4.0 (Aug 22, 2024)
4+
5+
#### FEATURES/ENHANCEMENTS:
6+
7+
* APPSEC
8+
* Added field `ClientLists` to `RuleConditions` and `AttackGroupConditions`
9+
* The `RequestBodyInspectionLimitOverride` field has been added in the following structures:
10+
* `GetAdvancedSettingsRequestBodyResponse`,
11+
* `UpdateAdvancedSettingsRequestBodyRequest`,
12+
* `UpdateAdvancedSettingsRequestBodyResponse`,
13+
* `RemoveAdvancedSettingsRequestBodyRequest`,
14+
* `RemoveAdvancedSettingsRequestBodyResponse`
15+
16+
* IAM
17+
* Added new methods:
18+
* [GetProperty](https://techdocs.akamai.com/iam-api/reference/get-property)
19+
* [ListProperties](https://techdocs.akamai.com/iam-api/reference/get-properties)
20+
* [MoveProperty](https://techdocs.akamai.com/iam-api/reference/put-property)
21+
* `MapPropertyIDToName` - to provide property name for given IAM property ID
22+
23+
* PAPI
24+
* Added new method `MapPropertyNameToID` to provide PAPI property ID for given property name
25+
326
## 8.3.0 (July 09, 2024)
427

528
#### FEATURES/ENHANCEMENTS:

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ module github.com/akamai/AkamaiOPEN-edgegrid-golang/v8
33
go 1.21
44

55
require (
6-
github.com/akamai/AkamaiOPEN-edgegrid-golang/v7 v7.6.1
76
github.com/apex/log v1.9.0
87
github.com/go-ozzo/ozzo-validation/v4 v4.3.0
98
github.com/google/uuid v1.1.1
@@ -20,10 +19,12 @@ require (
2019
github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 // indirect
2120
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 // indirect
2221
github.com/davecgh/go-spew v1.1.1 // indirect
23-
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
24-
github.com/jtolds/gls v4.20.0+incompatible // indirect
22+
github.com/kr/text v0.2.0 // indirect
23+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
2524
github.com/pkg/errors v0.9.1 // indirect
2625
github.com/pmezard/go-difflib v1.0.0 // indirect
26+
github.com/smartystreets/goconvey v1.6.4 // indirect
2727
github.com/stretchr/objx v0.5.0 // indirect
28+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
2829
gopkg.in/yaml.v3 v3.0.1 // indirect
2930
)

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
github.com/akamai/AkamaiOPEN-edgegrid-golang/v7 v7.6.1 h1:KrYkNvCKBGPs/upjgJCojZnnmt5XdEPWS4L2zRQm7+o=
2-
github.com/akamai/AkamaiOPEN-edgegrid-golang/v7 v7.6.1/go.mod h1:gajRk0oNRQj4bHUc2SGAvAp/gPestSpuvK4QXU1QtPA=
31
github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI=
42
github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg=
53
github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0=
@@ -11,6 +9,7 @@ github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06
119
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
1210
github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
1311
github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I=
12+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
1413
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1514
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1615
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -54,6 +53,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
5453
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5554
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
5655
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
56+
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
5757
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
5858
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
5959
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
@@ -88,6 +88,7 @@ go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6m
8888
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
8989
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
9090
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
91+
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
9192
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
9293
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
9394
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
@@ -100,6 +101,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
100101
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
101102
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
102103
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
104+
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
103105
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
104106
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
105107
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=

pkg/appsec/advanced_settings_request_body.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,33 +44,38 @@ type (
4444

4545
// GetAdvancedSettingsRequestBodyResponse is returned from a call to GetAdvancedSettingsRequestBody.
4646
GetAdvancedSettingsRequestBodyResponse struct {
47-
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
47+
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
48+
RequestBodyInspectionLimitOverride bool `json:"override"`
4849
}
4950

5051
// UpdateAdvancedSettingsRequestBodyRequest is used to update the Request body settings for a configuration or policy.
5152
UpdateAdvancedSettingsRequestBodyRequest struct {
52-
ConfigID int
53-
Version int
54-
PolicyID string
55-
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
53+
ConfigID int
54+
Version int
55+
PolicyID string
56+
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
57+
RequestBodyInspectionLimitOverride bool `json:"override"`
5658
}
5759

5860
// UpdateAdvancedSettingsRequestBodyResponse is returned from a call to UpdateAdvancedSettingsRequestBody.
5961
UpdateAdvancedSettingsRequestBodyResponse struct {
60-
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
62+
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
63+
RequestBodyInspectionLimitOverride bool `json:"override"`
6164
}
6265

6366
// RemoveAdvancedSettingsRequestBodyRequest is used to reset the Request body settings for a configuration or policy.
6467
RemoveAdvancedSettingsRequestBodyRequest struct {
65-
ConfigID int
66-
Version int
67-
PolicyID string
68-
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
68+
ConfigID int
69+
Version int
70+
PolicyID string
71+
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
72+
RequestBodyInspectionLimitOverride bool `json:"override"`
6973
}
7074

7175
// RemoveAdvancedSettingsRequestBodyResponse is returned from a call to RemoveAdvancedSettingsRequestBody.
7276
RemoveAdvancedSettingsRequestBodyResponse struct {
73-
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
77+
RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"`
78+
RequestBodyInspectionLimitOverride bool `json:"override"`
7479
}
7580

7681
// RequestBodySizeLimit is used to create an "enum" of possible types default, 8, 16, 32

pkg/appsec/advanced_settings_request_body_test.go

Lines changed: 159 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func TestAppsecGetAdvancedSettingsRequestBodyPolicy(t *testing.T) {
164164

165165
result := GetAdvancedSettingsRequestBodyResponse{}
166166

167-
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBody.json"))
167+
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicy.json"))
168168
err := json.Unmarshal([]byte(respData), &result)
169169
require.NoError(t, err)
170170

@@ -318,13 +318,13 @@ func TestAppsecUpdateAdvancedSettingsRequestBody(t *testing.T) {
318318
func TestAppsecUpdateAdvancedSettingsRequestBodyPolicy(t *testing.T) {
319319
result := UpdateAdvancedSettingsRequestBodyResponse{}
320320

321-
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBody.json"))
321+
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicy.json"))
322322
err := json.Unmarshal([]byte(respData), &result)
323323
require.NoError(t, err)
324324

325325
req := UpdateAdvancedSettingsRequestBodyRequest{}
326326

327-
reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBody.json"))
327+
reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicy.json"))
328328
err = json.Unmarshal([]byte(reqData), &req)
329329
require.NoError(t, err)
330330

@@ -351,6 +351,26 @@ func TestAppsecUpdateAdvancedSettingsRequestBodyPolicy(t *testing.T) {
351351
expectedResponse: &result,
352352
expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/request-body",
353353
},
354+
"400 invalid input error": {
355+
params: UpdateAdvancedSettingsRequestBodyRequest{
356+
ConfigID: 43253,
357+
Version: 15,
358+
},
359+
responseStatus: http.StatusBadRequest,
360+
responseBody: `
361+
{
362+
"detail": "The value of the request body size parameter must be one of [default, 8, 16, 32]",
363+
"title": "Invalid Input Error",
364+
"type": "internal_error"
365+
}`,
366+
expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/request-body",
367+
withError: &Error{
368+
Type: "internal_error",
369+
Title: "Invalid Input Error",
370+
Detail: "The value of the request body size parameter must be one of [default, 8, 16, 32]",
371+
StatusCode: http.StatusBadRequest,
372+
},
373+
},
354374
"500 internal server error": {
355375
params: UpdateAdvancedSettingsRequestBodyRequest{
356376
ConfigID: 43253,
@@ -398,3 +418,139 @@ func TestAppsecUpdateAdvancedSettingsRequestBodyPolicy(t *testing.T) {
398418
})
399419
}
400420
}
421+
422+
func TestAppsecUpdateAdvancedSettingsRequestBodyPolicyWithInvalidValue(t *testing.T) {
423+
result := UpdateAdvancedSettingsRequestBodyResponse{}
424+
425+
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicyWithInvalidValue.json"))
426+
err := json.Unmarshal([]byte(respData), &result)
427+
require.NoError(t, err)
428+
429+
req := UpdateAdvancedSettingsRequestBodyRequest{}
430+
431+
reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicyWithInvalidValue.json"))
432+
err = json.Unmarshal([]byte(reqData), &req)
433+
require.NoError(t, err)
434+
435+
tests := map[string]struct {
436+
params UpdateAdvancedSettingsRequestBodyRequest
437+
responseStatus int
438+
responseBody string
439+
expectedPath string
440+
expectedResponse *UpdateAdvancedSettingsRequestBodyResponse
441+
withError error
442+
headers http.Header
443+
}{
444+
"400 invalid input error": {
445+
params: UpdateAdvancedSettingsRequestBodyRequest{
446+
ConfigID: 43253,
447+
Version: 15,
448+
RequestBodyInspectionLimitInKB: req.RequestBodyInspectionLimitInKB,
449+
RequestBodyInspectionLimitOverride: req.RequestBodyInspectionLimitOverride,
450+
},
451+
responseStatus: http.StatusBadRequest,
452+
responseBody: `
453+
{
454+
"detail": "The value of the request body size parameter must be one of [default, 8, 16, 32]",
455+
"title": "Invalid Input Error",
456+
"type": "internal_error"
457+
}`,
458+
expectedPath: "/appsec/v1/configs/43253/versions/15/advanced-settings/request-body",
459+
withError: &Error{
460+
Type: "internal_error",
461+
Title: "Invalid Input Error",
462+
Detail: "The value of the request body size parameter must be one of [default, 8, 16, 32]",
463+
StatusCode: http.StatusBadRequest,
464+
},
465+
},
466+
}
467+
468+
for name, test := range tests {
469+
t.Run(name, func(t *testing.T) {
470+
mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
471+
assert.Equal(t, http.MethodPut, r.Method)
472+
w.WriteHeader(test.responseStatus)
473+
if len(test.responseBody) > 0 {
474+
_, err := w.Write([]byte(test.responseBody))
475+
assert.NoError(t, err)
476+
}
477+
}))
478+
client := mockAPIClient(t, mockServer)
479+
result, err := client.UpdateAdvancedSettingsRequestBody(
480+
session.ContextWithOptions(
481+
context.Background(),
482+
session.WithContextHeaders(test.headers)), test.params)
483+
if test.withError != nil {
484+
assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
485+
return
486+
}
487+
require.NoError(t, err)
488+
assert.Equal(t, test.expectedResponse, result)
489+
})
490+
}
491+
}
492+
493+
func TestAppsecUpdateAdvancedSettingsRequestBodyPolicyWithOverrideUnset(t *testing.T) {
494+
result := RemoveAdvancedSettingsRequestBodyResponse{}
495+
496+
respData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicyWithOverrideUnsetResponse.json"))
497+
err := json.Unmarshal([]byte(respData), &result)
498+
require.NoError(t, err)
499+
500+
req := RemoveAdvancedSettingsRequestBodyRequest{}
501+
502+
reqData := compactJSON(loadFixtureBytes("testdata/TestAdvancedSettingsRequestBody/AdvancedSettingsRequestBodyPolicyWithOverrideUnsetRequest.json"))
503+
err = json.Unmarshal([]byte(reqData), &req)
504+
require.NoError(t, err)
505+
506+
tests := map[string]struct {
507+
params RemoveAdvancedSettingsRequestBodyRequest
508+
responseStatus int
509+
responseBody string
510+
expectedPath string
511+
expectedResponse *RemoveAdvancedSettingsRequestBodyResponse
512+
withError error
513+
headers http.Header
514+
}{
515+
"200 Success": {
516+
params: RemoveAdvancedSettingsRequestBodyRequest{
517+
ConfigID: 43253,
518+
Version: 15,
519+
PolicyID: "test_policy",
520+
RequestBodyInspectionLimitInKB: req.RequestBodyInspectionLimitInKB,
521+
RequestBodyInspectionLimitOverride: req.RequestBodyInspectionLimitOverride,
522+
},
523+
headers: http.Header{
524+
"Content-Type": []string{"application/json;charset=UTF-8"},
525+
},
526+
responseStatus: http.StatusCreated,
527+
responseBody: respData,
528+
expectedResponse: &result,
529+
expectedPath: "/appsec/v1/configs/43253/versions/15/security-policies/test_policy/advanced-settings/request-body",
530+
},
531+
}
532+
533+
for name, test := range tests {
534+
t.Run(name, func(t *testing.T) {
535+
mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
536+
assert.Equal(t, http.MethodPut, r.Method)
537+
w.WriteHeader(test.responseStatus)
538+
if len(test.responseBody) > 0 {
539+
_, err := w.Write([]byte(test.responseBody))
540+
assert.NoError(t, err)
541+
}
542+
}))
543+
client := mockAPIClient(t, mockServer)
544+
result, err := client.RemoveAdvancedSettingsRequestBody(
545+
session.ContextWithOptions(
546+
context.Background(),
547+
session.WithContextHeaders(test.headers)), test.params)
548+
if test.withError != nil {
549+
assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err)
550+
return
551+
}
552+
require.NoError(t, err)
553+
assert.Equal(t, test.expectedResponse, result)
554+
})
555+
}
556+
}

pkg/appsec/attack_group.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ type (
6363
ValueCase bool `json:"valueCase,omitempty"`
6464
ValueWildcard bool `json:"valueWildcard,omitempty"`
6565
UseHeaders bool `json:"useHeaders,omitempty"`
66+
ClientLists []string `json:"clientLists,omitempty"`
6667
}
6768

6869
// AttackGroupAdvancedCriteria describes the hostname and path criteria used to limit the scope of an exception.

pkg/appsec/export_configuration.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,8 @@ type (
694694

695695
// RequestBody is returned as part of GetExportConfigurationResponse.
696696
RequestBody struct {
697-
RequestBodyInspectionLimitInKB string `json:"requestBodyInspectionLimitInKB"`
697+
RequestBodyInspectionLimitInKB string `json:"requestBodyInspectionLimitInKB"`
698+
RequestBodyInspectionLimitOverride bool `json:"override"`
698699
}
699700

700701
// ConditionsExp is returned as part of GetExportConfigurationResponse.

pkg/appsec/rule.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ type (
111111
ValueCase bool `json:"valueCase,omitempty"`
112112
ValueWildcard bool `json:"valueWildcard,omitempty"`
113113
UseHeaders bool `json:"useHeaders,omitempty"`
114+
ClientLists []string `json:"clientLists,omitempty"`
114115
}
115116

116117
// RuleException is used to describe the exceptions for a rule.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"override": true,
3+
"requestBodyInspectionLimitInKB": "32"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"override": true,
3+
"requestBodyInspectionLimitInKB": "abcd"
4+
}

0 commit comments

Comments
 (0)