kuma
1package issuer
2
3import (
4"context"
5
6mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
7core_tokens "github.com/kumahq/kuma/pkg/core/tokens"
8)
9
10type Validator interface {
11Validate(ctx context.Context, token core_tokens.Token, meshName string) (DataplaneIdentity, error)
12}
13
14type jwtValidator struct {
15validators func(string) (core_tokens.Validator, error)
16}
17
18var _ Validator = &jwtValidator{}
19
20func NewValidator(validators func(string) (core_tokens.Validator, error)) Validator {
21return &jwtValidator{
22validators: validators,
23}
24}
25
26func (j *jwtValidator) Validate(ctx context.Context, token core_tokens.Token, meshName string) (DataplaneIdentity, error) {
27claims := &DataplaneClaims{}
28validators, err := j.validators(meshName)
29if err != nil {
30return DataplaneIdentity{}, err
31}
32if err := validators.ParseWithValidation(ctx, token, claims); err != nil {
33return DataplaneIdentity{}, err
34}
35return DataplaneIdentity{
36Name: claims.Name,
37Mesh: claims.Mesh,
38Tags: mesh_proto.MultiValueTagSetFrom(claims.Tags),
39Type: mesh_proto.ProxyType(claims.Type),
40}, nil
41}
42