credentials

package
v0.17.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2023 License: MIT Imports: 26 Imported by: 0

README

GoAuth Credentials

Docs

goauth/credentials is a package to manage generic BasicAuth, OAuth 2.0, and JWT credentials definitions in a single JSON definition.

The primary use case is to have a single JSON definition of multiple applications for multiple services which can be used to generate token and API requests.

It works with goauth/endpoints to add endpoints for known services.

Documentation

Index

Constants

View Source
const (
	TypeBasic       = "basic"
	TypeHeaderQuery = "headerquery"
	TypeOAuth2      = "oauth2"
	TypeJWT         = "jwt"
)
View Source
const (
	SigningMethodES256 = "ES256"
	SigningMethodES384 = "ES384"
	SigningMethodES512 = "ES512"
	SigningMethodHS256 = "HS256"
	SigningMethodHS384 = "HS384"
	SigningMethodHS512 = "HS512"
)

Variables

View Source
var (
	ErrJWTNotSupported       = errors.New("jwt is not supported for function")
	ErrBasicAuthNotPopulated = errors.New("basic auth is not populated")
	ErrJWTNotPopulated       = errors.New("jwt is not populated")
	ErrOAuth2NotPopulated    = errors.New("oauth2 is not populated")
	ErrTypeNotSupported      = errors.New("credentials type not supported")
)

Functions

func NewTokenCLI added in v0.16.0

func NewTokenCLI(creds Credentials, state string) (token *oauth2.Token, err error)

Types

type AuthCodeOptions added in v0.17.0

type AuthCodeOptions []oauth2.AuthCodeOption

func (*AuthCodeOptions) Add added in v0.17.0

func (opts *AuthCodeOptions) Add(k, v string)

func (*AuthCodeOptions) AddMap added in v0.17.0

func (opts *AuthCodeOptions) AddMap(m map[string][]string)

type Credentials

type Credentials struct {
	Service     string                 `json:"service,omitempty"`
	Type        string                 `json:"type,omitempty"`
	Subdomain   string                 `json:"subdomain,omitempty"`
	Basic       CredentialsBasicAuth   `json:"basic,omitempty"`
	OAuth2      CredentialsOAuth2      `json:"oauth2,omitempty"`
	JWT         CredentialsJWT         `json:"jwt,omitempty"`
	Token       *oauth2.Token          `json:"token,omitempty"`
	HeaderQuery CredentialsHeaderQuery `json:"headerquery,omitempty"`
	Additional  url.Values             `json:"additional,omitempty"`
}

func NewCredentialsJSON

func NewCredentialsJSON(credsData, accessToken []byte) (Credentials, error)

func ReadCredentialsFromFile

func ReadCredentialsFromFile(credentialsSetFilename, accountKey string, inclAccountsOnError bool) (Credentials, error)

func (*Credentials) Inflate

func (creds *Credentials) Inflate() error

func (*Credentials) NewClient

func (creds *Credentials) NewClient(ctx context.Context) (*http.Client, error)

func (*Credentials) NewClientCLI added in v0.14.2

func (creds *Credentials) NewClientCLI(oauth2State string) (*http.Client, error)

func (*Credentials) NewSimpleClient

func (creds *Credentials) NewSimpleClient(ctx context.Context) (*httpsimple.SimpleClient, error)

func (*Credentials) NewSimpleClientHTTP added in v0.14.0

func (creds *Credentials) NewSimpleClientHTTP(httpClient *http.Client) (*httpsimple.SimpleClient, error)

func (*Credentials) NewToken

func (creds *Credentials) NewToken() (*oauth2.Token, error)

func (*Credentials) NewTokenCLI added in v0.14.2

func (creds *Credentials) NewTokenCLI(oauth2State string) (*oauth2.Token, error)

NewTokenCLI retrieves a token using CLI approach for OAuth 2.0 authorization code or password grant.

type CredentialsBasicAuth added in v0.14.0

type CredentialsBasicAuth struct {
	Username      string            `json:"username,omitempty"`
	Password      string            `json:"password,omitempty"`
	Encoded       string            `json:"encoded,omitempty"`
	ServerURL     string            `json:"serverURL,omitempty"`
	AllowInsecure bool              `json:"allowInsecure,omitempty"`
	Metadata      map[string]string `json:"metadata,omitempty"`
}

func (*CredentialsBasicAuth) NewClient added in v0.14.0

func (c *CredentialsBasicAuth) NewClient() (*http.Client, error)

func (*CredentialsBasicAuth) NewSimpleClient added in v0.16.0

func (c *CredentialsBasicAuth) NewSimpleClient() (httpsimple.SimpleClient, error)

type CredentialsHeaderQuery added in v0.16.0

type CredentialsHeaderQuery struct {
	ServerURL     string      `json:"serverURL,omitempty"`
	Header        http.Header `json:"header,omitempty"`
	Query         url.Values  `json:"query,omitempty"`
	AllowInsecure bool        `json:"allowInsecure,omitempty"`
}

func (*CredentialsHeaderQuery) NewClient added in v0.16.0

func (c *CredentialsHeaderQuery) NewClient() *http.Client

func (*CredentialsHeaderQuery) NewSimpleClient added in v0.16.0

func (c *CredentialsHeaderQuery) NewSimpleClient() httpsimple.SimpleClient

type CredentialsJWT added in v0.12.0

type CredentialsJWT struct {
	Issuer        string `json:"issuer,omitempty"`
	PrivateKey    string `json:"privateKey,omitempty"`
	SigningMethod string `json:"signingMethod,omitempty"`
}

func (*CredentialsJWT) StandardToken added in v0.12.0

func (jc *CredentialsJWT) StandardToken(tokenDuration time.Duration) (*jwt.Token, string, error)

type CredentialsOAuth2 added in v0.12.0

type CredentialsOAuth2 struct {
	ServerURL            string              `json:"serverURL,omitempty"`
	ApplicationID        string              `json:"applicationID,omitempty"`
	ClientID             string              `json:"clientID,omitempty"`
	ClientSecret         string              `json:"clientSecret,omitempty"`
	Endpoint             oauth2.Endpoint     `json:"endpoint,omitempty"`
	RedirectURL          string              `json:"redirectURL,omitempty"`
	AppName              string              `json:"applicationName,omitempty"`
	AppVersion           string              `json:"applicationVersion,omitempty"`
	OAuthEndpointID      string              `json:"oauthEndpointID,omitempty"`
	AccessTokenTTL       int64               `json:"accessTokenTTL,omitempty"`
	RefreshTokenTTL      int64               `json:"refreshTokenTTL,omitempty"`
	GrantType            string              `json:"grantType,omitempty"`
	PKCE                 bool                `json:"pkce"`
	Username             string              `json:"username,omitempty"`
	Password             string              `json:"password,omitempty"`
	JWT                  string              `json:"jwt,omitempty"`
	Token                *oauth2.Token       `json:"token,omitempty"`
	Scopes               []string            `json:"scopes,omitempty"`
	AuthCodeOpts         map[string][]string `json:"authCodeOpts,omitempty"`
	AuthCodeExchangeOpts map[string][]string `json:"authCodeExchangeOpts,omitempty"`
	PasswordOpts         map[string][]string `json:"passwordOpts,omitempty"`
	Metadata             map[string]string   `json:"metadata,omitempty"`
}

CredentialsOAuth2 supports OAuth 2.0 authorization_code, password, and client_credentials grant flows.

func NewCredentialsOAuth2Env added in v0.12.0

func NewCredentialsOAuth2Env(envPrefix string) CredentialsOAuth2

func ParseCredentialsOAuth2 added in v0.17.0

func ParseCredentialsOAuth2(b []byte) (CredentialsOAuth2, error)

func (*CredentialsOAuth2) AppNameAndVersion added in v0.12.0

func (oc *CredentialsOAuth2) AppNameAndVersion() string

func (*CredentialsOAuth2) AuthCodeURL added in v0.12.0

func (oc *CredentialsOAuth2) AuthCodeURL(state string, opts map[string][]string) string

func (*CredentialsOAuth2) BasicAuthHeader added in v0.17.3

func (oc *CredentialsOAuth2) BasicAuthHeader() (string, error)

func (*CredentialsOAuth2) Config added in v0.12.0

func (oc *CredentialsOAuth2) Config() oauth2.Config

func (*CredentialsOAuth2) ConfigClientCredentials added in v0.12.0

func (oc *CredentialsOAuth2) ConfigClientCredentials() clientcredentials.Config

func (*CredentialsOAuth2) Exchange added in v0.12.0

func (oc *CredentialsOAuth2) Exchange(ctx context.Context, code string, opts map[string][]string) (*oauth2.Token, error)

func (*CredentialsOAuth2) InflateURL added in v0.12.0

func (oc *CredentialsOAuth2) InflateURL(apiURLPath string) string

func (*CredentialsOAuth2) IsGrantType added in v0.12.0

func (oc *CredentialsOAuth2) IsGrantType(grantType string) bool

func (*CredentialsOAuth2) MarshalJSON added in v0.17.0

func (oc *CredentialsOAuth2) MarshalJSON(prefix, indent string) ([]byte, error)

MarshalJSON returns JSON. It is useful for exporting creating configs to be parsed.

func (*CredentialsOAuth2) NewClient added in v0.12.0

func (oc *CredentialsOAuth2) NewClient(ctx context.Context) (*http.Client, *oauth2.Token, error)

func (*CredentialsOAuth2) NewToken added in v0.12.0

func (oc *CredentialsOAuth2) NewToken(ctx context.Context) (*oauth2.Token, error)

NewToken retrieves an `*oauth2.Token` when the requisite information is available. Note this uses `clientcredentials.Config.Token()` which doesn't always work. In This situation, use `goauth.TokenClientCredentials()` as an alternative. Note: authorization code is only supported for CLI testing purposes. In a production application, it should be done in a multi-step process to redirect the user to the authorization URL, retrieve the auth code and then `Exchange` it for a token. The `state` value is currently a randomly generated string as this should be used for testing purposes only.

func (*CredentialsOAuth2) PasswordRequestBody added in v0.12.0

func (oc *CredentialsOAuth2) PasswordRequestBody() url.Values

func (*CredentialsOAuth2) RefreshToken added in v0.17.3

func (oc *CredentialsOAuth2) RefreshToken(tok *oauth2.Token) (*oauth2.Token, []byte, error)

func (*CredentialsOAuth2) RefreshTokenSimple added in v0.17.3

func (oc *CredentialsOAuth2) RefreshTokenSimple(refreshToken string) (*oauth2.Token, []byte, error)

type CredentialsSet

type CredentialsSet struct {
	Credentials map[string]Credentials `json:"credentials,omitempty"`
}

func ReadFileCredentialsSet

func ReadFileCredentialsSet(credentialsSetFilename string, inflateEndpoints bool) (CredentialsSet, error)

func (CredentialsSet) Accounts

func (set CredentialsSet) Accounts() []string

func (CredentialsSet) Get

func (set CredentialsSet) Get(key string) (Credentials, error)

func (CredentialsSet) GetClient

func (set CredentialsSet) GetClient(ctx context.Context, key string) (*http.Client, error)

func (*CredentialsSet) Inflate

func (set *CredentialsSet) Inflate() error

func (CredentialsSet) Keys

func (set CredentialsSet) Keys() []string

func (CredentialsSet) WriteFile added in v0.17.8

func (set CredentialsSet) WriteFile(filename, prefix, indent string, perm fs.FileMode) error

type Options

type Options struct {
	CredsPath string `long:"creds" description:"Environment File Path" required:"true"`
	Account   string `long:"account" description:"Environment Variable Name"`
	Token     string `long:"token" description:"Token"`
	CLI       []bool `long:"cli" description:"CLI"`
}

Options is a struct to be used with `github.com/jessevdk/go-flags`. It can be embedded in another struct.

func (*Options) UseCLI

func (opts *Options) UseCLI() bool

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL