Skip to content

Commit 330f467

Browse files
committed
fix: allow invite links to be sent more than once #134
1 parent 3e41679 commit 330f467

2 files changed

Lines changed: 29 additions & 23 deletions

File tree

api/invite.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,23 @@ func (a *API) Invite(w http.ResponseWriter, r *http.Request) error {
3636
if err != nil && !models.IsNotFoundError(err) {
3737
return internalServerError("Database error finding user").WithInternalError(err)
3838
}
39-
if user != nil {
40-
return unprocessableEntityError(DuplicateEmailMsg)
41-
}
4239

4340
err = a.db.Transaction(func(tx *storage.Connection) error {
44-
signupParams := SignupParams{
45-
Email: params.Email,
46-
Data: params.Data,
47-
Aud: aud,
48-
Provider: "email",
49-
}
50-
user, err = a.signupNewUser(ctx, tx, &signupParams)
51-
if err != nil {
52-
return err
41+
if user != nil {
42+
if user.IsConfirmed() {
43+
return unprocessableEntityError(DuplicateEmailMsg)
44+
}
45+
} else {
46+
signupParams := SignupParams{
47+
Email: params.Email,
48+
Data: params.Data,
49+
Aud: aud,
50+
Provider: "email",
51+
}
52+
user, err = a.signupNewUser(ctx, tx, &signupParams)
53+
if err != nil {
54+
return err
55+
}
5356
}
5457

5558
if terr := models.NewAuditLogEntry(tx, instanceID, adminUser, models.UserInvitedAction, map[string]interface{}{

api/mail.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,20 @@ func (a *API) GenerateLink(w http.ResponseWriter, r *http.Request) error {
7979
terr = errors.Wrap(tx.UpdateOnly(user, "recovery_token", "recovery_sent_at"), "Database error updating user for recovery")
8080
case "invite":
8181
if user != nil {
82-
return unprocessableEntityError(DuplicateEmailMsg)
83-
}
84-
signupParams := &SignupParams{
85-
Email: params.Email,
86-
Data: params.Data,
87-
Provider: "email",
88-
Aud: aud,
89-
}
90-
user, terr = a.signupNewUser(ctx, tx, signupParams)
91-
if terr != nil {
92-
return terr
82+
if user.IsConfirmed() {
83+
return unprocessableEntityError(DuplicateEmailMsg)
84+
}
85+
} else {
86+
signupParams := &SignupParams{
87+
Email: params.Email,
88+
Data: params.Data,
89+
Provider: "email",
90+
Aud: aud,
91+
}
92+
user, terr = a.signupNewUser(ctx, tx, signupParams)
93+
if terr != nil {
94+
return terr
95+
}
9396
}
9497
if terr = models.NewAuditLogEntry(tx, instanceID, adminUser, models.UserInvitedAction, map[string]interface{}{
9598
"user_id": user.ID,

0 commit comments

Comments
 (0)