Files

69 lines
2.0 KiB
Go

package authnfx
import (
"net/http"
"github.com/spf13/cobra"
"go.uber.org/fx"
"github.com/hanzo-fi/go-libs/v5/pkg/authn/jwt"
)
func JWTModule(cfg jwt.Config) fx.Option {
options := jwtModuleOptions("")
options = append(options, fx.Provide(func() jwt.Config {
return cfg
}))
return fx.Module("auth", options...)
}
func AnnotatedJWTModule(cfg jwt.Config, annotationTag string) fx.Option {
nameAnnotation := `name:"` + annotationTag + `"`
options := jwtModuleOptions(nameAnnotation)
options = append(options, fx.Provide(fx.Annotate(func() jwt.Config {
return cfg
}, fx.ResultTags(nameAnnotation))))
return fx.Module("auth", options...)
}
func jwtModuleOptions(nameAnnotation string) []fx.Option {
options := make([]fx.Option, 0)
if nameAnnotation == "" {
options = append(options,
fx.Supply(http.DefaultClient, fx.Private),
fx.Provide(jwt.NewKeySets),
fx.Provide(jwt.NewAuthenticatorFromConfig),
)
return options
}
options = append(options, fx.Provide(
fx.Annotate(func() *http.Client {
return http.DefaultClient
}, fx.ResultTags(nameAnnotation)),
))
options = append(options, fx.Provide(
fx.Annotate(jwt.NewKeySets, fx.ParamTags(nameAnnotation, nameAnnotation), fx.ResultTags(nameAnnotation, ``)),
))
options = append(options, fx.Provide(
fx.Annotate(jwt.NewAuthenticatorFromConfig, fx.ParamTags(nameAnnotation, nameAnnotation), fx.ResultTags(nameAnnotation)),
))
return options
}
func JWTModuleFromFlags(cmd *cobra.Command) fx.Option {
return JWTModule(jwt.ConfigFromFlags(cmd.Flags()))
}
func OrganizationAwareJWTModuleFromFlags(cmd *cobra.Command, fn jwt.OrganizationIDProvider) fx.Option {
cfg := jwt.ConfigFromFlags(cmd.Flags())
cfg.AdditionalChecks = append(cfg.AdditionalChecks, jwt.CheckOrganizationIDClaim(fn))
return JWTModule(cfg)
}
func AdditionalChecksJWTModuleFromFlags(cmd *cobra.Command, checks ...jwt.AdditionalCheck) fx.Option {
cfg := jwt.ConfigFromFlags(cmd.Flags())
cfg.AdditionalChecks = append(cfg.AdditionalChecks, checks...)
return JWTModule(cfg)
}