예제 #1
0
        public void ThrowExceptionIfInvalidVerficationCode(Guid smsRef, string verficationCode, UserVerificationReason reason)
        {
            VerificationRequestResult result = CheckVerificationCode(smsRef, verficationCode, reason);

            if (!result.IsValid)
            {
                throw new BusinessRuleException(result.Message);
            }
        }
예제 #2
0
        public VerificationRequestResult CheckVerificationCode(int userId, string verificationCode, UserVerificationReason reason)
        {
            VerificationRequestResult result = new VerificationRequestResult();

            if (userId == 0)
            {
                throw new ArgumentNullException(nameof(userId), "Must not be null");
            }

            if (string.IsNullOrWhiteSpace(verificationCode))
            {
                throw new BusinessRuleException(nameof(UserSmsVerification), "");
            }

            IQueryConstraints <UserSmsVerification> constraints = new QueryConstraints <UserSmsVerification>()
                                                                  .Where(v => v.UserId == userId)
                                                                  .AndAlso(v => v.Code == verificationCode.Trim())
                                                                  .AndAlso(v => v.UserVerificationReasonId == reason.UserVerificationReasonId);

            UserSmsVerification verificationRequest = queryRepository.SingleOrDefault(constraints);

            if (verificationRequest == null)
            {
                result.IsValid = false;
                result.Message = "الرجاء التأكد من رمز التحقق المدخل";
            }
            else if (!verificationRequest.IsAlive)
            {
                result.IsValid = false;
                result.Message = "انتهى الوقت المخصص لهذا الرمز، الرجاء إعادة إرسال رمز التحقق وإدخاله فور وصوله";
            }
            else
            {
                result.IsValid = true;
                result.Message = "";
            }

            if (!result.IsValid)
            {
                constraints = new QueryConstraints <UserSmsVerification>()
                              .Where(v => v.UserId == userId)
                              .AndAlso(v => v.UserVerificationReasonId == reason.UserVerificationReasonId);

                UserSmsVerification userVerificationRequest = queryRepository.Single(constraints);
                result.ResendTimeout = userVerificationRequest.ResendTimeout;
            }

            return(result);
        }