2023-03-12 16:00:57 +01:00
|
|
|
// GoToSocial
|
|
|
|
// Copyright (C) GoToSocial Authors admin@gotosocial.org
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU Affero General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
2021-10-31 15:46:23 +01:00
|
|
|
|
|
|
|
package email
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
2022-01-31 11:46:20 +01:00
|
|
|
"text/template"
|
2021-10-31 15:46:23 +01:00
|
|
|
|
2021-12-07 13:31:39 +01:00
|
|
|
"github.com/superseriousbusiness/gotosocial/internal/config"
|
2022-07-19 10:47:55 +02:00
|
|
|
"github.com/superseriousbusiness/gotosocial/internal/log"
|
2021-10-31 15:46:23 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
// NewNoopSender returns a no-op email sender that will just execute the given sendCallback
|
|
|
|
// every time it would otherwise send an email to the given toAddress with the given message value.
|
|
|
|
//
|
|
|
|
// Passing a nil function is also acceptable, in which case the send functions will just return nil.
|
2021-12-07 13:31:39 +01:00
|
|
|
func NewNoopSender(sendCallback func(toAddress string, message string)) (Sender, error) {
|
2022-05-30 14:41:24 +02:00
|
|
|
templateBaseDir := config.GetWebTemplateBaseDir()
|
2021-12-07 13:31:39 +01:00
|
|
|
|
2021-10-31 15:46:23 +01:00
|
|
|
t, err := loadTemplates(templateBaseDir)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return &noopSender{
|
|
|
|
sendCallback: sendCallback,
|
|
|
|
template: t,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type noopSender struct {
|
|
|
|
sendCallback func(toAddress string, message string)
|
|
|
|
template *template.Template
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *noopSender) SendConfirmEmail(toAddress string, data ConfirmData) error {
|
2023-03-19 13:11:46 +01:00
|
|
|
return s.sendTemplate(confirmTemplate, confirmSubject, data, toAddress)
|
2021-10-31 15:46:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *noopSender) SendResetEmail(toAddress string, data ResetData) error {
|
2023-03-19 13:11:46 +01:00
|
|
|
return s.sendTemplate(resetTemplate, resetSubject, data, toAddress)
|
|
|
|
}
|
2021-10-31 15:46:23 +01:00
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
func (s *noopSender) SendTestEmail(toAddress string, data TestData) error {
|
|
|
|
return s.sendTemplate(testTemplate, testSubject, data, toAddress)
|
|
|
|
}
|
2021-10-31 15:46:23 +01:00
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
func (s *noopSender) SendNewReportEmail(toAddresses []string, data NewReportData) error {
|
|
|
|
return s.sendTemplate(newReportTemplate, newReportSubject, data, toAddresses...)
|
|
|
|
}
|
2021-10-31 15:46:23 +01:00
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
func (s *noopSender) SendReportClosedEmail(toAddress string, data ReportClosedData) error {
|
|
|
|
return s.sendTemplate(reportClosedTemplate, reportClosedSubject, data, toAddress)
|
2021-10-31 15:46:23 +01:00
|
|
|
}
|
2023-03-14 17:11:04 +01:00
|
|
|
|
2024-04-11 11:45:53 +02:00
|
|
|
func (s *noopSender) SendNewSignupEmail(toAddresses []string, data NewSignupData) error {
|
|
|
|
return s.sendTemplate(newSignupTemplate, newSignupSubject, data, toAddresses...)
|
|
|
|
}
|
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
func (s *noopSender) sendTemplate(template string, subject string, data any, toAddresses ...string) error {
|
2023-03-14 17:11:04 +01:00
|
|
|
buf := &bytes.Buffer{}
|
2023-03-19 13:11:46 +01:00
|
|
|
if err := s.template.ExecuteTemplate(buf, template, data); err != nil {
|
2023-03-14 17:11:04 +01:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
msg, err := assembleMessage(subject, buf.String(), "test@example.org", toAddresses...)
|
2023-03-14 17:11:04 +01:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2023-03-19 13:11:46 +01:00
|
|
|
log.Tracef(nil, "NOT SENDING email to %s with contents: %s", toAddresses, msg)
|
2023-03-14 17:11:04 +01:00
|
|
|
|
|
|
|
if s.sendCallback != nil {
|
2023-03-19 13:11:46 +01:00
|
|
|
s.sendCallback(toAddresses[0], string(msg))
|
2023-03-14 17:11:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|