Skip to content

Commit

Permalink
Only mix in SMTP to instance config
Browse files Browse the repository at this point in the history
  • Loading branch information
brycekahle committed Oct 10, 2017
1 parent b8d3edd commit 310d1ed
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 28 deletions.
2 changes: 1 addition & 1 deletion api/api_test.go
Expand Up @@ -20,7 +20,7 @@ func TestTraceWrapper(t *testing.T) {
config.Payment.Stripe.Enabled = true config.Payment.Stripe.Enabled = true
config.Payment.Stripe.SecretKey = "secret" config.Payment.Stripe.SecretKey = "secret"


ctx, err := WithInstanceConfig(context.Background(), globalConfig, config, "") ctx, err := WithInstanceConfig(context.Background(), globalConfig.SMTP, config, "")
require.NoError(t, err) require.NoError(t, err)
api := NewAPIWithVersion(ctx, globalConfig, nil, "") api := NewAPIWithVersion(ctx, globalConfig, nil, "")


Expand Down
6 changes: 3 additions & 3 deletions api/middleware.go
Expand Up @@ -100,20 +100,20 @@ func (api *API) loadInstanceConfig(w http.ResponseWriter, r *http.Request) (cont
} }
logEntrySetField(r, "site_url", config.SiteURL) logEntrySetField(r, "site_url", config.SiteURL)


ctx, err = WithInstanceConfig(ctx, api.config, config, instanceID) ctx, err = WithInstanceConfig(ctx, api.config.SMTP, config, instanceID)
if err != nil { if err != nil {
return nil, internalServerError("Error loading instance config").WithInternalError(err) return nil, internalServerError("Error loading instance config").WithInternalError(err)
} }


return ctx, nil return ctx, nil
} }


func WithInstanceConfig(ctx context.Context, global *conf.GlobalConfiguration, config *conf.Configuration, instanceID string) (context.Context, error) { func WithInstanceConfig(ctx context.Context, smtp conf.SMTPConfiguration, config *conf.Configuration, instanceID string) (context.Context, error) {
ctx = gcontext.WithInstanceID(ctx, instanceID) ctx = gcontext.WithInstanceID(ctx, instanceID)
ctx = gcontext.WithConfig(ctx, config) ctx = gcontext.WithConfig(ctx, config)
ctx = gcontext.WithCoupons(ctx, config) ctx = gcontext.WithCoupons(ctx, config)


mailer := mailer.NewMailer(&global.SMTP, config) mailer := mailer.NewMailer(smtp, config)
ctx = gcontext.WithMailer(ctx, mailer) ctx = gcontext.WithMailer(ctx, mailer)


store, err := assetstores.NewStore(config) store, err := assetstores.NewStore(config)
Expand Down
6 changes: 3 additions & 3 deletions api/payments_test.go
Expand Up @@ -234,7 +234,7 @@ func TestPaymentsRefund(t *testing.T) {


globalConfig := new(conf.GlobalConfiguration) globalConfig := new(conf.GlobalConfiguration)
provider := &memProvider{name: payments.StripeProvider} provider := &memProvider{name: payments.StripeProvider}
ctx, err := WithInstanceConfig(context.Background(), globalConfig, test.Config, "") ctx, err := WithInstanceConfig(context.Background(), globalConfig.SMTP, test.Config, "")
require.NoError(t, err) require.NoError(t, err)
ctx = gcontext.WithPaymentProviders(ctx, map[string]payments.Provider{payments.StripeProvider: provider}) ctx = gcontext.WithPaymentProviders(ctx, map[string]payments.Provider{payments.StripeProvider: provider})


Expand Down Expand Up @@ -465,7 +465,7 @@ func TestPaymentPreauthorize(t *testing.T) {
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")


globalConfig := new(conf.GlobalConfiguration) globalConfig := new(conf.GlobalConfiguration)
ctx, err := WithInstanceConfig(context.Background(), globalConfig, test.Config, "") ctx, err := WithInstanceConfig(context.Background(), globalConfig.SMTP, test.Config, "")
require.NoError(t, err) require.NoError(t, err)
NewAPIWithVersion(ctx, test.GlobalConfig, test.DB, "").handler.ServeHTTP(recorder, req) NewAPIWithVersion(ctx, test.GlobalConfig, test.DB, "").handler.ServeHTTP(recorder, req)


Expand Down Expand Up @@ -506,7 +506,7 @@ func TestPaymentPreauthorize(t *testing.T) {
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")


globalConfig := new(conf.GlobalConfiguration) globalConfig := new(conf.GlobalConfiguration)
ctx, err := WithInstanceConfig(context.Background(), globalConfig, test.Config, "") ctx, err := WithInstanceConfig(context.Background(), globalConfig.SMTP, test.Config, "")
require.NoError(t, err) require.NoError(t, err)
NewAPIWithVersion(ctx, test.GlobalConfig, test.DB, "").handler.ServeHTTP(recorder, req) NewAPIWithVersion(ctx, test.GlobalConfig, test.DB, "").handler.ServeHTTP(recorder, req)


Expand Down
2 changes: 1 addition & 1 deletion api/utils_test.go
Expand Up @@ -349,7 +349,7 @@ func (r *RouteTest) TestEndpoint(method string, url string, body io.Reader, toke
require.NoError(r.T, signHTTPRequest(req, token, r.Config.JWT.Secret)) require.NoError(r.T, signHTTPRequest(req, token, r.Config.JWT.Secret))
} }
globalConfig := new(conf.GlobalConfiguration) globalConfig := new(conf.GlobalConfiguration)
ctx, err := WithInstanceConfig(context.Background(), globalConfig, r.Config, "") ctx, err := WithInstanceConfig(context.Background(), globalConfig.SMTP, r.Config, "")
require.NoError(r.T, err) require.NoError(r.T, err)
NewAPIWithVersion(ctx, r.GlobalConfig, r.DB, "").handler.ServeHTTP(recorder, req) NewAPIWithVersion(ctx, r.GlobalConfig, r.DB, "").handler.ServeHTTP(recorder, req)


Expand Down
2 changes: 1 addition & 1 deletion cmd/serve_cmd.go
Expand Up @@ -32,7 +32,7 @@ func serve(globalConfig *conf.GlobalConfiguration, config *conf.Configuration) {
} }
defer bgDB.Close() defer bgDB.Close()


ctx, err := api.WithInstanceConfig(context.Background(), globalConfig, config, "") ctx, err := api.WithInstanceConfig(context.Background(), globalConfig.SMTP, config, "")
if err != nil { if err != nil {
logrus.Fatalf("Error loading instance config: %+v", err) logrus.Fatalf("Error loading instance config: %+v", err)
} }
Expand Down
17 changes: 7 additions & 10 deletions conf/configuration.go
Expand Up @@ -2,7 +2,6 @@ package conf


import ( import (
"os" "os"
"time"


"github.com/joho/godotenv" "github.com/joho/godotenv"
"github.com/kelseyhightower/envconfig" "github.com/kelseyhightower/envconfig"
Expand All @@ -25,12 +24,11 @@ type JWTConfiguration struct {
} }


type SMTPConfiguration struct { type SMTPConfiguration struct {
MaxFrequency time.Duration `json:"max_frequency" split_words:"true"` Host string `json:"host"`
Host string `json:"host"` Port int `json:"port" default:"587"`
Port int `json:"port" default:"587"` User string `json:"user"`
User string `json:"user"` Pass string `json:"pass"`
Pass string `json:"pass"` AdminEmail string `json:"admin_email" split_words:"true"`
AdminEmail string `json:"admin_email" split_words:"true"`
} }


// GlobalConfiguration holds all the global configuration for gocommerce // GlobalConfiguration holds all the global configuration for gocommerce
Expand Down Expand Up @@ -61,9 +59,8 @@ type Configuration struct {
SMTP SMTPConfiguration `json:"smtp"` SMTP SMTPConfiguration `json:"smtp"`


Mailer struct { Mailer struct {
AdminEmail string `json:"admin_email" split_words:"true"` Subjects EmailContentConfiguration `json:"subjects"`
Subjects EmailContentConfiguration `json:"subjects"` Templates EmailContentConfiguration `json:"templates"`
Templates EmailContentConfiguration `json:"templates"`
} `json:"mailer"` } `json:"mailer"`


Payment struct { Payment struct {
Expand Down
8 changes: 2 additions & 6 deletions mailer/mailer.go
Expand Up @@ -28,7 +28,7 @@ type MailSubjects struct {
} }


// NewMailer returns a new authlify mailer // NewMailer returns a new authlify mailer
func NewMailer(smtp *conf.SMTPConfiguration, instanceConfig *conf.Configuration) Mailer { func NewMailer(smtp conf.SMTPConfiguration, instanceConfig *conf.Configuration) Mailer {
if smtp.Host == "" && instanceConfig.SMTP.Host == "" { if smtp.Host == "" && instanceConfig.SMTP.Host == "" {
return newNoopMailer() return newNoopMailer()
} }
Expand All @@ -53,10 +53,6 @@ func NewMailer(smtp *conf.SMTPConfiguration, instanceConfig *conf.Configuration)
if smtpAdminEmail == "" { if smtpAdminEmail == "" {
smtpAdminEmail = smtp.AdminEmail smtpAdminEmail = smtp.AdminEmail
} }
smtpMaxFrequency := instanceConfig.SMTP.MaxFrequency
if smtpMaxFrequency == 0 {
smtpMaxFrequency = smtp.MaxFrequency
}


return &mailer{ return &mailer{
Config: instanceConfig, Config: instanceConfig,
Expand Down Expand Up @@ -140,7 +136,7 @@ const defaultReceivedTemplate = `<h2>Order Received From {{ .Order.Email }}</h2>
// OrderReceivedMail sends a notification to the shop admin // OrderReceivedMail sends a notification to the shop admin
func (m *mailer) OrderReceivedMail(transaction *models.Transaction) error { func (m *mailer) OrderReceivedMail(transaction *models.Transaction) error {
return m.TemplateMailer.Mail( return m.TemplateMailer.Mail(
m.Config.Mailer.AdminEmail, m.TemplateMailer.From,
withDefault(m.Config.Mailer.Subjects.OrderReceived, "Order Received From {{ .Order.Email }}"), withDefault(m.Config.Mailer.Subjects.OrderReceived, "Order Received From {{ .Order.Email }}"),
m.Config.Mailer.Templates.OrderReceived, m.Config.Mailer.Templates.OrderReceived,
defaultReceivedTemplate, defaultReceivedTemplate,
Expand Down
6 changes: 3 additions & 3 deletions mailer/mailer_test.go
Expand Up @@ -8,19 +8,19 @@ import (
) )


func TestNoopMailer(t *testing.T) { func TestNoopMailer(t *testing.T) {
smtp := &conf.SMTPConfiguration{} smtp := conf.SMTPConfiguration{}
conf := &conf.Configuration{} conf := &conf.Configuration{}
m := NewMailer(smtp, conf) m := NewMailer(smtp, conf)
assert.IsType(t, &noopMailer{}, m) assert.IsType(t, &noopMailer{}, m)
} }


func TestTemplateMailer(t *testing.T) { func TestTemplateMailer(t *testing.T) {
smtp := &conf.SMTPConfiguration{ smtp := conf.SMTPConfiguration{
Host: "localhost", Host: "localhost",
Port: 25, Port: 25,
} }
conf := &conf.Configuration{} conf := &conf.Configuration{}
conf.Mailer.AdminEmail = "test@example.com" conf.SMTP.AdminEmail = "test@example.com"
m := NewMailer(smtp, conf) m := NewMailer(smtp, conf)
assert.IsType(t, &mailer{}, m) assert.IsType(t, &mailer{}, m)
} }

0 comments on commit 310d1ed

Please sign in to comment.