zitadel/internal/api/grpc/server/middleware/validation_interceptor.go
dependabot[bot] 583b1c42d4
chore(deps): bump google.golang.org/grpc from 1.40.0 to 1.41.0 (#2427)
* chore(deps): bump google.golang.org/grpc from 1.40.0 to 1.41.0

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.40.0 to 1.41.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.40.0...v1.41.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* validate

* ensure import

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: adlerhurst <silvan.reusser@gmail.com>
Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2021-09-27 17:14:40 +02:00

37 lines
1.0 KiB
Go

package middleware
import (
"context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
//import to make sure go.mod does not lose it
//because dependency is only needed for generated code
_ "github.com/envoyproxy/protoc-gen-validate/validate"
)
func ValidationHandler() grpc.UnaryServerInterceptor {
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
return validate(ctx, req, info, handler)
}
}
//validator interface needed for github.com/envoyproxy/protoc-gen-validate
//(it does not expose an interface itself)
type validator interface {
Validate() error
}
func validate(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
validate, ok := req.(validator)
if !ok {
return handler(ctx, req)
}
err := validate.Validate()
if err != nil {
return nil, status.Error(codes.InvalidArgument, err.Error())
}
return handler(ctx, req)
}