diff --git a/internal/api/phone.go b/internal/api/phone.go index 77f46ca294..974a554314 100644 --- a/internal/api/phone.go +++ b/internal/api/phone.go @@ -167,5 +167,10 @@ func generateSMSFromTemplate(SMSTemplate *template.Template, otp string) (string }{Code: otp}); err != nil { return "", err } - return message.String(), nil + + renderedMessage := message.String() + renderedMessage = strings.ReplaceAll(renderedMessage, "\\r\\n", "\r\n") + renderedMessage = strings.ReplaceAll(renderedMessage, "\\n", "\n") + + return renderedMessage, nil } diff --git a/internal/api/phone_test.go b/internal/api/phone_test.go index dc9180feab..eb47b3febb 100644 --- a/internal/api/phone_test.go +++ b/internal/api/phone_test.go @@ -8,6 +8,7 @@ import ( "net/http/httptest" "strings" "testing" + "text/template" "time" "github.com/stretchr/testify/assert" @@ -442,3 +443,26 @@ func (ts *PhoneTestSuite) TestSendSMSHook() { require.NoError(ts.T(), ts.API.db.RawQuery(deleteJobsTableSQL).Exec()) } + +func TestGenerateSMSFromTemplateWithEscapedNewline(t *testing.T) { + tmpl, err := template.New("").Parse(`Your code is {{ .Code }}\n@app.com #{{ .Code }}`) + require.NoError(t, err) + + message, err := generateSMSFromTemplate(tmpl, "123456") + require.NoError(t, err) + + expected := "Your code is 123456\n@app.com #123456" + require.Equal(t, expected, message) +} + +func TestGenerateSMSFromTemplateWithLiteralNewline(t *testing.T) { + tmpl, err := template.New("").Parse(`Your code is {{ .Code }} +@app.com #{{ .Code }}`) + require.NoError(t, err) + + message, err := generateSMSFromTemplate(tmpl, "123456") + require.NoError(t, err) + + expected := "Your code is 123456\n@app.com #123456" + require.Equal(t, expected, message) +}