From a4d99694525e65b58d49197c96324b27fb8c31c2 Mon Sep 17 00:00:00 2001 From: hackerman <3372410+aeneasr@users.noreply.github.com> Date: Thu, 16 Jul 2020 16:20:10 +0200 Subject: [PATCH] fix: don't resend verification emails once verified (#583) Closes #578 --- selfservice/hook/verification.go | 4 ++++ selfservice/hook/verification_test.go | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/selfservice/hook/verification.go b/selfservice/hook/verification.go index ceaebcfed08..2be6e363ef7 100644 --- a/selfservice/hook/verification.go +++ b/selfservice/hook/verification.go @@ -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 diff --git a/selfservice/hook/verification_test.go b/selfservice/hook/verification_test.go index 597089e88f1..fa5156476bc 100644 --- a/selfservice/hook/verification_test.go +++ b/selfservice/hook/verification_test.go @@ -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) @@ -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. }) } }