package jwks import ( "errors" "github.com/MicahParks/keyfunc/v3" "github.com/golang-jwt/jwt/v5" "go.uber.org/zap" "leafdev.top/leaf/rag/internal/providers" "time" ) var refreshRate = 1 * time.Hour var Jwks keyfunc.Keyfunc var ( ErrJWKSNotInitialized = errors.New("JWKS is not initialized") ) var logger = providers.MustGet[zap.Logger]() var config = providers.MustGet[providers.GlobalConfig]() func RefreshJWKS() { logger.Info("Refreshing JWKS...") var err error Jwks, err = keyfunc.NewDefault([]string{config.JWKS.Url}) if err != nil { logger.Error("Failed to create JWK Set from resource at the given URL.\nError: " + err.Error()) } logger.Info("JWKS refreshed.") } func ParseJWT(jwtB64 string) (*jwt.Token, error) { if Jwks.Keyfunc == nil { return nil, ErrJWKSNotInitialized } token, err := jwt.Parse(jwtB64, Jwks.Keyfunc) return token, err }