micro--go-micro
c7657f73f4
goreleaser / goreleaser (push) Has been cancelled
* test(harness): read agent plan from the scoped store
The store-scoping change moved an agent's plan from the default table
key agent/{name}/plan to its own table (database "agent", table {name},
key "plan"). The plan-delegate harness tests still read the old key and
failed with 'not found'; read through store.Scope(mem, "agent", name)
like the agent does.
* docs: orient agents-first across README, landing, and docs overview
Lead with agents (then services and flows), surface MCP + A2A as the
interop story, and frame agents as services. Landing hero and feature
grid reordered agents-first with an A2A gateway card.
* v6: module path go-micro.dev/v6, TLS secure by default, NewService
Cut v6. Three breaking changes, bundled so the major bump is paid once:
- Module path go-micro.dev/v5 -> go-micro.dev/v6 across all imports + go.mod.
- TLS verification on by default (was off). MICRO_TLS_SECURE removed;
MICRO_TLS_INSECURE=true opts out for self-signed/dev.
- micro.NewService(name, opts...) is the canonical service constructor,
symmetric with NewAgent/NewFlow; micro.New kept as a deprecated alias;
the old name-less NewService(opts...) removed. Generators emit NewService.
Also ports the JWT auth token provider in-module (go-micro.dev/v6/auth/jwt/token
on golang-jwt/jwt/v5), dropping the v5-pinned github.com/micro/plugins/v5/auth/jwt
and the deprecated dgrijalva/jwt-go.
Docs/README/landing updated to v6 and @latest; v5->v6 migration guide added;
CHANGELOG cut as [6.0.0]. Blog posts left at their historical versions.
---------
Co-authored-by: Claude <noreply@anthropic.com>
223 行
4.2 KiB
Go
223 行
4.2 KiB
Go
package auth
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go-micro.dev/v6/logger"
|
|
)
|
|
|
|
func NewOptions(opts ...Option) Options {
|
|
options := Options{
|
|
Logger: logger.DefaultLogger,
|
|
}
|
|
|
|
for _, o := range opts {
|
|
o(&options)
|
|
}
|
|
|
|
return options
|
|
}
|
|
|
|
type Options struct {
|
|
// Logger is the underline logger
|
|
Logger logger.Logger
|
|
// Token is the services token used to authenticate itself
|
|
Token *Token
|
|
// Namespace the service belongs to
|
|
Namespace string
|
|
// ID is the services auth ID
|
|
ID string
|
|
// Secret is used to authenticate the service
|
|
Secret string
|
|
// PublicKey for decoding JWTs
|
|
PublicKey string
|
|
// PrivateKey for encoding JWTs
|
|
PrivateKey string
|
|
// Addrs sets the addresses of auth
|
|
Addrs []string
|
|
}
|
|
|
|
type Option func(o *Options)
|
|
|
|
// Addrs is the auth addresses to use.
|
|
func Addrs(addrs ...string) Option {
|
|
return func(o *Options) {
|
|
o.Addrs = addrs
|
|
}
|
|
}
|
|
|
|
// Namespace the service belongs to.
|
|
func Namespace(n string) Option {
|
|
return func(o *Options) {
|
|
o.Namespace = n
|
|
}
|
|
}
|
|
|
|
// PublicKey is the JWT public key.
|
|
func PublicKey(key string) Option {
|
|
return func(o *Options) {
|
|
o.PublicKey = key
|
|
}
|
|
}
|
|
|
|
// PrivateKey is the JWT private key.
|
|
func PrivateKey(key string) Option {
|
|
return func(o *Options) {
|
|
o.PrivateKey = key
|
|
}
|
|
}
|
|
|
|
// WithLogger sets the underline logger.
|
|
func WithLogger(l logger.Logger) Option {
|
|
return func(o *Options) {
|
|
o.Logger = l
|
|
}
|
|
}
|
|
|
|
// Credentials sets the auth credentials.
|
|
func Credentials(id, secret string) Option {
|
|
return func(o *Options) {
|
|
o.ID = id
|
|
o.Secret = secret
|
|
}
|
|
}
|
|
|
|
// ClientToken sets the auth token to use when making requests.
|
|
func ClientToken(token *Token) Option {
|
|
return func(o *Options) {
|
|
o.Token = token
|
|
}
|
|
}
|
|
|
|
type GenerateOptions struct {
|
|
// Metadata associated with the account
|
|
Metadata map[string]string
|
|
// Provider of the account, e.g. oauth
|
|
Provider string
|
|
// Type of the account, e.g. user
|
|
Type string
|
|
// Secret used to authenticate the account
|
|
Secret string
|
|
// Scopes the account has access too
|
|
Scopes []string
|
|
}
|
|
|
|
type GenerateOption func(o *GenerateOptions)
|
|
|
|
// 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 map[string]string) GenerateOption {
|
|
return func(o *GenerateOptions) {
|
|
o.Metadata = md
|
|
}
|
|
}
|
|
|
|
// WithProvider for the generated account.
|
|
func WithProvider(p string) GenerateOption {
|
|
return func(o *GenerateOptions) {
|
|
o.Provider = p
|
|
}
|
|
}
|
|
|
|
// WithScopes for the generated account.
|
|
func WithScopes(s ...string) GenerateOption {
|
|
return func(o *GenerateOptions) {
|
|
o.Scopes = s
|
|
}
|
|
}
|
|
|
|
// NewGenerateOptions from a slice of options.
|
|
func NewGenerateOptions(opts ...GenerateOption) GenerateOptions {
|
|
var options GenerateOptions
|
|
for _, o := range opts {
|
|
o(&options)
|
|
}
|
|
return options
|
|
}
|
|
|
|
type TokenOptions struct {
|
|
// ID for the account
|
|
ID string
|
|
// Secret for the account
|
|
Secret string
|
|
// RefreshToken is used to refesh a token
|
|
RefreshToken string
|
|
// Expiry is the time the token should live for
|
|
Expiry time.Duration
|
|
}
|
|
|
|
type TokenOption func(o *TokenOptions)
|
|
|
|
// WithExpiry for the token.
|
|
func WithExpiry(ex time.Duration) TokenOption {
|
|
return func(o *TokenOptions) {
|
|
o.Expiry = ex
|
|
}
|
|
}
|
|
|
|
func WithCredentials(id, secret string) TokenOption {
|
|
return func(o *TokenOptions) {
|
|
o.ID = id
|
|
o.Secret = secret
|
|
}
|
|
}
|
|
|
|
func WithToken(rt string) TokenOption {
|
|
return func(o *TokenOptions) {
|
|
o.RefreshToken = rt
|
|
}
|
|
}
|
|
|
|
// 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
|
|
if options.Expiry == 0 {
|
|
options.Expiry = time.Minute
|
|
}
|
|
|
|
return options
|
|
}
|
|
|
|
type VerifyOptions struct {
|
|
Context context.Context
|
|
}
|
|
|
|
type VerifyOption func(o *VerifyOptions)
|
|
|
|
func VerifyContext(ctx context.Context) VerifyOption {
|
|
return func(o *VerifyOptions) {
|
|
o.Context = ctx
|
|
}
|
|
}
|
|
|
|
type ListOptions struct {
|
|
Context context.Context
|
|
}
|
|
|
|
type ListOption func(o *ListOptions)
|
|
|
|
func RulesContext(ctx context.Context) ListOption {
|
|
return func(o *ListOptions) {
|
|
o.Context = ctx
|
|
}
|
|
}
|