示例#1
0
        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;
            }
        }
示例#4
0
        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());
        }
示例#6
0
        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());
        }