// Package auth package provides authentication-related interfaces and types. // It also includes a basic implementation of credentials using username and password. package auth // StreamingCredentialsProvider is an interface that defines the methods for a streaming credentials provider. // It is used to provide credentials for authentication. // The CredentialsListener is used to receive updates when the credentials change. type StreamingCredentialsProvider interface { // Subscribe subscribes to the credentials provider for updates. // It returns the current credentials, a cancel function to unsubscribe from the provider, // and an error if any. // TODO(ndyakov): Should we add context to the Subscribe method? Subscribe(listener CredentialsListener) (Credentials, CancelProviderFunc, error) } // CancelProviderFunc is a function that is used to cancel the subscription to the credentials provider. // It is used to unsubscribe from the provider when the credentials are no longer needed. type CancelProviderFunc func() error // CredentialsListener is an interface that defines the methods for a credentials listener. // It is used to receive updates when the credentials change. // The OnNext method is called when the credentials change. // The OnError method is called when an error occurs while requesting the credentials. type CredentialsListener interface { OnNext(credentials Credentials) OnError(err error) } // Credentials is an interface that defines the methods for credentials. // It is used to provide the credentials for authentication. type Credentials interface { // BasicAuth returns the username and password for basic authentication. BasicAuth() (username string, password string) // RawCredentials returns the raw credentials as a string. // This can be used to extract the username and password from the raw credentials or // additional information if present in the token. RawCredentials() string } type basicAuth struct { username string password string } // RawCredentials returns the raw credentials as a string. func (b *basicAuth) RawCredentials() string { return b.username + ":" + b.password } // BasicAuth returns the username and password for basic authentication. func (b *basicAuth) BasicAuth() (username string, password string) { return b.username, b.password } // NewBasicCredentials creates a new Credentials object from the given username and password. func NewBasicCredentials(username, password string) Credentials { return &basicAuth{ username: username, password: password, } }