* Auth Wrapper * Tweak cmd flag * auth_excludes => auth_exclude * Make Auth.Excludes variadic * Use metadata.Get (passes through http and http2 it will go through various case formats) * fix auth wrapper auth.Auth interface initialisation Co-authored-by: Asim Aslam <asim@aslam.me>
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package auth
|
|
|
|
import (
|
|
b64 "encoding/base64"
|
|
)
|
|
|
|
type Options struct {
|
|
PublicKey []byte
|
|
PrivateKey []byte
|
|
Excludes []string
|
|
}
|
|
|
|
type Option func(o *Options)
|
|
|
|
// Excludes endpoints from auth
|
|
func Excludes(excludes ...string) Option {
|
|
return func(o *Options) {
|
|
o.Excludes = excludes
|
|
}
|
|
}
|
|
|
|
// PublicKey is the JWT public key
|
|
func PublicKey(key string) Option {
|
|
return func(o *Options) {
|
|
o.PublicKey, _ = b64.StdEncoding.DecodeString(key)
|
|
}
|
|
}
|
|
|
|
// PrivateKey is the JWT private key
|
|
func PrivateKey(key string) Option {
|
|
return func(o *Options) {
|
|
o.PrivateKey, _ = b64.StdEncoding.DecodeString(key)
|
|
}
|
|
}
|
|
|
|
type GenerateOptions struct {
|
|
Metadata map[string]string
|
|
Roles []*Role
|
|
}
|
|
|
|
type GenerateOption func(o *GenerateOptions)
|
|
|
|
// Metadata for the generated account
|
|
func Metadata(md map[string]string) func(o *GenerateOptions) {
|
|
return func(o *GenerateOptions) {
|
|
o.Metadata = md
|
|
}
|
|
}
|
|
|
|
// Roles for the generated account
|
|
func Roles(rs []*Role) func(o *GenerateOptions) {
|
|
return func(o *GenerateOptions) {
|
|
o.Roles = rs
|
|
}
|
|
}
|
|
|
|
// NewGenerateOptions from a slice of options
|
|
func NewGenerateOptions(opts ...GenerateOption) GenerateOptions {
|
|
var options GenerateOptions
|
|
for _, o := range opts {
|
|
o(&options)
|
|
}
|
|
|
|
return options
|
|
}
|