mirror of
https://github.com/hanzo-fi/go-libs.git
synced 2026-10-30 20:53:44 +00:00
69 lines
2.0 KiB
Go
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)
|
|
}
|