micro/auth/options.go

312 lines
6.0 KiB
Go
Raw Permalink Normal View History

package auth
import (
2020-05-26 17:52:21 +03:00
"context"
"time"
"github.com/unistack-org/micro/v3/logger"
"github.com/unistack-org/micro/v3/metadata"
"github.com/unistack-org/micro/v3/meter"
"github.com/unistack-org/micro/v3/store"
"github.com/unistack-org/micro/v3/tracer"
)
// NewOptions creates Options struct from slice of options
2020-04-14 11:14:07 +03:00
func NewOptions(opts ...Option) Options {
options := Options{
Tracer: tracer.DefaultTracer,
Logger: logger.DefaultLogger,
Meter: meter.DefaultMeter,
}
2020-04-14 11:14:07 +03:00
for _, o := range opts {
o(&options)
}
return options
}
// Options struct holds auth options
type Options struct {
// Context holds the external options
Context context.Context
// Meter used for metrics
Meter meter.Meter
// Logger used for logging
Logger logger.Logger
// Tracer used for tracing
Tracer tracer.Tracer
// Store used for stre data
Store store.Store
2020-03-31 14:44:34 +03:00
// Token is the services token used to authenticate itself
Token *Token
// LoginURL is the relative url path where a user can login
LoginURL string
// PrivateKey for encoding JWTs
PrivateKey string
// PublicKey for decoding JWTs
PublicKey string
// Secret is used to authenticate the service
Secret string
// ID is the services auth ID
ID string
// Issuer of the service's account
Issuer string
// Name holds the auth name
Name string
2020-05-13 19:54:47 +03:00
// Addrs sets the addresses of auth
Addrs []string
}
// Option func
type Option func(o *Options)
2020-05-13 19:54:47 +03:00
// Addrs is the auth addresses to use
func Addrs(addrs ...string) Option {
return func(o *Options) {
o.Addrs = addrs
}
}
// Name sets the name
func Name(n string) Option {
return func(o *Options) {
o.Name = n
}
}
// Issuer of the services account
func Issuer(i string) Option {
2020-04-07 14:46:44 +03:00
return func(o *Options) {
o.Issuer = i
2020-04-07 14:46:44 +03:00
}
}
// Store to back auth
func Store(s store.Store) Option {
return func(o *Options) {
o.Store = s
}
}
// PublicKey is the JWT public key
func PublicKey(key string) Option {
return func(o *Options) {
o.PublicKey = key
}
}
2020-04-01 19:17:40 +03:00
// PrivateKey is the JWT private key
func PrivateKey(key string) Option {
return func(o *Options) {
o.PrivateKey = key
}
}
2020-03-31 14:44:34 +03:00
// Credentials sets the auth credentials
2020-04-01 16:25:00 +03:00
func Credentials(id, secret string) Option {
return func(o *Options) {
2020-03-31 14:44:34 +03:00
o.ID = id
2020-04-01 16:25:00 +03:00
o.Secret = secret
}
}
2020-04-29 17:11:06 +03:00
// ClientToken sets the auth token to use when making requests
func ClientToken(token *Token) Option {
return func(o *Options) {
o.Token = token
}
}
// LoginURL sets the auth LoginURL
func LoginURL(url string) Option {
return func(o *Options) {
o.LoginURL = url
}
}
// GenerateOptions struct
type GenerateOptions struct {
Metadata metadata.Metadata
Provider string
Type string
Secret string
Issuer string
Scopes []string
}
// GenerateOption func
type GenerateOption func(o *GenerateOptions)
2020-04-01 19:20:02 +03:00
// WithSecret for the generated account
func WithSecret(s string) GenerateOption {
return func(o *GenerateOptions) {
o.Secret = s
}
}
// WithType for the generated account
func WithType(t string) GenerateOption {
return func(o *GenerateOptions) {
o.Type = t
}
}
// WithMetadata for the generated account
func WithMetadata(md metadata.Metadata) GenerateOption {
return func(o *GenerateOptions) {
o.Metadata = metadata.Copy(md)
}
}
2020-05-21 18:41:55 +03:00
// WithProvider for the generated account
func WithProvider(p string) GenerateOption {
return func(o *GenerateOptions) {
2020-05-21 18:41:55 +03:00
o.Provider = p
}
}
2020-05-21 18:41:55 +03:00
// WithScopes for the generated account
func WithScopes(s ...string) GenerateOption {
return func(o *GenerateOptions) {
2020-05-21 18:41:55 +03:00
o.Scopes = s
}
}
// WithIssuer for the generated account
func WithIssuer(i string) GenerateOption {
return func(o *GenerateOptions) {
o.Issuer = i
}
}
// NewGenerateOptions from a slice of options
func NewGenerateOptions(opts ...GenerateOption) GenerateOptions {
var options GenerateOptions
for _, o := range opts {
o(&options)
}
return options
}
// TokenOptions struct
type TokenOptions struct {
ID string
Secret string
2020-04-01 16:25:00 +03:00
RefreshToken string
Issuer string
Expiry time.Duration
}
// TokenOption func
type TokenOption func(o *TokenOptions)
2020-04-01 16:25:00 +03:00
// WithExpiry for the token
func WithExpiry(ex time.Duration) TokenOption {
return func(o *TokenOptions) {
o.Expiry = ex
}
}
// WithCredentials sets tye id and secret
2020-04-01 16:25:00 +03:00
func WithCredentials(id, secret string) TokenOption {
return func(o *TokenOptions) {
o.ID = id
o.Secret = secret
}
}
// WithToken sets the refresh token
2020-04-01 16:25:00 +03:00
func WithToken(rt string) TokenOption {
return func(o *TokenOptions) {
2020-04-01 16:25:00 +03:00
o.RefreshToken = rt
}
}
// WithTokenIssuer sets the token issuer option
2020-07-14 14:44:51 +03:00
func WithTokenIssuer(iss string) TokenOption {
return func(o *TokenOptions) {
o.Issuer = iss
}
}
// NewTokenOptions from a slice of options
func NewTokenOptions(opts ...TokenOption) TokenOptions {
var options TokenOptions
for _, o := range opts {
o(&options)
}
// set default expiry of token
2020-04-01 16:25:00 +03:00
if options.Expiry == 0 {
options.Expiry = time.Minute
}
return options
}
2020-05-20 18:49:52 +03:00
// VerifyOptions struct
2020-05-21 20:11:35 +03:00
type VerifyOptions struct {
Context context.Context
Namespace string
2020-05-21 20:11:35 +03:00
}
2020-05-20 18:49:52 +03:00
// VerifyOption func
2020-05-20 18:49:52 +03:00
type VerifyOption func(o *VerifyOptions)
2020-05-21 20:11:35 +03:00
// VerifyContext pass context to verify
2020-05-26 17:52:21 +03:00
func VerifyContext(ctx context.Context) VerifyOption {
2020-05-21 20:11:35 +03:00
return func(o *VerifyOptions) {
2020-05-26 17:52:21 +03:00
o.Context = ctx
}
}
// VerifyNamespace sets thhe namespace for verify
func VerifyNamespace(ns string) VerifyOption {
return func(o *VerifyOptions) {
o.Namespace = ns
}
}
2020-05-26 17:52:21 +03:00
// RulesOptions struct
2020-05-26 17:52:21 +03:00
type RulesOptions struct {
Context context.Context
Namespace string
2020-05-26 17:52:21 +03:00
}
// RulesOption func
2020-05-26 17:52:21 +03:00
type RulesOption func(o *RulesOptions)
// RulesContext pass rules context
2020-05-26 17:52:21 +03:00
func RulesContext(ctx context.Context) RulesOption {
return func(o *RulesOptions) {
o.Context = ctx
2020-05-21 20:11:35 +03:00
}
}
// RulesNamespace sets the rule namespace
func RulesNamespace(ns string) RulesOption {
return func(o *RulesOptions) {
o.Namespace = ns
}
}
// Logger sets the logger
func Logger(l logger.Logger) Option {
return func(o *Options) {
o.Logger = l
}
}
// Meter sets the meter
func Meter(m meter.Meter) Option {
return func(o *Options) {
o.Meter = m
}
}
// Tracer sets the meter
func Tracer(t tracer.Tracer) Option {
return func(o *Options) {
o.Tracer = t
}
}