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)); }
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)); }