Skip to content

Commit

Permalink
fix: don't resend verification emails once verified (#583)
Browse files Browse the repository at this point in the history
Closes #578
  • Loading branch information
aeneasr committed Jul 16, 2020
1 parent 6e2b6d2 commit a4d9969
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
4 changes: 4 additions & 0 deletions selfservice/hook/verification.go
Expand Up @@ -39,6 +39,10 @@ func (e *Verifier) do(r *http.Request, i *identity.Identity) error {
// already.

for k, address := range i.VerifiableAddresses {
if address.Verified {
continue
}

sent, err := e.r.VerificationSender().SendCode(r.Context(), address.Via, address.Value)
if err != nil {
return err
Expand Down
17 changes: 13 additions & 4 deletions selfservice/hook/verification_test.go
Expand Up @@ -37,12 +37,9 @@ func TestVerifier(t *testing.T) {
viper.Set(configuration.ViperKeyCourierSMTPURL, "smtp://foo@bar@dev.null/")

i := identity.NewIdentity(configuration.DefaultIdentityTraitsSchemaID)
i.Traits = identity.Traits(`{"emails":["foo@ory.sh","bar@ory.sh"]}`)
i.Traits = identity.Traits(`{"emails":["foo@ory.sh","bar@ory.sh","baz@ory.sh"]}`)
require.NoError(t, reg.IdentityManager().Create(context.Background(), i))

h := hook.NewVerifier(reg)
require.NoError(t, hf(h, i))

actual, err := reg.IdentityPool().FindVerifiableAddressByValue(context.Background(), identity.VerifiableAddressTypeEmail, "foo@ory.sh")
require.NoError(t, err)
assert.EqualValues(t, "foo@ory.sh", actual.Value)
Expand All @@ -51,12 +48,24 @@ func TestVerifier(t *testing.T) {
require.NoError(t, err)
assert.EqualValues(t, "bar@ory.sh", actual.Value)

actual, err = reg.IdentityPool().FindVerifiableAddressByValue(context.Background(), identity.VerifiableAddressTypeEmail, "baz@ory.sh")
require.NoError(t, err)
assert.EqualValues(t, "baz@ory.sh", actual.Value)
require.NoError(t, reg.PrivilegedIdentityPool().VerifyAddress(context.Background(), actual.Code))

i, err = reg.IdentityPool().GetIdentity(context.Background(), i.ID)
require.NoError(t, err)

h := hook.NewVerifier(reg)
require.NoError(t, hf(h, i))

messages, err := reg.CourierPersister().NextMessages(context.Background(), 12)
require.NoError(t, err)
require.Len(t, messages, 2)

assert.EqualValues(t, "foo@ory.sh", messages[0].Recipient)
assert.EqualValues(t, "bar@ory.sh", messages[1].Recipient)
// Email to baz@ory.sh is skipped because it is verified already.
})
}
}

0 comments on commit a4d9969

Please sign in to comment.