示例#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));
        }
示例#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));
        }
示例#3
0
        public UserSmsVerification FindSmsVerification(int userId, UserVerificationReason reason)
        {
            if (userId == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(userId), "Must not be null");
            }

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

            return(queryRepository.Find(constraints).Items.FirstOrDefault());
        }
示例#4
0
        public UserSmsVerification SendSmsVerificationForApi(UserVerificationReason reason)
        {
            UserSmsVerification verificationRequest = new UserSmsVerification(reason, UserVerificationStatus.Sent);

            return(Create(verificationRequest));
        }
示例#5
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);
        }
示例#6
0
        public void ThrowExceptionIfInvalidVerficationCode(Guid smsRef, string verficationCode, UserVerificationReason reason)
        {
            VerificationRequestResult result = CheckVerificationCode(smsRef, verficationCode, reason);

            if (!result.IsValid)
            {
                throw new BusinessRuleException(result.Message);
            }
        }
        protected override void Seed(ShoppingListContext context)
        {
            context.UserVerificationStatuses.AddOrUpdate(
                b => b.UserVerificationStatusId, UserVerificationStatus.GetDefaults().ToArray());

            context.UserVerificationReasons.AddOrUpdate(uv => uv.UserVerificationReasonId, UserVerificationReason.GetDefaults().ToArray());

            context.Roles.AddOrUpdate(r => r.Name, RoleNames.GetRolesWithCaptions().Select(r => new IdentityRole {
                Name = r.Key, ArabicName = r.Value, EnglishName = r.Value
            }).ToArray());

            context.SaveChanges();
        }