Example #1
0
        public async Task <bool> GenerateCode(VerificationType type, string userId, Func <VerificationCode, Task> onSuccessfulGeneration)
        {
            var outstandingRequest = await this.verificationRequestRepository.GetVerificationRequest(type, userId);

            if (outstandingRequest != null && outstandingRequest.IsActive())
            {
                this.logger.LogInformation("User {userId} tried to request an active code when one was already available", userId);
                return(false);
            }

            var verificationRequest = VerificationRequest.GenerateNewVerificationRequest(userId, type, VerificationCode.Generate());

            await this.verificationRequestRepository.StoreNewVerificationRequest(verificationRequest); // todo config the time KYC-43

            try
            {
                await onSuccessfulGeneration(verificationRequest.Code);
            }
            catch (SenderException)
            {
                this.logger.LogWarning("Failed to dispatch verification code to user");
                return(false);
            }

            return(true);
        }
Example #2
0
        public VerificationRequest ValidateCode(VerificationCode code)
        {
            var validatedRequest = new VerificationRequest(this.UserId, this.VerificationType, this.Status, this.ExpiryDate, this.Code, this.Attempts);

            validatedRequest.Attempts++;

            if (this.Status != VerificationRequestStatus.Pending)
            {
                return(validatedRequest);
            }

            if (this.ExpiryDate < DateTime.UtcNow)
            {
                validatedRequest.Status = VerificationRequestStatus.Expired;
                return(validatedRequest);
            }

            if (this.Code.Equals(code))
            {
                validatedRequest.Status = VerificationRequestStatus.Confirmed;
            }
            else if (validatedRequest.Attempts == 3)
            {
                validatedRequest.Status = VerificationRequestStatus.Failed;
            }

            return(validatedRequest);
        }