mirror of
https://github.com/redis/go-redis.git
synced 2025-07-29 17:41:15 +03:00
feat(client): Add CredentialsProvider field to UniversalOptions (#2927)
* Add CredentialsProvider field to universal client * fix(options): Add credentials providers to universal options and pass to client options * chore(ring): Add missing fields in building clientOptions --------- Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com> Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com> Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
This commit is contained in:
31
ring.go
31
ring.go
@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
"github.com/cespare/xxhash/v2"
|
"github.com/cespare/xxhash/v2"
|
||||||
"github.com/dgryski/go-rendezvous" //nolint
|
"github.com/dgryski/go-rendezvous" //nolint
|
||||||
|
"github.com/redis/go-redis/v9/auth"
|
||||||
|
|
||||||
"github.com/redis/go-redis/v9/internal"
|
"github.com/redis/go-redis/v9/internal"
|
||||||
"github.com/redis/go-redis/v9/internal/hashtag"
|
"github.com/redis/go-redis/v9/internal/hashtag"
|
||||||
@ -73,7 +74,24 @@ type RingOptions struct {
|
|||||||
Protocol int
|
Protocol int
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
DB int
|
// CredentialsProvider allows the username and password to be updated
|
||||||
|
// before reconnecting. It should return the current username and password.
|
||||||
|
CredentialsProvider func() (username string, password string)
|
||||||
|
|
||||||
|
// CredentialsProviderContext is an enhanced parameter of CredentialsProvider,
|
||||||
|
// done to maintain API compatibility. In the future,
|
||||||
|
// there might be a merge between CredentialsProviderContext and CredentialsProvider.
|
||||||
|
// There will be a conflict between them; if CredentialsProviderContext exists, we will ignore CredentialsProvider.
|
||||||
|
CredentialsProviderContext func(ctx context.Context) (username string, password string, err error)
|
||||||
|
|
||||||
|
// StreamingCredentialsProvider is used to retrieve the credentials
|
||||||
|
// for the connection from an external source. Those credentials may change
|
||||||
|
// during the connection lifetime. This is useful for managed identity
|
||||||
|
// scenarios where the credentials are retrieved from an external source.
|
||||||
|
//
|
||||||
|
// Currently, this is a placeholder for the future implementation.
|
||||||
|
StreamingCredentialsProvider auth.StreamingCredentialsProvider
|
||||||
|
DB int
|
||||||
|
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
MinRetryBackoff time.Duration
|
MinRetryBackoff time.Duration
|
||||||
@ -154,10 +172,13 @@ func (opt *RingOptions) clientOptions() *Options {
|
|||||||
Dialer: opt.Dialer,
|
Dialer: opt.Dialer,
|
||||||
OnConnect: opt.OnConnect,
|
OnConnect: opt.OnConnect,
|
||||||
|
|
||||||
Protocol: opt.Protocol,
|
Protocol: opt.Protocol,
|
||||||
Username: opt.Username,
|
Username: opt.Username,
|
||||||
Password: opt.Password,
|
Password: opt.Password,
|
||||||
DB: opt.DB,
|
CredentialsProvider: opt.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: opt.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: opt.StreamingCredentialsProvider,
|
||||||
|
DB: opt.DB,
|
||||||
|
|
||||||
MaxRetries: -1,
|
MaxRetries: -1,
|
||||||
|
|
||||||
|
40
sentinel.go
40
sentinel.go
@ -12,6 +12,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/redis/go-redis/v9/auth"
|
||||||
"github.com/redis/go-redis/v9/internal"
|
"github.com/redis/go-redis/v9/internal"
|
||||||
"github.com/redis/go-redis/v9/internal/pool"
|
"github.com/redis/go-redis/v9/internal/pool"
|
||||||
"github.com/redis/go-redis/v9/internal/rand"
|
"github.com/redis/go-redis/v9/internal/rand"
|
||||||
@ -60,7 +61,24 @@ type FailoverOptions struct {
|
|||||||
Protocol int
|
Protocol int
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
DB int
|
// CredentialsProvider allows the username and password to be updated
|
||||||
|
// before reconnecting. It should return the current username and password.
|
||||||
|
CredentialsProvider func() (username string, password string)
|
||||||
|
|
||||||
|
// CredentialsProviderContext is an enhanced parameter of CredentialsProvider,
|
||||||
|
// done to maintain API compatibility. In the future,
|
||||||
|
// there might be a merge between CredentialsProviderContext and CredentialsProvider.
|
||||||
|
// There will be a conflict between them; if CredentialsProviderContext exists, we will ignore CredentialsProvider.
|
||||||
|
CredentialsProviderContext func(ctx context.Context) (username string, password string, err error)
|
||||||
|
|
||||||
|
// StreamingCredentialsProvider is used to retrieve the credentials
|
||||||
|
// for the connection from an external source. Those credentials may change
|
||||||
|
// during the connection lifetime. This is useful for managed identity
|
||||||
|
// scenarios where the credentials are retrieved from an external source.
|
||||||
|
//
|
||||||
|
// Currently, this is a placeholder for the future implementation.
|
||||||
|
StreamingCredentialsProvider auth.StreamingCredentialsProvider
|
||||||
|
DB int
|
||||||
|
|
||||||
MaxRetries int
|
MaxRetries int
|
||||||
MinRetryBackoff time.Duration
|
MinRetryBackoff time.Duration
|
||||||
@ -107,10 +125,13 @@ func (opt *FailoverOptions) clientOptions() *Options {
|
|||||||
Dialer: opt.Dialer,
|
Dialer: opt.Dialer,
|
||||||
OnConnect: opt.OnConnect,
|
OnConnect: opt.OnConnect,
|
||||||
|
|
||||||
DB: opt.DB,
|
DB: opt.DB,
|
||||||
Protocol: opt.Protocol,
|
Protocol: opt.Protocol,
|
||||||
Username: opt.Username,
|
Username: opt.Username,
|
||||||
Password: opt.Password,
|
Password: opt.Password,
|
||||||
|
CredentialsProvider: opt.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: opt.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: opt.StreamingCredentialsProvider,
|
||||||
|
|
||||||
MaxRetries: opt.MaxRetries,
|
MaxRetries: opt.MaxRetries,
|
||||||
MinRetryBackoff: opt.MinRetryBackoff,
|
MinRetryBackoff: opt.MinRetryBackoff,
|
||||||
@ -187,9 +208,12 @@ func (opt *FailoverOptions) clusterOptions() *ClusterOptions {
|
|||||||
Dialer: opt.Dialer,
|
Dialer: opt.Dialer,
|
||||||
OnConnect: opt.OnConnect,
|
OnConnect: opt.OnConnect,
|
||||||
|
|
||||||
Protocol: opt.Protocol,
|
Protocol: opt.Protocol,
|
||||||
Username: opt.Username,
|
Username: opt.Username,
|
||||||
Password: opt.Password,
|
Password: opt.Password,
|
||||||
|
CredentialsProvider: opt.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: opt.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: opt.StreamingCredentialsProvider,
|
||||||
|
|
||||||
MaxRedirects: opt.MaxRetries,
|
MaxRedirects: opt.MaxRetries,
|
||||||
|
|
||||||
|
58
universal.go
58
universal.go
@ -5,6 +5,8 @@ import (
|
|||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/redis/go-redis/v9/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UniversalOptions information is required by UniversalClient to establish
|
// UniversalOptions information is required by UniversalClient to establish
|
||||||
@ -26,9 +28,27 @@ type UniversalOptions struct {
|
|||||||
Dialer func(ctx context.Context, network, addr string) (net.Conn, error)
|
Dialer func(ctx context.Context, network, addr string) (net.Conn, error)
|
||||||
OnConnect func(ctx context.Context, cn *Conn) error
|
OnConnect func(ctx context.Context, cn *Conn) error
|
||||||
|
|
||||||
Protocol int
|
Protocol int
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
|
// CredentialsProvider allows the username and password to be updated
|
||||||
|
// before reconnecting. It should return the current username and password.
|
||||||
|
CredentialsProvider func() (username string, password string)
|
||||||
|
|
||||||
|
// CredentialsProviderContext is an enhanced parameter of CredentialsProvider,
|
||||||
|
// done to maintain API compatibility. In the future,
|
||||||
|
// there might be a merge between CredentialsProviderContext and CredentialsProvider.
|
||||||
|
// There will be a conflict between them; if CredentialsProviderContext exists, we will ignore CredentialsProvider.
|
||||||
|
CredentialsProviderContext func(ctx context.Context) (username string, password string, err error)
|
||||||
|
|
||||||
|
// StreamingCredentialsProvider is used to retrieve the credentials
|
||||||
|
// for the connection from an external source. Those credentials may change
|
||||||
|
// during the connection lifetime. This is useful for managed identity
|
||||||
|
// scenarios where the credentials are retrieved from an external source.
|
||||||
|
//
|
||||||
|
// Currently, this is a placeholder for the future implementation.
|
||||||
|
StreamingCredentialsProvider auth.StreamingCredentialsProvider
|
||||||
|
|
||||||
SentinelUsername string
|
SentinelUsername string
|
||||||
SentinelPassword string
|
SentinelPassword string
|
||||||
|
|
||||||
@ -96,9 +116,12 @@ func (o *UniversalOptions) Cluster() *ClusterOptions {
|
|||||||
Dialer: o.Dialer,
|
Dialer: o.Dialer,
|
||||||
OnConnect: o.OnConnect,
|
OnConnect: o.OnConnect,
|
||||||
|
|
||||||
Protocol: o.Protocol,
|
Protocol: o.Protocol,
|
||||||
Username: o.Username,
|
Username: o.Username,
|
||||||
Password: o.Password,
|
Password: o.Password,
|
||||||
|
CredentialsProvider: o.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: o.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: o.StreamingCredentialsProvider,
|
||||||
|
|
||||||
MaxRedirects: o.MaxRedirects,
|
MaxRedirects: o.MaxRedirects,
|
||||||
ReadOnly: o.ReadOnly,
|
ReadOnly: o.ReadOnly,
|
||||||
@ -147,10 +170,14 @@ func (o *UniversalOptions) Failover() *FailoverOptions {
|
|||||||
Dialer: o.Dialer,
|
Dialer: o.Dialer,
|
||||||
OnConnect: o.OnConnect,
|
OnConnect: o.OnConnect,
|
||||||
|
|
||||||
DB: o.DB,
|
DB: o.DB,
|
||||||
Protocol: o.Protocol,
|
Protocol: o.Protocol,
|
||||||
Username: o.Username,
|
Username: o.Username,
|
||||||
Password: o.Password,
|
Password: o.Password,
|
||||||
|
CredentialsProvider: o.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: o.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: o.StreamingCredentialsProvider,
|
||||||
|
|
||||||
SentinelUsername: o.SentinelUsername,
|
SentinelUsername: o.SentinelUsername,
|
||||||
SentinelPassword: o.SentinelPassword,
|
SentinelPassword: o.SentinelPassword,
|
||||||
|
|
||||||
@ -199,10 +226,13 @@ func (o *UniversalOptions) Simple() *Options {
|
|||||||
Dialer: o.Dialer,
|
Dialer: o.Dialer,
|
||||||
OnConnect: o.OnConnect,
|
OnConnect: o.OnConnect,
|
||||||
|
|
||||||
DB: o.DB,
|
DB: o.DB,
|
||||||
Protocol: o.Protocol,
|
Protocol: o.Protocol,
|
||||||
Username: o.Username,
|
Username: o.Username,
|
||||||
Password: o.Password,
|
Password: o.Password,
|
||||||
|
CredentialsProvider: o.CredentialsProvider,
|
||||||
|
CredentialsProviderContext: o.CredentialsProviderContext,
|
||||||
|
StreamingCredentialsProvider: o.StreamingCredentialsProvider,
|
||||||
|
|
||||||
MaxRetries: o.MaxRetries,
|
MaxRetries: o.MaxRetries,
|
||||||
MinRetryBackoff: o.MinRetryBackoff,
|
MinRetryBackoff: o.MinRetryBackoff,
|
||||||
|
Reference in New Issue
Block a user