Example #1
0
        public async Task ConfirmEmailAddressUpdate(Guid memberId, string confirmationToken)
        {
            Member member = await GetMember(memberId, memberId);

            MemberEmailAddressUpdateToken token = await _memberRepository.GetMemberEmailAddressUpdateToken(member.Id);

            if (token == null)
            {
                return;
            }

            if (token.ConfirmationToken != confirmationToken)
            {
                throw new OdkServiceException("Token mismatch");
            }

            Member existing = await _memberRepository.FindMemberByEmailAddress(token.NewEmailAddress);

            if (existing != null)
            {
                await _memberRepository.DeleteEmailAddressUpdateToken(member.Id);

                throw new OdkServiceException("Error updating email address: email address is already registered to an account");
            }

            await _memberRepository.UpdateMemberEmailAddress(member.Id, token.NewEmailAddress);

            _cacheService.RemoveVersionedItem <Member>(member.Id);

            await _memberRepository.DeleteEmailAddressUpdateToken(member.Id);
        }