Пример #1
0
        public async Task <IActionResult> ForgotPassword(ForgotPasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                var phoneNumber = PhoneNumberSanitizer.Sanitize(model.PhoneNumber, "+265");
                var user        = await _userManager.FindByNameAsync(phoneNumber);

                if (user == null)
                {
                    ModelState.AddModelError(string.Empty, "The system couldn't identify a user with that phone number");
                    // Don't reveal that the user does not exist or is not confirmed
                    return(View("ForgotPassword"));
                }

                // Generate a code as if you are changing phone numbers
                var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, phoneNumber);

                await _smsService.SendSmsAsync(user.PhoneNumber, $"Your password reset code is {code}");

                return(RedirectToAction(nameof(ForgotPasswordVerification), new { PhoneNumber = phoneNumber }));
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
        public async Task <IActionResult> Create([Bind] ResponseTeamMemberDTO responseTeamMember)
        {
            string url = $"{CoreApiUrl}ResponseTeamMembers/Add";

            //Clean up phoner number
            var sanitizedNumber = PhoneNumberSanitizer.Sanitize(responseTeamMember.PhoneNumber, "+265");

            responseTeamMember.PhoneNumber = sanitizedNumber;
            var fullName = $"{responseTeamMember.FirstName} {responseTeamMember.Surname}";

            var accessToken = await HttpContext.GetTokenAsync("access_token");

            var response = await HttpRequestFactory.Post(accessToken, url, responseTeamMember);

            if (response.StatusCode == HttpStatusCode.Created)
            {
                var identityResponse = await HttpRequestFactory.Post($"{IdentityServerAuthority}/api/Users/RegisterUser", new UserDTO { PhoneNumber = responseTeamMember.PhoneNumber, FullName = fullName });

                if (identityResponse.StatusCode == HttpStatusCode.Created)
                {
                    AppContextHelper.SetToastMessage("User account has been successfully created", MessageType.Danger, 1, Response);
                }
                AppContextHelper.SetToastMessage("Response team member has been successfully created", MessageType.Success, 1, Response);
                return(RedirectToAction(nameof(Index)));
            }
            else
            {
                AppContextHelper.SetToastMessage("Failed to create response team member", MessageType.Danger, 1, Response);
                ModelState.AddModelError("", HttpResponseHandler.Process(response));
            }

            return(View(responseTeamMember));
        }
Пример #3
0
        public async Task <IActionResult> Login(LoginDTO model, string button)
        {
            // check if we are in the context of an authorization request
            var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);

            model.Username = PhoneNumberSanitizer.Sanitize(model.Username, "+265");
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberLogin, lockoutOnFailure : true);

                if (result.Succeeded)
                {
                    var user = await _userManager.FindByNameAsync(model.Username);

                    if (user.DefaultPassword == 0)
                    {
                        return(Redirect("UpdatePassword"));
                    }

                    await _events.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id, user.UserName));

                    if (context != null)
                    {
                        return(View("Redirect", new RedirectViewModel {
                            RedirectUrl = model.ReturnUrl
                        }));


                        // we can trust model.ReturnUrl since GetAuthorizationContextAsync returned non-null
                        //return Redirect(model.ReturnUrl);
                    }

                    // request for a local page
                    if (Url.IsLocalUrl(model.ReturnUrl))
                    {
                        return(Redirect(model.ReturnUrl));
                    }
                    else if (string.IsNullOrEmpty(model.ReturnUrl))
                    {
                        return(Redirect("~/"));
                    }
                    else
                    {
                        // user might have clicked on a malicious link - should be logged
                        throw new Exception("invalid return URL");
                    }
                }

                await _events.RaiseAsync(new UserLoginFailureEvent(model.Username, "invalid credentials"));

                ModelState.AddModelError(string.Empty, AccountOptions.InvalidCredentialsErrorMessage);
            }

            // something went wrong, show form with error
            var vm = await BuildLoginViewModelAsync(model);

            return(View(vm));
        }
        public async Task <IActionResult> Create(IFormFile formfile, BulkNotificationRequestViewModel bulkNotificationRequsestViewModel)
        {
            var numberList = new List <string>();

            if (formfile != null)
            {
                var phoneNumbersUploadedFile = formfile;

                IWorkbook book;

                var filePath = Path.GetTempFileName();

                //using var stream = System.IO.File.Create(filePath);

                //read workbook as XLSX
                try
                {
                    book = new XSSFWorkbook(phoneNumbersUploadedFile.OpenReadStream());
                }
                catch (Exception exception)
                {
                    var e = exception;
                    book = null;
                }

                // If reading fails, try to read workbook as XLS:
                if (book == null)
                {
                    book = new HSSFWorkbook(phoneNumbersUploadedFile.OpenReadStream());
                }

                for (int i = 0; i < book.NumberOfSheets; i++)
                {
                    var currentSheet = book.GetSheetAt(i);
                    for (int row = 0; row <= currentSheet.LastRowNum; row++)
                    {
                        if (currentSheet.GetRow(row) != null) //null is when the row only contains empty cells
                        {
                            var number = currentSheet.GetRow(row).GetCell(0).ToString();
                            //Clean up phone number
                            var sanitizedNumber = PhoneNumberSanitizer.Sanitize(currentSheet.GetRow(row).GetCell(0).ToString(), "+265");
                            numberList.Add(sanitizedNumber);
                        }
                    }
                }
            }


            if (!String.IsNullOrEmpty(bulkNotificationRequsestViewModel.BulkNotificationRequest.CustomNumbers))
            {
                var customNumbers = bulkNotificationRequsestViewModel.BulkNotificationRequest.CustomNumbers.Split(",");
                numberList.InsertRange(customNumbers.Length, customNumbers);
            }

            bulkNotificationRequsestViewModel.BulkNotificationRequest.UploadedPhoneNumbers = numberList;

            string url = $"{NotificationsApiUrl}BulkNotifications/Add";

            var accessToken = await HttpContext.GetTokenAsync("access_token");

            var response = await HttpRequestFactory.Post(accessToken, url, bulkNotificationRequsestViewModel.BulkNotificationRequest);

            if (response.StatusCode == HttpStatusCode.Created)
            {
                AppContextHelper.SetToastMessage("Bulk notification has been successfully created", MessageType.Success, 1, Response);
                return(RedirectToAction(nameof(Index)));
            }
            else
            {
                AppContextHelper.SetToastMessage("Failed to create bulk notification", MessageType.Danger, 1, Response);
                ModelState.AddModelError("", HttpResponseHandler.Process(response));
            }

            bulkNotificationRequsestViewModel.Channels = await GetNotificationChannels();

            return(View(bulkNotificationRequsestViewModel));
        }