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); }
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); }