rag/internal/providers/jwks/jwks.go

45 lines
880 B
Go
Raw Normal View History

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