mirror of
https://github.com/empayre/fleet.git
synced 2024-11-07 09:18:59 +00:00
9987983cb9
* Simplifying SMTP Logic This commit breaks the test email sending into it's own service method (thus removing the capability from the API- if we want it back, we can wire up another endpoint for just that). Additionally, error wrapping is used through the new ModifyAppConfig service method to ensure that an error or failed email will always result in an error while ensuring that the submitted record always get committed (unless a serious error happens). * never wrap a nil error * use err instead of individual errors
190 lines
6.5 KiB
Go
190 lines
6.5 KiB
Go
package kolide
|
|
|
|
import (
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
// AppConfigStore contains method for saving and retrieving
|
|
// application configuration
|
|
type AppConfigStore interface {
|
|
NewAppConfig(info *AppConfig) (*AppConfig, error)
|
|
AppConfig() (*AppConfig, error)
|
|
SaveAppConfig(info *AppConfig) error
|
|
}
|
|
|
|
// AppConfigService provides methods for configuring
|
|
// the Kolide application
|
|
type AppConfigService interface {
|
|
NewAppConfig(ctx context.Context, p AppConfigPayload) (info *AppConfig, err error)
|
|
AppConfig(ctx context.Context) (info *AppConfig, err error)
|
|
ModifyAppConfig(ctx context.Context, p AppConfigPayload) (info *AppConfig, err error)
|
|
SendTestEmail(ctx context.Context, config *AppConfig) error
|
|
}
|
|
|
|
// SMTP settings names returned from API, these map to SMTPAuthType and
|
|
// SMTPAuthMethod
|
|
const (
|
|
AuthMethodNameCramMD5 = "authmethod_cram_md5"
|
|
AuthMethodNamePlain = "authmethod_plain"
|
|
AuthTypeNameUserNamePassword = "authtype_username_password"
|
|
AuthTypeNameNone = "authtype_none"
|
|
)
|
|
|
|
type SMTPAuthType int
|
|
|
|
const (
|
|
AuthTypeUserNamePassword SMTPAuthType = iota
|
|
AuthTypeNone
|
|
)
|
|
|
|
func (a SMTPAuthType) String() string {
|
|
switch a {
|
|
case AuthTypeUserNamePassword:
|
|
return AuthTypeNameUserNamePassword
|
|
case AuthTypeNone:
|
|
return AuthTypeNameNone
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
type SMTPAuthMethod int
|
|
|
|
const (
|
|
AuthMethodPlain SMTPAuthMethod = iota
|
|
AuthMethodCramMD5
|
|
)
|
|
|
|
func (m SMTPAuthMethod) String() string {
|
|
switch m {
|
|
case AuthMethodPlain:
|
|
return AuthMethodNamePlain
|
|
case AuthMethodCramMD5:
|
|
return AuthMethodNameCramMD5
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// AppConfig holds configuration about the Kolide application.
|
|
// AppConfig data can be managed by a Kolide API user.
|
|
type AppConfig struct {
|
|
ID uint
|
|
OrgName string `db:"org_name"`
|
|
OrgLogoURL string `db:"org_logo_url"`
|
|
KolideServerURL string `db:"kolide_server_url"`
|
|
// SMTPConfigured is a flag that indicates if smtp has been successfully
|
|
// tested with the settings provided by an admin user.
|
|
SMTPConfigured bool `db:"smtp_configured"`
|
|
// SMTPSenderAddress is the email address that will appear in emails sent
|
|
// from Kolide
|
|
SMTPSenderAddress string `db:"smtp_sender_address"`
|
|
// SMTPServer is the host name of the SMTP server Kolide will use to send mail
|
|
SMTPServer string `db:"smtp_server"`
|
|
// SMTPPort port SMTP server will use
|
|
SMTPPort uint `db:"smtp_port"`
|
|
// SMTPAuthenticationType type of authentication for SMTP
|
|
SMTPAuthenticationType SMTPAuthType `db:"smtp_authentication_type"`
|
|
// SMTPUserName must be provided if SMTPAuthenticationType is UserNamePassword
|
|
SMTPUserName string `db:"smtp_user_name"`
|
|
// SMTPPassword must be provided if SMTPAuthenticationType is UserNamePassword
|
|
SMTPPassword string `db:"smtp_password"`
|
|
// SMTPEnableSSLTLS whether to use SSL/TLS for SMTP
|
|
SMTPEnableTLS bool `db:"smtp_enable_ssl_tls"`
|
|
// SMTPAuthenticationMethod authentication method smtp server will use
|
|
SMTPAuthenticationMethod SMTPAuthMethod `db:"smtp_authentication_method"`
|
|
|
|
// SMTPDomain optional domain for SMTP
|
|
SMTPDomain string `db:"smtp_domain"`
|
|
// SMTPVerifySSLCerts defaults to true but can be turned off if self signed
|
|
// SSL certs are used by the SMTP server
|
|
SMTPVerifySSLCerts bool `db:"smtp_verify_ssl_certs"`
|
|
// SMTPEnableStartTLS detects of TLS is enabled on mail server and starts to use it (default true)
|
|
SMTPEnableStartTLS bool `db:"smtp_enable_start_tls"`
|
|
}
|
|
|
|
// ModifyAppConfigRequest contains application configuration information
|
|
// sent from front end and used to change app config elements.
|
|
type ModifyAppConfigRequest struct {
|
|
// TestSMTP is this is set to true, the SMTP configuration will be tested
|
|
// with the results of the test returned to caller. No config changes
|
|
// will be applied.
|
|
TestSMTP bool `json:"test_smtp"`
|
|
AppConfig AppConfig `json:"app_config"`
|
|
}
|
|
|
|
// SMTPSettings is part of the AppConfigPayload which defines the wire representation
|
|
// of the app config endpoints
|
|
type SMTPSettings struct {
|
|
// SMTPConfigured is a flag that indicates if smtp has been successfully
|
|
// tested with the settings provided by an admin user.
|
|
SMTPConfigured bool `json:"configured"`
|
|
// SMTPSenderAddress is the email address that will appear in emails sent
|
|
// from Kolide
|
|
SMTPSenderAddress string `json:"sender_address"`
|
|
// SMTPServer is the host name of the SMTP server Kolide will use to send mail
|
|
SMTPServer string `json:"server"`
|
|
// SMTPPort port SMTP server will use
|
|
SMTPPort uint `json:"port"`
|
|
// SMTPAuthenticationType type of authentication for SMTP
|
|
SMTPAuthenticationType string `json:"authentication_type"`
|
|
// SMTPUserName must be provided if SMTPAuthenticationType is UserNamePassword
|
|
SMTPUserName string `json:"user_name"`
|
|
// SMTPPassword must be provided if SMTPAuthenticationType is UserNamePassword
|
|
SMTPPassword string `json:"password"`
|
|
// SMTPEnableSSLTLS whether to use SSL/TLS for SMTP
|
|
SMTPEnableTLS bool `json:"enable_ssl_tls"`
|
|
// SMTPAuthenticationMethod authentication method smtp server will use
|
|
SMTPAuthenticationMethod string `json:"authentication_method"`
|
|
|
|
// SMTPDomain optional domain for SMTP
|
|
SMTPDomain string `json:"domain"`
|
|
// SMTPVerifySSLCerts defaults to true but can be turned off if self signed
|
|
// SSL certs are used by the SMTP server
|
|
SMTPVerifySSLCerts bool `json:"verify_ssl_certs"`
|
|
// SMTPEnableStartTLS detects of TLS is enabled on mail server and starts to use it (default true)
|
|
SMTPEnableStartTLS bool `json:"enable_start_tls"`
|
|
}
|
|
|
|
// AppConfigPayload contains request/response format of
|
|
// the AppConfig endpoints.
|
|
type AppConfigPayload struct {
|
|
OrgInfo *OrgInfo `json:"org_info"`
|
|
ServerSettings *ServerSettings `json:"server_settings"`
|
|
SMTPSettings *SMTPSettings `json:"smtp_settings"`
|
|
// SMTPTest is a flag that if set will cause the server to test email configuration
|
|
SMTPTest *bool `json:"smtp_test,omitempty"`
|
|
}
|
|
|
|
// OrgInfo contains general info about the organization using Kolide.
|
|
type OrgInfo struct {
|
|
OrgName *string `json:"org_name"`
|
|
OrgLogoURL *string `json:"org_logo_url"`
|
|
}
|
|
|
|
// ServerSettings contains general settings about the kolide App.
|
|
type ServerSettings struct {
|
|
KolideServerURL *string `json:"kolide_server_url"`
|
|
}
|
|
|
|
type OrderDirection int
|
|
|
|
const (
|
|
OrderAscending OrderDirection = iota
|
|
OrderDescending
|
|
)
|
|
|
|
// ListOptions defines options related to paging and ordering to be used when
|
|
// listing objects
|
|
type ListOptions struct {
|
|
// Which page to return (must be positive integer)
|
|
Page uint
|
|
// How many results per page (must be positive integer, 0 indicates
|
|
// unlimited)
|
|
PerPage uint
|
|
// Key to use for ordering
|
|
OrderKey string
|
|
// Direction of ordering
|
|
OrderDirection OrderDirection
|
|
}
|