Fix sending notifications to users if the user object didn't have an email

This commit is contained in:
kolaente 2021-02-14 22:44:01 +01:00
parent 58492fffce
commit 83f003355d
Signed by untrusted user: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 21 additions and 7 deletions

View File

@ -32,9 +32,7 @@ type Mail struct {
// NewMail creates a new mail object with a default greeting
func NewMail() *Mail {
return &Mail{
greeting: "Hi,",
}
return &Mail{}
}
// From sets the from name and email address

View File

@ -32,7 +32,7 @@ type Notification interface {
// Notifiable is an entity which can be notified. Usually a user.
type Notifiable interface {
// Should return the email address this notifiable has.
RouteForMail() string
RouteForMail() (string, error)
// Should return the id of the notifiable entity
RouteForDB() int64
}
@ -73,7 +73,11 @@ func notifyMail(notifiable Notifiable, notification Notification) error {
return nil
}
mail.To(notifiable.RouteForMail())
to, err := notifiable.RouteForMail()
if err != nil {
return err
}
mail.To(to)
return SendMail(mail)
}

View File

@ -17,6 +17,7 @@
package user
import (
"code.vikunja.io/api/pkg/db"
"errors"
"fmt"
"reflect"
@ -75,8 +76,19 @@ type User struct {
}
// RouteForMail routes all notifications for a user to its email address
func (u *User) RouteForMail() string {
return u.Email
func (u *User) RouteForMail() (string, error) {
if u.Email == "" {
s := db.NewSession()
defer s.Close()
user, err := getUser(s, &User{ID: u.ID}, true)
if err != nil {
return "", err
}
return user.Email, nil
}
return u.Email, nil
}
// RouteForDB routes all notifications for a user to their id