Example #1
0
        public ActionResponse SendConfirmSms(UserProfile profile)
        {
            var userSrv  = ServiceFactory.Create <IAspNetUserService>();
            var user     = userSrv.GetCurrent();
            var username = user.UserName;

            if (!String.IsNullOrEmpty(profile.PhoneNumber))
            {
                user.PhoneNumber = profile.PhoneNumber;
                if (String.Compare(user.PhoneNumber, profile.PhoneNumber, true) != 0)
                {
                    user.PhoneNumberConfirmed = false;
                }
                userSrv.Save(user);
            }

            if (String.IsNullOrEmpty(user.PhoneNumber))
            {
                return(new ActionResponse("شماره تماس تنظیم نشده است."));
            }

            profile.ResetChanges();

            int sendCount = profile.PhoneNumberConfirmSendCount + 1;

            if (profile.PhoneNumberConfirmSendDt != null)
            {
                var time_diff = profile.PhoneTimeDiff.Value;
                if (profile.PhoneExceedWaitTimeLimit)
                {
                    return(new ActionResponse(string.Format("برای ارسال پیامک تایید لطفا حداقل {0} ثانیه صبر نمایید.",
                                                            (profile.PhoneWaitTime.Value - DateTime.Now).TotalSeconds)));
                }

                if (profile.PhoneExceedSendCountLimit)
                {
                    return(new ActionResponse(string.Format("ارسال پیامک تایید بیشتر از {0} بار در طول یک روز امکانپذیر نمی باشد.",
                                                            Constants.Notification.MaxCount)));
                }

                if (time_diff.TotalHours > 24)
                {
                    sendCount = 1;
                }
            }

            RandomValueGenerator rnd = new RandomValueGenerator();
            var code = rnd.Digit(5);

            if (code[0] == '0')
            {
                code = rnd.Number(1, 9) + code.Substring(0, 4);
            }

            var hashCode = code.GetHashCode();

            Repository.BulkUpdate(x => username.Equals(x.Username, StringComparison.CurrentCultureIgnoreCase), x => new UserProfile
            {
                PhoneNumberHashedConfirmCode = hashCode,
                PhoneNumberConfirmSendDt     = DateTime.Now,
                PhoneNumberConfirmSendCount  = sendCount
            });

            var  noty    = ObjectRegistry.GetObject <INotificationProvider>();
            var  result  = noty.VerifySms(code, user.PhoneNumber);
            bool success = result.Result == NotificationResultType.Success;

            return(new ActionResponse
            {
                Success = success,
                Message = "پیامک تایید ارسال شد."
            });
        }