Skip to content

Commit

Permalink
chore: add support for templates
Browse files Browse the repository at this point in the history
  • Loading branch information
jonas-jonas committed Dec 28, 2023
1 parent c1406fb commit 0e9d499
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 17 deletions.
2 changes: 1 addition & 1 deletion courier/template/sms/verification_code.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func (t *VerificationCodeValid) SMSBody(ctx context.Context) (string, error) {
"verification_code/valid/sms.body.gotmpl",
"verification_code/valid/sms.body*",
t.model,
"",
t.deps.CourierConfig().CourierSMSTemplatesVerificationCodeValid(ctx).Body.PlainText,
)
}

Expand Down
59 changes: 48 additions & 11 deletions driver/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ const (
ViperKeyCourierTemplatesVerificationValidEmail = "courier.templates.verification.valid.email"
ViperKeyCourierTemplatesVerificationCodeInvalidEmail = "courier.templates.verification_code.invalid.email"
ViperKeyCourierTemplatesVerificationCodeValidEmail = "courier.templates.verification_code.valid.email"
ViperKeyCourierTemplatesVerificationCodeValidSMS = "courier.templates.verification_code.valid.sms"
ViperKeyCourierDeliveryStrategy = "courier.delivery_strategy"
ViperKeyCourierHTTPRequestConfig = "courier.http.request_config"
ViperKeyCourierTemplatesLoginCodeValidEmail = "courier.templates.login_code.valid.email"
Expand Down Expand Up @@ -256,6 +257,12 @@ type (
Body *CourierEmailBodyTemplate `json:"body"`
Subject string `json:"subject"`
}
CourierSMSTemplate struct {
Body *CourierSMSTemplateBody `json:"body"`
}
CourierSMSTemplateBody struct {
PlainText string `json:"plaintext"`
}
CourierChannel struct {
ID string `json:"id" koanf:"id"`
Type string `json:"type" koanf:"type"`
Expand Down Expand Up @@ -294,6 +301,7 @@ type (
CourierTemplatesVerificationCodeValid(ctx context.Context) *CourierEmailTemplate
CourierTemplatesLoginCodeValid(ctx context.Context) *CourierEmailTemplate
CourierTemplatesRegistrationCodeValid(ctx context.Context) *CourierEmailTemplate
CourierSMSTemplatesVerificationCodeValid(ctx context.Context) *CourierSMSTemplate
CourierMessageRetries(ctx context.Context) int
CourierWorkerPullCount(ctx context.Context) int
CourierWorkerPullWait(ctx context.Context) time.Duration
Expand Down Expand Up @@ -997,6 +1005,7 @@ func (p *Config) SelfServiceFlowRegistrationRequestLifespan(ctx context.Context)
func (p *Config) SelfServiceFlowLogoutRedirectURL(ctx context.Context) *url.URL {
return p.GetProvider(ctx).RequestURIF(ViperKeySelfServiceLogoutBrowserDefaultReturnTo, p.SelfServiceBrowserDefaultReturnTo(ctx))
}

func (p *Config) CourierEmailStrategy(ctx context.Context) string {
return p.GetProvider(ctx).String(ViperKeyCourierDeliveryStrategy)
}
Expand All @@ -1019,7 +1028,7 @@ func (p *Config) CourierTemplatesRoot(ctx context.Context) string {
return p.GetProvider(ctx).StringF(ViperKeyCourierTemplatesPath, "courier/builtin/templates")
}

func (p *Config) CourierTemplatesHelper(ctx context.Context, key string) *CourierEmailTemplate {
func (p *Config) CourierEmailTemplatesHelper(ctx context.Context, key string) *CourierEmailTemplate {
courierTemplate := &CourierEmailTemplate{
Body: &CourierEmailBodyTemplate{
PlainText: "",
Expand All @@ -1045,44 +1054,72 @@ func (p *Config) CourierTemplatesHelper(ctx context.Context, key string) *Courie
return courierTemplate
}

func (p *Config) CourierSMSTemplatesHelper(ctx context.Context, key string) *CourierSMSTemplate {
courierTemplate := &CourierSMSTemplate{
Body: &CourierSMSTemplateBody{
PlainText: "",
},
}

if !p.GetProvider(ctx).Exists(key) {
return courierTemplate
}

config, err := json.Marshal(p.GetProvider(ctx).Get(key))
if err != nil {
p.l.WithError(err).Fatalf("Unable to decode values from %s.", key)
return courierTemplate

Check warning on line 1071 in driver/config/config.go

View check run for this annotation

Codecov / codecov/patch

driver/config/config.go#L1068-L1071

Added lines #L1068 - L1071 were not covered by tests
}

if err := json.Unmarshal(config, courierTemplate); err != nil {
p.l.WithError(err).Fatalf("Unable to encode values from %s.", key)
return courierTemplate

Check warning on line 1076 in driver/config/config.go

View check run for this annotation

Codecov / codecov/patch

driver/config/config.go#L1074-L1076

Added lines #L1074 - L1076 were not covered by tests
}
return courierTemplate

Check warning on line 1078 in driver/config/config.go

View check run for this annotation

Codecov / codecov/patch

driver/config/config.go#L1078

Added line #L1078 was not covered by tests
}

func (p *Config) CourierTemplatesVerificationInvalid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationInvalidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationInvalidEmail)
}

func (p *Config) CourierTemplatesVerificationValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationValidEmail)
}

func (p *Config) CourierTemplatesRecoveryInvalid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryInvalidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryInvalidEmail)
}

func (p *Config) CourierTemplatesRecoveryValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryValidEmail)
}

func (p *Config) CourierTemplatesRecoveryCodeInvalid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryCodeInvalidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryCodeInvalidEmail)
}

func (p *Config) CourierTemplatesRecoveryCodeValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryCodeValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesRecoveryCodeValidEmail)
}

func (p *Config) CourierTemplatesVerificationCodeInvalid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationCodeInvalidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationCodeInvalidEmail)
}

func (p *Config) CourierTemplatesVerificationCodeValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationCodeValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationCodeValidEmail)
}

func (p *Config) CourierSMSTemplatesVerificationCodeValid(ctx context.Context) *CourierSMSTemplate {
return p.CourierSMSTemplatesHelper(ctx, ViperKeyCourierTemplatesVerificationCodeValidEmail)
}

func (p *Config) CourierTemplatesLoginCodeValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesLoginCodeValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesLoginCodeValidEmail)
}

func (p *Config) CourierTemplatesRegistrationCodeValid(ctx context.Context) *CourierEmailTemplate {
return p.CourierTemplatesHelper(ctx, ViperKeyCourierTemplatesRegistrationCodeValidEmail)
return p.CourierEmailTemplatesHelper(ctx, ViperKeyCourierTemplatesRegistrationCodeValidEmail)
}

func (p *Config) CourierMessageRetries(ctx context.Context) int {
Expand Down
10 changes: 5 additions & 5 deletions driver/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1305,10 +1305,10 @@ func TestCourierTemplatesConfig(t *testing.T) {
Subject: "",
}

assert.Equal(t, courierTemplateConfig, c.CourierTemplatesHelper(ctx, config.ViperKeyCourierTemplatesVerificationInvalidEmail))
assert.Equal(t, courierTemplateConfig, c.CourierTemplatesHelper(ctx, config.ViperKeyCourierTemplatesVerificationValidEmail))
assert.Equal(t, courierTemplateConfig, c.CourierEmailTemplatesHelper(ctx, config.ViperKeyCourierTemplatesVerificationInvalidEmail))
assert.Equal(t, courierTemplateConfig, c.CourierEmailTemplatesHelper(ctx, config.ViperKeyCourierTemplatesVerificationValidEmail))
// this should return an empty courierEmailTemplate as the key does not exist
assert.Equal(t, courierTemplateConfig, c.CourierTemplatesHelper(ctx, "a_random_key"))
assert.Equal(t, courierTemplateConfig, c.CourierEmailTemplatesHelper(ctx, "a_random_key"))

courierTemplateConfig = &config.CourierEmailTemplate{
Body: &config.CourierEmailBodyTemplate{
Expand All @@ -1317,7 +1317,7 @@ func TestCourierTemplatesConfig(t *testing.T) {
},
Subject: "base64://QWNjb3VudCBBY2Nlc3MgQXR0ZW1wdGVk",
}
assert.Equal(t, courierTemplateConfig, c.CourierTemplatesHelper(ctx, config.ViperKeyCourierTemplatesRecoveryInvalidEmail))
assert.Equal(t, courierTemplateConfig, c.CourierEmailTemplatesHelper(ctx, config.ViperKeyCourierTemplatesRecoveryInvalidEmail))

courierTemplateConfig = &config.CourierEmailTemplate{
Body: &config.CourierEmailBodyTemplate{
Expand All @@ -1326,7 +1326,7 @@ func TestCourierTemplatesConfig(t *testing.T) {
},
Subject: "base64://UmVjb3ZlciBhY2Nlc3MgdG8geW91ciBhY2NvdW50",
}
assert.Equal(t, courierTemplateConfig, c.CourierTemplatesHelper(ctx, config.ViperKeyCourierTemplatesRecoveryValidEmail))
assert.Equal(t, courierTemplateConfig, c.CourierEmailTemplatesHelper(ctx, config.ViperKeyCourierTemplatesRecoveryValidEmail))
})
}

Expand Down
24 changes: 24 additions & 0 deletions embedx/config.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1034,12 +1034,36 @@
"properties": {
"email": {
"$ref": "#/definitions/emailCourierTemplate"
},
"sms": {
"$ref": "#/definitions/smsCourierTemplate"
}
},
"required": ["email"]
}
}
},
"smsCourierTemplate": {
"additionalProperties": false,
"type": "object",
"properties": {
"body": {
"additionalProperties": false,
"type": "object",
"properties": {
"plaintext": {
"type": "string",
"description": "A template send to the SMS provider.",
"format": "uri",
"examples": [
"file://path/to/body.plaintext.gotmpl",
"https://foo.bar.com/path/to/body.plaintext.gotmpl"
]
}
}
}
}
},
"emailCourierTemplate": {
"additionalProperties": false,
"type": "object",
Expand Down

0 comments on commit 0e9d499

Please sign in to comment.