public string SendSingleSMS(SmsSendSingleVM model)
        {
            var massageLength = SmsValidator.MassageLength(model.TextSMS);
            var smsCount      = SmsValidator.TotalSmsCount(model.TextSMS);

            var smsProvider = new SmsProviderBuilder();

            var smsBalance = smsProvider.SmsBalance();

            if (smsBalance < smsCount)
            {
                return("No SMS Balance");
            }

            var providerSendId = smsProvider.SendSms(model.TextSMS, model.PhoneNumber);

            if (!smsProvider.IsSuccess)
            {
                return(smsProvider.Error);
            }

            var smsRecord = new SmsSendRecord
            {
                PhoneNumber       = model.PhoneNumber,
                TextSMS           = model.TextSMS,
                TextCount         = massageLength,
                SMSCount          = smsCount,
                SmsProviderSendId = providerSendId,
                Date = DateTime.Now
            };

            Context.SmsSendRecord.Add(smsRecord);

            return("Success");
        }
Beispiel #2
0
        public DbResponse SendCode(string mobileNumber, int codeValidSecond)
        {
            try
            {
                if (_userManager.Users.Any(u => u.UserName == mobileNumber))
                {
                    return(new DbResponse(false, "Phone number already exist"));
                }

                OtpServiceSingleton.Instance.PhoneNunber = mobileNumber;
                #region Generate Code
                var bytes = Base32Encoding.ToBytes("JBSWY3DPEHPK3PXP");

                OtpServiceSingleton.Instance.Totp = new Totp(bytes, codeValidSecond);

                var code = OtpServiceSingleton.Instance.Totp.ComputeTotp(DateTime.UtcNow);

                var textSms = $"Your Verification code is {code}. This code is valid for {codeValidSecond} second";
                #endregion

                #region SMS Code

                var massageLength = SmsValidator.MassageLength(textSms);
                var smsCount      = SmsValidator.TotalSmsCount(textSms);

                var smsProvider = new SmsProviderBuilder();

                var smsBalance = smsProvider.SmsBalance();
                if (smsBalance < smsCount)
                {
                    return(new DbResponse(false, "No SMS Balance"));
                }

                var providerSendId = smsProvider.SendSms(textSms, mobileNumber);

                if (!smsProvider.IsSuccess)
                {
                    return(new DbResponse(false, smsProvider.Error));
                }

                #endregion

                return(new DbResponse(true, $"Success {code}"));
            }
            catch (Exception e)
            {
                return(new DbResponse(false, e.Message));
            }
        }
        public string SendMultipleToVendor(SmsSendMultipleVendorVM model)
        {
            var massageLength = SmsValidator.MassageLength(model.TextSMS);
            var smsCount      = SmsValidator.TotalSmsCount(model.TextSMS);
            var vendorCount   = model.Vendors.Count();

            var totalSMS = smsCount * vendorCount;

            var numbers     = string.Join(",", model.Vendors.Select(v => v.SmsNumber));
            var smsProvider = new SmsProviderBuilder();

            var smsBalance = smsProvider.SmsBalance();

            if (smsBalance < totalSMS)
            {
                return("No SMS Balance");
            }

            var providerSendId = smsProvider.SendSms(model.TextSMS, numbers);

            if (!smsProvider.IsSuccess)
            {
                return(smsProvider.Error);
            }

            var smsRecord = model.Vendors.Select(v => new SmsSendRecord
            {
                PhoneNumber       = v.SmsNumber,
                TextSMS           = model.TextSMS,
                TextCount         = massageLength,
                SMSCount          = smsCount,
                VendorID          = v.VendorID,
                SmsProviderSendId = providerSendId,
                Date = DateTime.Now
            }).ToList();

            Context.SmsSendRecord.AddRange(smsRecord);

            return("Success");
        }
        public int SmsBalance()
        {
            var smsProvider = new SmsProviderBuilder();

            return(smsProvider.SmsBalance());
        }
Beispiel #5
0
        public async Task <DbResponse <IdentityUser> > MobileSignUpAsync(CustomerMobileSignUpModel model)
        {
            try
            {
                long timeStepMatched;
                var  verify = OtpServiceSingleton.Instance.Totp.VerifyTotp(model.Code, out timeStepMatched, window: null);
                if (model.MobileNumber != OtpServiceSingleton.Instance.PhoneNunber)
                {
                    return(new DbResponse <IdentityUser>(false, "Mobile number not match"));
                }
                if (!verify)
                {
                    return(new DbResponse <IdentityUser>(false, "Invalid Code"));
                }

                //Identity Create
                var user = new IdentityUser {
                    UserName = model.MobileNumber
                };
                var password = model.Password;
                var result   = await _userManager.CreateAsync(user, password).ConfigureAwait(false);

                if (!result.Succeeded)
                {
                    return(new DbResponse <IdentityUser>(false, result.Errors.FirstOrDefault()?.Description));
                }

                await _userManager.AddToRoleAsync(user, UserType.Customer.ToString()).ConfigureAwait(false);

                var customer = new CustomerAddModel
                {
                    UserName = model.MobileNumber
                };

                _db.Customer.Add(customer);
                _db.SaveChanges();
                #region SMS Code

                var textSms = $"You have registered Successfully , Your Id: {model.MobileNumber}";

                var massageLength = SmsValidator.MassageLength(textSms);
                var smsCount      = SmsValidator.TotalSmsCount(textSms);

                var smsProvider = new SmsProviderBuilder();

                var smsBalance = smsProvider.SmsBalance();
                if (smsBalance < smsCount)
                {
                    return(new DbResponse <IdentityUser>(true, "Success, No SMS Balance", user));
                }

                var providerSendId = smsProvider.SendSms(textSms, model.MobileNumber);

                if (!smsProvider.IsSuccess)
                {
                    return(new DbResponse <IdentityUser>(true, smsProvider.Error, user));
                }

                #endregion

                return(new DbResponse <IdentityUser>(true, "Success", user));
            }
            catch (Exception e)
            {
                return(new DbResponse <IdentityUser>(false, e.Message));
            }
        }
Beispiel #6
0
        public async Task <DbResponse> ApprovedAsync(VendorApprovedModel model, string userName)
        {
            try
            {
                var registrationId = _db.Registration.GetRegID_ByUserName(userName);
                if (registrationId == 0)
                {
                    return(new DbResponse(false, "Invalid User"));
                }

                model.ApprovedByRegistrationId = registrationId;

                if (_db.Vendor.IsNull(model.VendorId))
                {
                    return(new DbResponse(false, "Vendor not Found"));
                }

                var vendor = _db.Vendor.Get(model.VendorId);

                //Identity Create
                var user = new IdentityUser {
                    UserName = vendor.Email, Email = vendor.Email
                };
                var password = Password.Generate(8, 3);
                var result   = await _userManager.CreateAsync(user, password).ConfigureAwait(false);

                if (!result.Succeeded)
                {
                    return(new DbResponse(false, result.Errors.FirstOrDefault()?.Description));
                }

                await _userManager.AddToRoleAsync(user, UserType.Seller.ToString()).ConfigureAwait(false);


                //Update vendor table
                _db.Vendor.Approved(model);
                _db.SaveChanges();


                #region SMS Code

                var textSms = $"Your Account Successfully activated, Your Id: {vendor.Email} & password: {password} . Please change your password for better security";

                var massageLength = SmsValidator.MassageLength(textSms);
                var smsCount      = SmsValidator.TotalSmsCount(textSms);

                var smsProvider = new SmsProviderBuilder();

                var smsBalance = smsProvider.SmsBalance();
                if (smsBalance < smsCount)
                {
                    return(new DbResponse(false, "No SMS Balance"));
                }

                var providerSendId = smsProvider.SendSms(textSms, vendor.VerifiedPhone);

                if (!smsProvider.IsSuccess)
                {
                    return(new DbResponse(false, smsProvider.Error));
                }

                #endregion


                return(new DbResponse(true, "Success"));
            }
            catch (Exception e)
            {
                return(new DbResponse(false, e.Message));
            }
        }