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.
28 lines
649 B
28 lines
649 B
package middleware |
|
|
|
import ( |
|
"context" |
|
"git.diulo.com/mogfee/kit/constants" |
|
"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 = context.WithValue(ctx, constants.UserIdKey{}, userId) |
|
return handler(ctx, a) |
|
} |
|
} |
|
}
|
|
|