Ejemplo n.º 1
0
        public UserSmsVerification ResendVerificationRequest(int userId, UserVerificationReason reason)
        {
            if (userId == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(userId), "must not be null");
            }

            if (reason == null)
            {
                throw new ArgumentOutOfRangeException(nameof(reason), "must not be null");
            }

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

            UserSmsVerification verificationRequest = queryRepository.Find(constraints).Items.OrderBy(v => v.CreatedAt).LastOrDefault();

            if (verificationRequest == null)
            {
                throw new BusinessRuleException(nameof(UserSmsVerification), "");
            }

            verificationRequest.RenewIfNecessary();
            verificationRequest.IncrementResendCount();

            //Send the verification code to the user by SMS
            IQueryConstraints <User> userConstraints = new QueryConstraints <User>()
                                                       .Where(u => u.Id == userId);
            User user = queryRepository.Single(userConstraints);

            SendSms(verificationRequest.Code, user.Mobile);

            return(repository.Update(verificationRequest));
        }
Ejemplo n.º 2
0
        public UserSmsVerification SendSmsVerification(User user, UserVerificationReason reason)
        {
            if (FindSmsVerification(user.Id, reason) != null)
            {
                return(ResendVerificationRequest(user.Id, reason));
            }

            UserSmsVerification verificationRequest = new UserSmsVerification(user, reason, UserVerificationStatus.Sent);

            SendSms(verificationRequest.Code, user.Mobile);

            return(Create(verificationRequest));
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public UserSmsVerification Create(UserSmsVerification entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity), "Must not be null");
            }

            if (!entity.Validate())
            {
                throw new ValidationException(nameof(UserSmsVerification), entity.ValidationResults);
            }

            entity.SMSRefId = Guid.NewGuid();
            UserSmsVerification result = repository.Create(entity);

            return(result);
        }
Ejemplo n.º 5
0
        public UserSmsVerification ResendVerificationRequest(string mobile, Guid smsRefId)
        {
            IQueryConstraints <UserSmsVerification> constraints = new QueryConstraints <UserSmsVerification>()
                                                                  .Where(v => v.SMSRefId == smsRefId);

            UserSmsVerification verificationRequest = queryRepository.Find(constraints).Items.OrderBy(v => v.CreatedAt).LastOrDefault();

            if (verificationRequest == null)
            {
                throw new BusinessRuleException(nameof(UserSmsVerification), "");
            }

            verificationRequest.RenewIfNecessary();
            verificationRequest.IncrementResendCount();

            SendSms(verificationRequest.Code, mobile);

            return(repository.Update(verificationRequest));
        }
Ejemplo n.º 6
0
        public IHttpActionResult VerifyMobile()
        {
            UserSmsVerification userSmsVerification = UserSmsVerificationService.Obj.SendSmsVerificationForApi(UserVerificationReason.Registeration);

            return(Ok(userSmsVerification.SMSRefId));
        }
Ejemplo n.º 7
0
        public UserSmsVerification SendSmsVerificationForApi(UserVerificationReason reason)
        {
            UserSmsVerification verificationRequest = new UserSmsVerification(reason, UserVerificationStatus.Sent);

            return(Create(verificationRequest));
        }