From e6a3c85ce06dabc98e4b1117116f49906c55f9cd Mon Sep 17 00:00:00 2001 From: Nikolay Tkachenko Date: Thu, 6 Jun 2024 18:33:46 +0300 Subject: [PATCH] Refactoring. Update the unknown parameter detection --- .../internal/handlers/api/updater.go | 4 ++-- cmd/api-firewall/tests/wallarm_api2_update.db | Bin 98304 -> 98304 bytes go.mod | 8 ++++---- go.sum | 16 ++++++++-------- internal/platform/validator/internal.go | 10 ++++++++++ .../validator/unknown_parameters_request.go | 5 ++--- 6 files changed, 26 insertions(+), 17 deletions(-) diff --git a/cmd/api-firewall/internal/handlers/api/updater.go b/cmd/api-firewall/internal/handlers/api/updater.go index 2573dc73..ec4b7035 100644 --- a/cmd/api-firewall/internal/handlers/api/updater.go +++ b/cmd/api-firewall/internal/handlers/api/updater.go @@ -3,7 +3,6 @@ package api import ( "os" "runtime/debug" - "slices" "sync" "time" @@ -15,6 +14,7 @@ import ( "github.com/wallarm/api-firewall/internal/platform/database" "github.com/wallarm/api-firewall/internal/platform/database/updater" "github.com/wallarm/api-firewall/internal/platform/router" + "github.com/wallarm/api-firewall/internal/platform/validator" ) const ( @@ -91,7 +91,7 @@ func (s *Specification) Run() { newScemaIDs := newSpecDB.SchemaIDs() oldSchemaIDs := s.sqlLiteStorage.SchemaIDs() for _, ns := range newScemaIDs { - if !slices.Contains(oldSchemaIDs, ns) { + if !validator.Contains(oldSchemaIDs, ns) { s.logger.Infof("%s: fetched new OpenAPI specification from the database with id: %d", logPrefix, ns) } } diff --git a/cmd/api-firewall/tests/wallarm_api2_update.db b/cmd/api-firewall/tests/wallarm_api2_update.db index 368c1a63025595630df79554e34fd3c2d26a7763..5562b462b6af3394159f2cdb1aa865e50117a254 100644 GIT binary patch delta 34 qcmZo@U~6b#n;^}&eWHvrB~n|I5)2r<5BGFWE77ytm!2MeqK delta 34 qcmZo@U~6b#n;^|NXQGTVEjn|I5)2r=GoGFWE77ytmuiwk4` diff --git a/go.mod b/go.mod index 19138f67..081bb00e 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/savsgio/gotils v0.0.0-20240303185622-093b76447511 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 - github.com/valyala/fasthttp v1.52.0 + github.com/valyala/fasthttp v1.54.0 github.com/valyala/fastjson v1.6.4 github.com/wundergraph/graphql-go-tools v1.67.2 golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 @@ -79,9 +79,9 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.18.1 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sys v0.21.0 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.33.0 // indirect gopkg.in/cenkalti/backoff.v1 v1.1.0 // indirect diff --git a/go.sum b/go.sum index 5e41b6b8..887123ec 100644 --- a/go.sum +++ b/go.sum @@ -226,8 +226,8 @@ github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.52.0 h1:wqBQpxH71XW0e2g+Og4dzQM8pk34aFYlA1Ga8db7gU0= -github.com/valyala/fasthttp v1.52.0/go.mod h1:hf5C4QnVMkNXMspnsUlfM3WitlgYflyhHYoKol/szxQ= +github.com/valyala/fasthttp v1.54.0 h1:cCL+ZZR3z3HPLMVfEYVUMtJqVaui0+gu7Lx63unHwS0= +github.com/valyala/fasthttp v1.54.0/go.mod h1:6dt4/8olwq9QARP/TDuPmWyWcl4byhpvTJ4AAtcz+QM= github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ= github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/vektah/gqlparser/v2 v2.5.1 h1:ZGu+bquAY23jsxDRcYpWjttRZrUz07LbiY77gUOHcr4= @@ -255,8 +255,8 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -272,8 +272,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191116160921-f9c825593386/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= @@ -288,8 +288,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= diff --git a/internal/platform/validator/internal.go b/internal/platform/validator/internal.go index 6344bae0..65fcb897 100644 --- a/internal/platform/validator/internal.go +++ b/internal/platform/validator/internal.go @@ -64,3 +64,13 @@ func convertToMap(v *fastjson.Value) interface{} { return nil } } + +// Contains returns true if v is present in the elems slice, false otherwise +func Contains[T comparable](elems []T, v T) bool { + for _, s := range elems { + if v == s { + return true + } + } + return false +} diff --git a/internal/platform/validator/unknown_parameters_request.go b/internal/platform/validator/unknown_parameters_request.go index a5e01b01..8d6fbaf2 100644 --- a/internal/platform/validator/unknown_parameters_request.go +++ b/internal/platform/validator/unknown_parameters_request.go @@ -4,7 +4,6 @@ import ( "bytes" "io" "net/http" - "slices" "strconv" "strings" @@ -243,7 +242,7 @@ func ValidateUnknownRequestParameters(ctx *fasthttp.RequestCtx, route *routers.R continue } for paramName, _ := range params { - if !slices.Contains(propKeys, strings.ToLower(paramName)) { + if !Contains(propKeys, strings.ToLower(paramName)) { unknownBodyParams.Message = ErrUnknownBodyParameter.Error() unknownBodyParams.Parameters = append(unknownBodyParams.Parameters, RequestParameterDetails{ Name: paramName, @@ -255,7 +254,7 @@ func ValidateUnknownRequestParameters(ctx *fasthttp.RequestCtx, route *routers.R } default: for paramName, _ := range paramList { - if !slices.Contains(propKeys, strings.ToLower(paramName)) { + if !Contains(propKeys, strings.ToLower(paramName)) { unknownBodyParams.Message = ErrUnknownBodyParameter.Error() unknownBodyParams.Parameters = append(unknownBodyParams.Parameters, RequestParameterDetails{ Name: paramName,