func()

in pkg/filter/auth/jwt/jwt.go [143:196]


func (factory *FilterFactory) Apply() error {

	if len(factory.cfg.Providers) == 0 {
		return fmt.Errorf("providers is null")
	}

	for _, provider := range factory.cfg.Providers {

		if provider.Local != nil {
			jwksJSON := json.RawMessage(provider.Local.InlineString)
			jwks, err := keyfunc.NewJSON(jwksJSON)
			if err != nil {
				logger.Warnf("failed to create JWKs from JSON. provider:%s Error: %s", provider.Name, err.Error())
			} else {
				provider.FromHeaders.setDefault()
				factory.providerJwks[provider.Name] = Provider{jwk: jwks, headers: provider.FromHeaders,
					issuer: provider.Issuer, forwardPayloadHeader: provider.ForwardPayloadHeader}
				continue
			}
		}

		if provider.Remote != nil {
			uri := provider.Remote.HttpURI
			timeout, err := time.ParseDuration(uri.TimeOut)
			if err != nil {
				logger.Warnf("jwt provides timeout parse fail: %s", err.Error())
				continue
			}

			options := keyfunc.Options{RefreshTimeout: timeout}
			jwks, err := keyfunc.Get(uri.Uri, options)
			if err != nil {
				logger.Warnf("failed to create JWKs from resource at the given URL. provider:%s Error: %s", provider.Name, err.Error())
			} else {
				provider.FromHeaders.setDefault()
				factory.providerJwks[provider.Name] = Provider{jwk: jwks, headers: provider.FromHeaders,
					issuer: provider.Issuer, forwardPayloadHeader: provider.ForwardPayloadHeader}
			}
		}
	}

	if len(factory.providerJwks) == 0 {
		return fmt.Errorf("providers is null")
	}

	if factory.cfg.ErrMsg == "" {
		factory.cfg.ErrMsg = "token invalid"
	}

	errMsg, _ := json.Marshal(http.ErrResponse{Message: factory.cfg.ErrMsg})
	factory.errMsg = errMsg

	return nil
}