Example #1
0
        public async Task <IActionResult> SendCode(SendCodeViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();

            if (user == null)
            {
                return(View("Error"));
            }

            // Generate the token and send it
            var code = await _userManager.GenerateTwoFactorTokenAsync(user, model.SelectedProvider);

            if (string.IsNullOrWhiteSpace(code))
            {
                return(View("Error"));
            }

            var message = "Your security code is: " + code;

            if (model.SelectedProvider == "Email")
            {
                await _emailSender.SendEmailAsync(await _userManager.GetEmailAsync(user), "Security Code", message);
            }
            else if (model.SelectedProvider == "Phone")
            {
                await _smsSender.SendSmsAsync(await _userManager.GetPhoneNumberAsync(user), message);
            }

            return(RedirectToAction(nameof(VerifyCode), new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe }));
        }
Example #2
0
        public async Task <Result> SendSmsCodeAsync(string phoneNumber, string countryCode)
        {
            var isExist = await _userQueryRepository.IsExistPhoneAsync(phoneNumber);

            if (!isExist)
            {
                return(Result.Fail(EC.PhoneNotFound, ET.PhoneNotFound));
            }

            var code = SecurityCode.Create(ProviderType.Phone, phoneNumber, CodeActionType.ForgotPasswordByPhone);

            await _securityCodesRepository.CreateAsync(code);

            await _unitOfWorks.CommitAsync();

            var smsSender = new SmsSender(_globalSettings);
            var result    = await smsSender.SendSmsAsync(phoneNumber, $"{code.Code} is your verification code.");

            if (result == null)
            {
                return(Result.Fail(EC.SmsServiceFailed, ET.SmsServiceFailed));
            }

            return(Result.Ok());
        }
Example #3
0
        private void DoWork(object state)
        {
            _logger.LogInformation("Worker Service method DoWork entrance.");
            if (DateTime.Now.Hour >= 10 && DateTime.Now.Hour <= 14)
            {
                var tomorrowDate = DateTime.Today.AddDays(1);
                var list         = new List <string>();
                using (var scope = _services.CreateScope())
                {
                    var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
                    var sows    = context.Sow.Where(s => !s.IsRemoved && s.DateBorn == tomorrowDate && !s.IsSmsSend ||
                                                    !s.IsRemoved && s.DateDetachment == tomorrowDate && !s.IsSmsSend ||
                                                    !s.IsRemoved && s.DateInsimination == tomorrowDate && !s.IsSmsSend ||
                                                    !s.IsRemoved && s.VaccineDate == tomorrowDate && !s.IsSmsSend).ToList();

                    foreach (var item in sows)
                    {
                        if (item.User.PhoneNumberConfirmed)
                        {
                            if (!list.Contains(item.UserId))
                            {
                                list.Add(item.UserId);
                                var userSows = sows.Where(u => u.UserId == item.UserId);
                                var message  = "Aplikacja Alocha.\nJutrzejsze wydarzenia:";
                                foreach (var sow in userSows)
                                {
                                    string status = "";
                                    switch (sow.Status)
                                    {
                                    case "Prośna":
                                        status = "Poród";
                                        if (sow.VaccineDate == tomorrowDate)
                                        {
                                            status = "Szczepienie";
                                        }
                                        break;

                                    case "Luźna":
                                        status = "Inseminacja";
                                        break;

                                    case "Laktacja":
                                        status = "Oderwanie prosiąt";
                                        break;
                                    }
                                    message      += string.Format("\nLocha nr {0} - {1}", sow.Number, status);
                                    sow.IsSmsSend = true;
                                    context.SaveChanges();
                                }
                                SmsSender.SendSmsAsync(string.Format("48{0}", item.User.PhoneNumber), message).GetAwaiter().GetResult();
                                _logger.LogInformation(string.Format("The worker service sends a sms to user: {0}, on the number {1}", item.User.Email, item.User.PhoneNumber));
                            }
                        }
                    }
                    ;
                }
            }
        }
        protected async Task <IActionResult> TOTPLogin(LoginModel model)
        {
            var phoneNumber = Regex.Match(model.UserIdentifier, @"(.{9})\s*$").Value;
            var user        = Context.Users.FirstOrDefault(e => e.PhoneNumber.EndsWith(phoneNumber));

            if (user == null)
            {
                return(BadRequest());
            }
            var purpose = $"TOTP:{model.UserIdentifier}";

            if (string.IsNullOrEmpty(model.Password))
            {
                model.Password = await UserManager.GenerateUserTokenAsync(user, TokenOptions.DefaultPhoneProvider, purpose);

                if (Environment.IsDevelopment())
                {
                    return(Ok(new
                    {
                        model.Password
                    }));
                }

                await SmsSender.SendSmsAsync(model.UserIdentifier, $"Your phone number verification code {model.Password}");

                return(Ok(new
                {
                    model.Password
                }));
            }

            var isValidCode = await UserManager.VerifyUserTokenAsync(user, TokenOptions.DefaultPhoneProvider, purpose, model.Password);

            if (!isValidCode)
            {
                return(BadRequest());
            }

            return(await SignInResultAsync(user));
        }
Example #5
0
        public async Task <Result> SendSmsAsync(string phoneNumber, string countryCode)
        {
            if (string.IsNullOrEmpty(phoneNumber) || string.IsNullOrEmpty(countryCode))
            {
                return(Result.Fail(EC.PhoneInvalid, ET.PhoneRequired));
            }

            var code = SecurityCode.Create(ProviderType.Phone, phoneNumber, CodeActionType.ConfirmPhone);

            await _securityCodesRepository.CreateAsync(code);

            await _unitOfWorks.CommitAsync();

            var smsSender = new SmsSender(_globalSettings);
            var result    = await smsSender.SendSmsAsync(phoneNumber, $"{code.Code} is your verification code.");

            if (result == null)
            {
                return(Result.Fail(EC.SmsServiceFailed, ET.SmsServiceFailed));
            }

            return(Result.Ok());
        }
Example #6
0
 public async Task <MessageResource> SendConfirmPhoneNumberSmsAsync(string phoneNumber, string code)
 {
     return(await SmsSender.SendSmsAsync(string.Format("48{0}", phoneNumber), string.Format("Twój kod potwierdzający to:{0}", code)));
 }