public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { LVIStudyUser user = await _signInManager.UserManager.FindByEmailAsync(Input.Email); if (user != null) { if (!await _signInManager.UserManager.IsEmailConfirmedAsync(user)) { ModelState.AddModelError(string.Empty, _sharedLocalizer["Please confirm your e-mail before logging in."]); return(Page()); } // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure : true); if (result.Succeeded) { _logger.LogInformation("User logged in."); // Get the saved localization preference for the user and store in the default culture cookie string userCulture = user.Culture ?? "en-GB"; Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(userCulture)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) } ); return(LocalRedirect(returnUrl)); } if (result.IsLockedOut) { _logger.LogWarning("User account locked out."); return(RedirectToPage("./Lockout")); } else { ModelState.AddModelError(string.Empty, _sharedLocalizer["Invalid login attempt."]); return(Page()); } } else { ModelState.AddModelError(string.Empty, _sharedLocalizer["Invalid login attempt."]); } } // If we got this far, something failed, redisplay form return(Page()); }
public async Task <IActionResult> OnPostCompleteStudyAsync() { LVIStudyUser user = await _userManager.GetUserAsync(User); if (user == null) { return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.")); } user.CompleteStudy = true; await _userManager.UpdateAsync(user); return(RedirectToPage("../Index")); }
private async Task RandomizeIntoGroup(LVIStudyUser newParticipant) { Random random = new Random(); int controlFlag = random.Next(0, 2); var participants = await _userService.GetUserListAsync(); int participantGroupMax = _studyOptions.MaximumParticipants / 2; switch (controlFlag) { case 0: int controlGroupCount = (from participant in participants where participant.InControlGroup == true && participant.IsAdmin == false select participant).Count(); if (controlGroupCount >= participantGroupMax) { newParticipant.InControlGroup = false; } else { newParticipant.InControlGroup = true; } break; case 1: int interventionGroupCount = (from participant in participants where participant.InControlGroup == false && participant.IsAdmin == false select participant).Count(); if (interventionGroupCount >= participantGroupMax) { newParticipant.InControlGroup = true; } else { newParticipant.InControlGroup = false; } break; default: break; } }
private static async Task EnsureAdminUser(IServiceProvider serviceProvider, string testUserPw, string UserName) { var userManager = serviceProvider.GetService <UserManager <LVIStudyUser> >(); var user = await userManager.FindByNameAsync(UserName); var result = new IdentityResult(); if (user == null) { user = new LVIStudyUser { UserName = UserName, IsAdmin = true, Email = UserName, EmailConfirmed = true }; await userManager.CreateAsync(user, testUserPw); } }
public async Task <IActionResult> OnGetAsync() { LVIStudyUser user = await _userManager.GetUserAsync(User); if (user == null || user.CompleteStudy) { return(NotFound()); } Cases = await _caseReportService.GetOrderedCasesAsync(); Reports = await _reportService.GetUserReportsOrderedByCase(user.Id); SubmittedReports = new List <int>(); foreach (var report in Reports) { SubmittedReports.Add(report.CaseId); } return(Page()); }
private async Task <IdentityResult> AnonymiseUserAsync(LVIStudyUser user) { //CODE_FEATURE //FreeUpParticipantCode(user.Code); user.UserName = Guid.NewGuid().ToString(); user.NormalizedUserName = ""; user.Email = "withdrawn"; user.NormalizedEmail = "WITHDRAWN"; user.EmailConfirmed = false; user.Culture = null; user.FirstName = "Withdrawn"; user.Gender = null; //user.ParticipantCode = null; user.LastName = "Withdrawn"; user.Nationality = "Withdrawn"; user.PlaceOfWork = "Withdrawn"; return(await _userManager.UpdateAsync(user)); }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var user = new LVIStudyUser(); await TryUpdateModelAsync <LVIStudyUser>(user, "input"); //CODE_FEATURE //var matchingCode = await GetMatchingCode(user.Code); //if (matchingCode == null) //{ // ModelState.AddModelError("ParticipantCode", "The Participant Code you have provided is not valid"); // return Page(); //} await RandomizeIntoGroup(user); user.UserName = user.Email; user.IsAdmin = false; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); // Set the culture in the cookie here, so when the user is redirected, the preferred language is stored string selectedCulture = user.Culture ?? "en-GB"; Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(selectedCulture)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) } ); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code = code }, protocol: Request.Scheme); var emailBody = _sharedLocalizer .WithCulture(new CultureInfo(selectedCulture))["Email_Confirmation_Message_Text", HtmlEncoder.Default.Encode(callbackUrl)]; await _emailSender.SendEmailAsync(Input.Email, _sharedLocalizer .WithCulture(new CultureInfo(selectedCulture))["Confirm your email"], emailBody); //CODE_FEATURE // Set the existing code status to 'Used' and update the DB //matchingCode.IsUsed = true; //await _codeRepository.UpdateAsync(matchingCode); return(RedirectToPage("./RegisterConfirmation")); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }