You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

30 lines
639 B

package middleware
import (
"context"
"git.diulo.com/mogfee/protoc-gen-kit/pkg/xuser"
"google.golang.org/grpc/metadata"
)
type ValidateUser interface {
ValidateUser(string) (int64, error)
}
func JWT(validate ValidateUser) Middleware {
return func(handler Handler) Handler {
return func(ctx context.Context, a any) (any, error) {
var token string
if md, ok := metadata.FromIncomingContext(ctx); ok {
token = md.Get("token")[0]
}
userId, err := validate.ValidateUser(ctx.Value(token).(string))
if err != nil {
return nil, err
}
ctx = xuser.WithContext(ctx, userId)
return handler(ctx, a)
}
}
}