From 8323b14d9ecfa6a7a601e03cd2e6eb219139144d Mon Sep 17 00:00:00 2001 From: TremblingV5 Date: Sat, 7 Dec 2024 18:53:10 +0800 Subject: [PATCH] feat: add normal protobuf validator 4 gopkgs --- backend/gopkgs/go.mod | 27 ++++++++-------- .../protobufvalidator/middleware.go | 31 +++++++++++++++++++ 2 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 backend/gopkgs/middlewares/protobufvalidator/middleware.go diff --git a/backend/gopkgs/go.mod b/backend/gopkgs/go.mod index 6c174d3..137c105 100644 --- a/backend/gopkgs/go.mod +++ b/backend/gopkgs/go.mod @@ -21,14 +21,13 @@ require ( github.com/stretchr/testify v1.9.0 go.etcd.io/etcd/client/v3 v3.5.15 go.opentelemetry.io/otel v1.31.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 + go.opentelemetry.io/otel/exporters/jaeger v1.17.0 go.opentelemetry.io/otel/sdk v1.31.0 go.uber.org/zap v1.27.0 - golang.org/x/sync v0.8.0 - google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 + golang.org/x/sync v0.10.0 + google.golang.org/genproto/googleapis/api v0.0.0-20241206012308-a4fef0638583 google.golang.org/grpc v1.67.1 - google.golang.org/protobuf v1.35.1 + google.golang.org/protobuf v1.35.2 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v2 v2.4.0 gorm.io/driver/mysql v1.5.7 @@ -36,10 +35,13 @@ require ( ) require ( + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.2-20241127180247-a33202765966.1 // indirect + cel.dev/expr v0.19.1 // indirect dario.cat/mergo v1.0.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/armon/go-metrics v0.4.1 // indirect + github.com/bufbuild/protovalidate-go v0.7.3 // indirect github.com/bytedance/sonic/loader v0.2.0 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect @@ -57,14 +59,13 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-playground/assert/v2 v2.2.0 // indirect github.com/go-playground/form/v4 v4.2.0 // indirect - github.com/go-redis/redismock/v9 v9.2.0 // indirect github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/goccy/go-json v0.10.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.4 // indirect + github.com/google/cel-go v0.22.1 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect @@ -88,27 +89,27 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/rs/xid v1.5.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/stoewer/go-strcase v1.3.0 // indirect github.com/tidwall/gjson v1.17.3 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect go.etcd.io/etcd/api/v3 v3.5.15 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect - go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect go.opentelemetry.io/otel/metric v1.31.0 // indirect go.opentelemetry.io/otel/trace v1.31.0 // indirect - go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.11.0 // indirect golang.org/x/crypto v0.28.0 // indirect - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d // indirect golang.org/x/net v0.30.0 // indirect golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect + golang.org/x/text v0.21.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241206012308-a4fef0638583 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect stathat.com/c/consistent v1.0.0 // indirect ) diff --git a/backend/gopkgs/middlewares/protobufvalidator/middleware.go b/backend/gopkgs/middlewares/protobufvalidator/middleware.go new file mode 100644 index 0000000..26e7c6b --- /dev/null +++ b/backend/gopkgs/middlewares/protobufvalidator/middleware.go @@ -0,0 +1,31 @@ +package protobufvalidator + +import ( + "context" + "errors" + "github.com/bufbuild/protovalidate-go" + "github.com/go-kratos/kratos/v2/middleware" + "google.golang.org/protobuf/proto" +) + +func ProtobufValidator() middleware.Middleware { + return func(handler middleware.Handler) middleware.Handler { + return func(ctx context.Context, req interface{}) (interface{}, error) { + value, ok := req.(proto.Message) + if !ok { + return nil, errors.New("not valid request") + } + + v, err := protovalidate.New() + if err != nil { + return nil, err + } + + if err := v.Validate(value); err != nil { + return nil, err + } + + return handler(ctx, req) + } + } +}