summaryrefslogtreecommitdiff
path: root/internal/processing/workers/surfaceemail.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-04-11 11:45:53 +0200
committerLibravatar GitHub <noreply@github.com>2024-04-11 11:45:53 +0200
commit9fb8a78f91adffd5f4d28df1270e407c25a7a16e (patch)
treed68200744e28d07e75a52bb0c9f6593c86a38a91 /internal/processing/workers/surfaceemail.go
parent[performance] massively improved ActivityPub delivery worker efficiency (#2812) (diff)
downloadgotosocial-9fb8a78f91adffd5f4d28df1270e407c25a7a16e.tar.xz
[feature] New user sign-up via web page (#2796)
* [feature] User sign-up form and admin notifs * add chosen + filtered languages to migration * remove stray comment * chosen languages schmosen schmanguages * proper error on local account missing
Diffstat (limited to 'internal/processing/workers/surfaceemail.go')
-rw-r--r--internal/processing/workers/surfaceemail.go118
1 files changed, 81 insertions, 37 deletions
diff --git a/internal/processing/workers/surfaceemail.go b/internal/processing/workers/surfaceemail.go
index a6c97f48f..c00b22c86 100644
--- a/internal/processing/workers/surfaceemail.go
+++ b/internal/processing/workers/surfaceemail.go
@@ -31,41 +31,9 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/uris"
)
-func (s *surface) emailReportOpened(ctx context.Context, report *gtsmodel.Report) error {
- instance, err := s.state.DB.GetInstance(ctx, config.GetHost())
- if err != nil {
- return gtserror.Newf("error getting instance: %w", err)
- }
-
- toAddresses, err := s.state.DB.GetInstanceModeratorAddresses(ctx)
- if err != nil {
- if errors.Is(err, db.ErrNoEntries) {
- // No registered moderator addresses.
- return nil
- }
- return gtserror.Newf("error getting instance moderator addresses: %w", err)
- }
-
- if err := s.state.DB.PopulateReport(ctx, report); err != nil {
- return gtserror.Newf("error populating report: %w", err)
- }
-
- reportData := email.NewReportData{
- InstanceURL: instance.URI,
- InstanceName: instance.Title,
- ReportURL: instance.URI + "/settings/admin/reports/" + report.ID,
- ReportDomain: report.Account.Domain,
- ReportTargetDomain: report.TargetAccount.Domain,
- }
-
- if err := s.emailSender.SendNewReportEmail(toAddresses, reportData); err != nil {
- return gtserror.Newf("error emailing instance moderators: %w", err)
- }
-
- return nil
-}
-
-func (s *surface) emailReportClosed(ctx context.Context, report *gtsmodel.Report) error {
+// emailUserReportClosed emails the user who created the
+// given report, to inform them the report has been closed.
+func (s *surface) emailUserReportClosed(ctx context.Context, report *gtsmodel.Report) error {
user, err := s.state.DB.GetUserByAccountID(ctx, report.Account.ID)
if err != nil {
return gtserror.Newf("db error getting user: %w", err)
@@ -104,7 +72,9 @@ func (s *surface) emailReportClosed(ctx context.Context, report *gtsmodel.Report
return s.emailSender.SendReportClosedEmail(user.Email, reportClosedData)
}
-func (s *surface) emailPleaseConfirm(ctx context.Context, user *gtsmodel.User, username string) error {
+// emailUserPleaseConfirm emails the given user
+// to ask them to confirm their email address.
+func (s *surface) emailUserPleaseConfirm(ctx context.Context, user *gtsmodel.User) error {
if user.UnconfirmedEmail == "" ||
user.UnconfirmedEmail == user.Email {
// User has already confirmed this
@@ -130,7 +100,7 @@ func (s *surface) emailPleaseConfirm(ctx context.Context, user *gtsmodel.User, u
if err := s.emailSender.SendConfirmEmail(
user.UnconfirmedEmail,
email.ConfirmData{
- Username: username,
+ Username: user.Account.Username,
InstanceURL: instance.URI,
InstanceName: instance.Title,
ConfirmLink: confirmLink,
@@ -158,3 +128,77 @@ func (s *surface) emailPleaseConfirm(ctx context.Context, user *gtsmodel.User, u
return nil
}
+
+// emailAdminReportOpened emails all active moderators/admins
+// of this instance that a new report has been created.
+func (s *surface) emailAdminReportOpened(ctx context.Context, report *gtsmodel.Report) error {
+ instance, err := s.state.DB.GetInstance(ctx, config.GetHost())
+ if err != nil {
+ return gtserror.Newf("error getting instance: %w", err)
+ }
+
+ toAddresses, err := s.state.DB.GetInstanceModeratorAddresses(ctx)
+ if err != nil {
+ if errors.Is(err, db.ErrNoEntries) {
+ // No registered moderator addresses.
+ return nil
+ }
+ return gtserror.Newf("error getting instance moderator addresses: %w", err)
+ }
+
+ if err := s.state.DB.PopulateReport(ctx, report); err != nil {
+ return gtserror.Newf("error populating report: %w", err)
+ }
+
+ reportData := email.NewReportData{
+ InstanceURL: instance.URI,
+ InstanceName: instance.Title,
+ ReportURL: instance.URI + "/settings/admin/reports/" + report.ID,
+ ReportDomain: report.Account.Domain,
+ ReportTargetDomain: report.TargetAccount.Domain,
+ }
+
+ if err := s.emailSender.SendNewReportEmail(toAddresses, reportData); err != nil {
+ return gtserror.Newf("error emailing instance moderators: %w", err)
+ }
+
+ return nil
+}
+
+// emailAdminNewSignup emails all active moderators/admins of this
+// instance that a new account sign-up has been submitted to the instance.
+func (s *surface) emailAdminNewSignup(ctx context.Context, newUser *gtsmodel.User) error {
+ instance, err := s.state.DB.GetInstance(ctx, config.GetHost())
+ if err != nil {
+ return gtserror.Newf("error getting instance: %w", err)
+ }
+
+ toAddresses, err := s.state.DB.GetInstanceModeratorAddresses(ctx)
+ if err != nil {
+ if errors.Is(err, db.ErrNoEntries) {
+ // No registered moderator addresses.
+ return nil
+ }
+ return gtserror.Newf("error getting instance moderator addresses: %w", err)
+ }
+
+ // Ensure user populated.
+ if err := s.state.DB.PopulateUser(ctx, newUser); err != nil {
+ return gtserror.Newf("error populating user: %w", err)
+ }
+
+ newSignupData := email.NewSignupData{
+ InstanceURL: instance.URI,
+ InstanceName: instance.Title,
+ SignupEmail: newUser.UnconfirmedEmail,
+ SignupUsername: newUser.Account.Username,
+ SignupReason: newUser.Reason,
+ SignupURL: "TODO",
+ }
+
+ if err := s.emailSender.SendNewSignupEmail(toAddresses, newSignupData); err != nil {
+ return gtserror.Newf("error emailing instance moderators: %w", err)
+ }
+
+ return nil
+}