Documentation
¶
Index ¶
- Constants
- Variables
- func IsAlreadyExistsError(err error) bool
- func IsNotExistError(err error) bool
- type APIClient
- type APIClientMock
- func (mock *APIClientMock) CreateAPIKeyForSubUser(username string, scopes []string) (*APIKey, error)
- func (mock *APIClientMock) CreateAPIKeyForSubUserCalls() []struct{ ... }
- func (mock *APIClientMock) CreateSubUser(id string, email string, password string, ips []string) (*SubUser, error)
- func (mock *APIClientMock) CreateSubUserCalls() []struct{ ... }
- func (mock *APIClientMock) DeleteAPIKeyForSubUser(id string, keyName string) error
- func (mock *APIClientMock) DeleteAPIKeyForSubUserCalls() []struct{ ... }
- func (mock *APIClientMock) DeleteSubUser(username string) error
- func (mock *APIClientMock) DeleteSubUserCalls() []struct{ ... }
- func (mock *APIClientMock) GetAPIKeysForSubUser(username string) ([]*APIKey, error)
- func (mock *APIClientMock) GetAPIKeysForSubUserCalls() []struct{ ... }
- func (mock *APIClientMock) GetSubUserByUsername(username string) (*SubUser, error)
- func (mock *APIClientMock) GetSubUserByUsernameCalls() []struct{ ... }
- func (mock *APIClientMock) ListIPAddresses() ([]*IPAddress, error)
- func (mock *APIClientMock) ListIPAddressesCalls() []struct{}
- func (mock *APIClientMock) ListSubUsers(query map[string]string) ([]*SubUser, error)
- func (mock *APIClientMock) ListSubUsersCalls() []struct{ ... }
- type APIKey
- type AlreadyExistsError
- type BackendAPIClient
- func (c *BackendAPIClient) CreateAPIKeyForSubUser(username string, scopes []string) (*APIKey, error)
- func (c *BackendAPIClient) CreateSubUser(id, email, password string, ips []string) (*SubUser, error)
- func (c *BackendAPIClient) DeleteAPIKeyForSubUser(keyID, keyName string) error
- func (c *BackendAPIClient) DeleteSubUser(username string) error
- func (c *BackendAPIClient) GetAPIKeysForSubUser(username string) ([]*APIKey, error)
- func (c *BackendAPIClient) GetSubUserByUsername(username string) (*SubUser, error)
- func (c *BackendAPIClient) ListIPAddresses() ([]*IPAddress, error)
- func (c *BackendAPIClient) ListSubUsers(query map[string]string) ([]*SubUser, error)
- type BackendRESTClient
- type Client
- type IPAddress
- type NotExistError
- type RESTClient
- type RESTClientMock
- func (mock *RESTClientMock) BuildRequest(endpoint string, method rest.Method) rest.Request
- func (mock *RESTClientMock) BuildRequestCalls() []struct{ ... }
- func (mock *RESTClientMock) InvokeRequest(request rest.Request) (*rest.Response, error)
- func (mock *RESTClientMock) InvokeRequestCalls() []struct{ ... }
- type SubUser
Constants ¶
const ( //ProviderName Standardised name of the SendGrid provider ProviderName = "sendgrid" //EnvAPIKey Name of the env var to retrieve the SendGrid API key EnvAPIKey = "SENDGRID_API_KEY" //APIHost SendGrid API default host APIHost = "https://api.sendgrid.com" //APIRouteSubUsers SendGrid v3 API endpoint for sub user management APIRouteSubUsers = "/v3/subusers" //APIRouteAPIKeys SendGrid v3 API endpoint for api key management APIRouteAPIKeys = "/v3/api_keys" //APIRouteIPAddresses SendGrid v3 API endpoint for ip address management APIRouteIPAddresses = "/v3/ips" //HeaderOnBehalfOf SendGrid v3 header for declaring an action is on behalf of a sub user HeaderOnBehalfOf = "on-behalf-of" //LogFieldAPIClient Logging field name for a description of the API client LogFieldAPIClient = "sendgrid_service_api_client" //ConnectionDetailsHost Default SendGrid host ConnectionDetailsHost = "smtp.sendgrid.net" //ConnectionDetailsPort Default SendGrid port ConnectionDetailsPort = 587 //ConnectionDetailsTLS Default SendGrid TLS setting ConnectionDetailsTLS = true //ConnectionDetailsUsername Default SendGrid SMTP auth username ConnectionDetailsUsername = "apikey" )
Variables ¶
var ( //DefaultAPIKeyScopes The default API scopes given to the generated SendGrid API key DefaultAPIKeyScopes = []string{"mail.send"} )
Functions ¶
func IsAlreadyExistsError ¶
IsAlreadyExistsError Compare check for AlreadyExistsError
func IsNotExistError ¶
IsNotExistError Compare check for NotExistError
Types ¶
type APIClient ¶
type APIClient interface {
// ip addresses
ListIPAddresses() ([]*IPAddress, error)
// api keys
GetAPIKeysForSubUser(username string) ([]*APIKey, error)
CreateAPIKeyForSubUser(username string, scopes []string) (*APIKey, error)
DeleteAPIKeyForSubUser(id, keyName string) error
// sub users
CreateSubUser(id, email, password string, ips []string) (*SubUser, error)
DeleteSubUser(username string) error
ListSubUsers(query map[string]string) ([]*SubUser, error)
GetSubUserByUsername(username string) (*SubUser, error)
}
APIClient SendGrid client with utility functions for interacting with resources
type APIClientMock ¶
type APIClientMock struct {
// CreateAPIKeyForSubUserFunc mocks the CreateAPIKeyForSubUser method.
CreateAPIKeyForSubUserFunc func(username string, scopes []string) (*APIKey, error)
// CreateSubUserFunc mocks the CreateSubUser method.
CreateSubUserFunc func(id string, email string, password string, ips []string) (*SubUser, error)
// DeleteAPIKeyForSubUserFunc mocks the DeleteAPIKeyForSubUser method.
DeleteAPIKeyForSubUserFunc func(id string, keyName string) error
// DeleteSubUserFunc mocks the DeleteSubUser method.
DeleteSubUserFunc func(username string) error
// GetAPIKeysForSubUserFunc mocks the GetAPIKeysForSubUser method.
GetAPIKeysForSubUserFunc func(username string) ([]*APIKey, error)
// GetSubUserByUsernameFunc mocks the GetSubUserByUsername method.
GetSubUserByUsernameFunc func(username string) (*SubUser, error)
// ListIPAddressesFunc mocks the ListIPAddresses method.
ListIPAddressesFunc func() ([]*IPAddress, error)
// ListSubUsersFunc mocks the ListSubUsers method.
ListSubUsersFunc func(query map[string]string) ([]*SubUser, error)
// contains filtered or unexported fields
}
APIClientMock is a mock implementation of APIClient.
func TestSomethingThatUsesAPIClient(t *testing.T) {
// make and configure a mocked APIClient
mockedAPIClient := &APIClientMock{
CreateAPIKeyForSubUserFunc: func(username string, scopes []string) (*APIKey, error) {
panic("mock out the CreateAPIKeyForSubUser method")
},
CreateSubUserFunc: func(id string, email string, password string, ips []string) (*SubUser, error) {
panic("mock out the CreateSubUser method")
},
DeleteAPIKeyForSubUserFunc: func(id string, keyName string) error {
panic("mock out the DeleteAPIKeyForSubUser method")
},
DeleteSubUserFunc: func(username string) error {
panic("mock out the DeleteSubUser method")
},
GetAPIKeysForSubUserFunc: func(username string) ([]*APIKey, error) {
panic("mock out the GetAPIKeysForSubUser method")
},
GetSubUserByUsernameFunc: func(username string) (*SubUser, error) {
panic("mock out the GetSubUserByUsername method")
},
ListIPAddressesFunc: func() ([]*IPAddress, error) {
panic("mock out the ListIPAddresses method")
},
ListSubUsersFunc: func(query map[string]string) ([]*SubUser, error) {
panic("mock out the ListSubUsers method")
},
}
// use mockedAPIClient in code that requires APIClient
// and then make assertions.
}
func (*APIClientMock) CreateAPIKeyForSubUser ¶
func (mock *APIClientMock) CreateAPIKeyForSubUser(username string, scopes []string) (*APIKey, error)
CreateAPIKeyForSubUser calls CreateAPIKeyForSubUserFunc.
func (*APIClientMock) CreateAPIKeyForSubUserCalls ¶
func (mock *APIClientMock) CreateAPIKeyForSubUserCalls() []struct { Username string Scopes []string }
CreateAPIKeyForSubUserCalls gets all the calls that were made to CreateAPIKeyForSubUser. Check the length with:
len(mockedAPIClient.CreateAPIKeyForSubUserCalls())
func (*APIClientMock) CreateSubUser ¶
func (mock *APIClientMock) CreateSubUser(id string, email string, password string, ips []string) (*SubUser, error)
CreateSubUser calls CreateSubUserFunc.
func (*APIClientMock) CreateSubUserCalls ¶
func (mock *APIClientMock) CreateSubUserCalls() []struct { ID string Email string Password string Ips []string }
CreateSubUserCalls gets all the calls that were made to CreateSubUser. Check the length with:
len(mockedAPIClient.CreateSubUserCalls())
func (*APIClientMock) DeleteAPIKeyForSubUser ¶
func (mock *APIClientMock) DeleteAPIKeyForSubUser(id string, keyName string) error
DeleteAPIKeyForSubUser calls DeleteAPIKeyForSubUserFunc.
func (*APIClientMock) DeleteAPIKeyForSubUserCalls ¶
func (mock *APIClientMock) DeleteAPIKeyForSubUserCalls() []struct { ID string KeyName string }
DeleteAPIKeyForSubUserCalls gets all the calls that were made to DeleteAPIKeyForSubUser. Check the length with:
len(mockedAPIClient.DeleteAPIKeyForSubUserCalls())
func (*APIClientMock) DeleteSubUser ¶
func (mock *APIClientMock) DeleteSubUser(username string) error
DeleteSubUser calls DeleteSubUserFunc.
func (*APIClientMock) DeleteSubUserCalls ¶
func (mock *APIClientMock) DeleteSubUserCalls() []struct { Username string }
DeleteSubUserCalls gets all the calls that were made to DeleteSubUser. Check the length with:
len(mockedAPIClient.DeleteSubUserCalls())
func (*APIClientMock) GetAPIKeysForSubUser ¶
func (mock *APIClientMock) GetAPIKeysForSubUser(username string) ([]*APIKey, error)
GetAPIKeysForSubUser calls GetAPIKeysForSubUserFunc.
func (*APIClientMock) GetAPIKeysForSubUserCalls ¶
func (mock *APIClientMock) GetAPIKeysForSubUserCalls() []struct { Username string }
GetAPIKeysForSubUserCalls gets all the calls that were made to GetAPIKeysForSubUser. Check the length with:
len(mockedAPIClient.GetAPIKeysForSubUserCalls())
func (*APIClientMock) GetSubUserByUsername ¶
func (mock *APIClientMock) GetSubUserByUsername(username string) (*SubUser, error)
GetSubUserByUsername calls GetSubUserByUsernameFunc.
func (*APIClientMock) GetSubUserByUsernameCalls ¶
func (mock *APIClientMock) GetSubUserByUsernameCalls() []struct { Username string }
GetSubUserByUsernameCalls gets all the calls that were made to GetSubUserByUsername. Check the length with:
len(mockedAPIClient.GetSubUserByUsernameCalls())
func (*APIClientMock) ListIPAddresses ¶
func (mock *APIClientMock) ListIPAddresses() ([]*IPAddress, error)
ListIPAddresses calls ListIPAddressesFunc.
func (*APIClientMock) ListIPAddressesCalls ¶
func (mock *APIClientMock) ListIPAddressesCalls() []struct { }
ListIPAddressesCalls gets all the calls that were made to ListIPAddresses. Check the length with:
len(mockedAPIClient.ListIPAddressesCalls())
func (*APIClientMock) ListSubUsers ¶
func (mock *APIClientMock) ListSubUsers(query map[string]string) ([]*SubUser, error)
ListSubUsers calls ListSubUsersFunc.
func (*APIClientMock) ListSubUsersCalls ¶
func (mock *APIClientMock) ListSubUsersCalls() []struct { Query map[string]string }
ListSubUsersCalls gets all the calls that were made to ListSubUsers. Check the length with:
len(mockedAPIClient.ListSubUsersCalls())
type APIKey ¶
type APIKey struct {
ID string `json:"api_key_id"`
Key string `json:"api_key"`
Name string `json:"name"`
Scopes []string `json:"scopes"`
}
APIKey A SendGrid API key, from https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/index.html
func FindAPIKeyByName ¶
FindAPIKeyByName checks a list of APIKeys for a key with a given name
type AlreadyExistsError ¶
type AlreadyExistsError struct {
Message string
}
AlreadyExistsError Error to indicate an API key already exists
func (*AlreadyExistsError) Error ¶
func (e *AlreadyExistsError) Error() string
Error String representation of error
type BackendAPIClient ¶
type BackendAPIClient struct {
// contains filtered or unexported fields
}
BackendAPIClient Light wrapper around the default SendGrid library to allow for mocking
func NewBackendAPIClient ¶
func NewBackendAPIClient(restClient RESTClient, logger *logrus.Entry) *BackendAPIClient
NewBackendAPIClient Create a new BackendAPIClient with default logger labels
func (*BackendAPIClient) CreateAPIKeyForSubUser ¶
func (c *BackendAPIClient) CreateAPIKeyForSubUser(username string, scopes []string) (*APIKey, error)
CreateAPIKeyForSubUser Create API key on behalf of a sub user
func (*BackendAPIClient) CreateSubUser ¶
func (c *BackendAPIClient) CreateSubUser(id, email, password string, ips []string) (*SubUser, error)
CreateSubUser Create sub user
func (*BackendAPIClient) DeleteAPIKeyForSubUser ¶
func (c *BackendAPIClient) DeleteAPIKeyForSubUser(keyID, keyName string) error
DeleteAPIKeyForSubUser Delete api key of user with supplied username
func (*BackendAPIClient) DeleteSubUser ¶
func (c *BackendAPIClient) DeleteSubUser(username string) error
DeleteSubUser Delete sub user by username
func (*BackendAPIClient) GetAPIKeysForSubUser ¶
func (c *BackendAPIClient) GetAPIKeysForSubUser(username string) ([]*APIKey, error)
GetAPIKeysForSubUser Get API keys on behalf of a sub user
func (*BackendAPIClient) GetSubUserByUsername ¶
func (c *BackendAPIClient) GetSubUserByUsername(username string) (*SubUser, error)
GetSubUserByUsername Get sub user of current authenticated user by username
func (*BackendAPIClient) ListIPAddresses ¶
func (c *BackendAPIClient) ListIPAddresses() ([]*IPAddress, error)
ListIPAddresses List the IP Addresses for the authenticated user
func (*BackendAPIClient) ListSubUsers ¶
func (c *BackendAPIClient) ListSubUsers(query map[string]string) ([]*SubUser, error)
ListSubUsers List all sub users for current authenticated user
type BackendRESTClient ¶
type BackendRESTClient struct {
// contains filtered or unexported fields
}
BackendRESTClient Thin wrapper around the SendGrid library
func NewBackendRESTClient ¶
func NewBackendRESTClient(apiHost, apiKey string, logger *logrus.Entry) *BackendRESTClient
NewBackendRESTClient Create a new BackendAPIClient with default logger labels
func (*BackendRESTClient) BuildRequest ¶
BuildRequest Create a REST request that can be sent through the SendGrid API
func (*BackendRESTClient) InvokeRequest ¶
InvokeRequest Invoke a REST request against the SendGrid API
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client Client used to generate new API keys for OpenShift clusters, abstracting sub user creation
func NewClient ¶
func NewClient(sendgridClient APIClient, apiKeyScopes []string, passGen smtpdetails.PasswordGenerator, logger *logrus.Entry) (*Client, error)
NewClient Create new Client
func NewDefaultClient ¶
NewDefaultClient Create new client using API key from SENDGRID_API_KEY env var and the default SendGrid API host.
func (*Client) Create ¶
func (c *Client) Create(id string) (*smtpdetails.SMTPDetails, error)
Create Generate new SendGrid sub user and API key for a cluster with it's ID
func (*Client) Delete ¶
Delete Delete the SendGrid sub user associated with a cluster by the cluster ID
func (*Client) Get ¶
func (c *Client) Get(id string) (*smtpdetails.SMTPDetails, error)
Get Retrieve the name of the SendGrid API key associated with an OpenShift cluster by it's ID
func (*Client) Refresh ¶
func (c *Client) Refresh(id string) (*smtpdetails.SMTPDetails, error)
Refresh deletes the API key associated with a subuser and generates a new key
type IPAddress ¶
type IPAddress struct {
IP string `json:"ip"`
Warmup bool `json:"warmup"`
StartDate int `json:"start_date"`
SubUsers []string `json:"subusers"`
RDNS string `json:"rdns"`
Pools []string `json:"pools"`
}
IPAddress A SendGrid IP address, from https://sendgrid.com/docs/API_Reference/Web_API_v3/IP_Management/ip_addresses.html
type NotExistError ¶
type NotExistError struct {
Message string
}
NotExistError Error to indicate an API key does not exist
func (*NotExistError) Error ¶
func (e *NotExistError) Error() string
Error String representation of error
type RESTClient ¶
type RESTClient interface {
BuildRequest(endpoint string, method rest.Method) rest.Request
InvokeRequest(request rest.Request) (*rest.Response, error)
}
RESTClient Thin wrapper around the SendGrid package
type RESTClientMock ¶
type RESTClientMock struct {
// BuildRequestFunc mocks the BuildRequest method.
BuildRequestFunc func(endpoint string, method rest.Method) rest.Request
// InvokeRequestFunc mocks the InvokeRequest method.
InvokeRequestFunc func(request rest.Request) (*rest.Response, error)
// contains filtered or unexported fields
}
RESTClientMock is a mock implementation of RESTClient.
func TestSomethingThatUsesRESTClient(t *testing.T) {
// make and configure a mocked RESTClient
mockedRESTClient := &RESTClientMock{
BuildRequestFunc: func(endpoint string, method rest.Method) rest.Request {
panic("mock out the BuildRequest method")
},
InvokeRequestFunc: func(request rest.Request) (*rest.Response, error) {
panic("mock out the InvokeRequest method")
},
}
// use mockedRESTClient in code that requires RESTClient
// and then make assertions.
}
func (*RESTClientMock) BuildRequest ¶
BuildRequest calls BuildRequestFunc.
func (*RESTClientMock) BuildRequestCalls ¶
func (mock *RESTClientMock) BuildRequestCalls() []struct { Endpoint string Method rest.Method }
BuildRequestCalls gets all the calls that were made to BuildRequest. Check the length with:
len(mockedRESTClient.BuildRequestCalls())
func (*RESTClientMock) InvokeRequest ¶
InvokeRequest calls InvokeRequestFunc.
func (*RESTClientMock) InvokeRequestCalls ¶
func (mock *RESTClientMock) InvokeRequestCalls() []struct { Request rest.Request }
InvokeRequestCalls gets all the calls that were made to InvokeRequest. Check the length with:
len(mockedRESTClient.InvokeRequestCalls())