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); }
public VerificationRequest( string userId, VerificationType verificationType, VerificationRequestStatus status, DateTime expiryDate, VerificationCode code, int attempts) { this.UserId = userId; this.ExpiryDate = expiryDate; this.VerificationType = verificationType; this.Code = code; this.Status = status; this.Attempts = attempts; }
public async Task <bool> VerifyCode(VerificationType type, string userId, VerificationCode code) { var storedCodeRequest = await this.verificationRequestRepository.GetVerificationRequest(type, userId); if (storedCodeRequest == null) { this.logger.LogWarning("User ({userId}) tried to verify a code that hasn't been requested", userId); return(false); } var validatedRequest = storedCodeRequest.ValidateCode(code); await this.verificationRequestRepository.UpdateAttemptedRequest(validatedRequest); // todo problem+json stuff KYC-36 return(validatedRequest.Status == VerificationRequestStatus.Confirmed); }
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 static VerificationRequest GenerateNewVerificationRequest(string userId, VerificationType vericationType, VerificationCode code) { if (string.IsNullOrWhiteSpace(userId)) { throw new ArgumentNullException(nameof(userId)); } if (code == null) { throw new ArgumentNullException(nameof(code)); } // todo configure expiry time KYC-43 return(new VerificationRequest(userId, vericationType, VerificationRequestStatus.Pending, DateTime.UtcNow.Add(TimeSpan.FromMinutes(15)), code, 0)); }