예제 #1
0
        public async Task TestSubscribeListMemberAsPending()
        {
            string email = GetTestEmail();

            try
            {
                await newsletterService.SetSubscription(email, true, true);

                Status status = await newsletterService.GetListMemberStatus(email);

                Assert.Equal(Status.Pending, status);
                Assert.True(await newsletterService.IsSubscribedAsync(email));
            }
            finally
            {
                await newsletterService.UnsubscribeMember(email);
            }
        }
예제 #2
0
        public async Task <UserResult> UpdateUser(UpdatedUser updatedUser, ClaimsPrincipal claimsUser)
        {
            IEnumerable <IdentityError> validationResults = ValidationHelper.ValidateAsIdentity(updatedUser, serviceProvider);

            if (validationResults.Any())
            {
                return(new UserResult(IdentityResult.Failed(validationResults.ToArray())));
            }

            ApplicationUser?user = await userManager.FindByIdAsync(updatedUser.Id).ConfigureAwait(false);

            if (user == null)
            {
                return(new UserResult(IdentityResult.Failed(new IdentityError()
                {
                    Code = "NOUSER", Description = "This user doesn't exist"
                })));
            }

            var loggedInUser = await userManager.GetUserAsync(claimsUser).ConfigureAwait(false);

            // need to be logged in as either admin, or the user being updated, only admins can update representsNumberParticipants or change a user to admin
            if (!(claimsUser.IsInRole(AuthorizationConstants.AdminRole) || loggedInUser.Id == user.Id) ||
                (!claimsUser.IsInRole(AuthorizationConstants.AdminRole) && (updatedUser.representsNumberParticipants != user.RepresentsNumberParticipants || updatedUser.IsAdmin)))
            {
                return(new UserResult(IdentityResult.Failed(new IdentityError()
                {
                    Code = "NOPERM", Description = "You don't have permission to update this user"
                })));
            }

            logger.LogInformation("Updating user");
            user.Email     = updatedUser.Email;
            user.FirstName = updatedUser.FirstName;
            user.LastName  = updatedUser.LastName;
            user.RepresentsNumberParticipants = updatedUser.representsNumberParticipants;
            var result = await userManager.UpdateAsync(user).ConfigureAwait(false);

            if (updatedUser.IsAdmin)
            {
                await userManager.AddToRoleAsync(user, AuthorizationConstants.AdminRole).ConfigureAwait(false);
            }
            else
            {
                await userManager.RemoveFromRoleAsync(user, AuthorizationConstants.AdminRole).ConfigureAwait(false);
            }

            if (!result.Succeeded)
            {
                LogErrors("Error updating user", result);
                return(new UserResult(result));
            }
            else
            {
                try
                {
                    await newsletterService.SetSubscription(user.Email, updatedUser.IsSubscribedNewsletter).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    var newsletterResult = IdentityResult.Failed(new IdentityError()
                    {
                        Code = "NEWSSUBCR", Description = $"Newsletter subscription failed: {e.Message}"
                    });
                    LogErrors("Error updating user", newsletterResult);
                    return(new UserResult(newsletterResult));
                }

                logger.LogInformation("Updated user");
                return(new UserResult(user, IdentityResult.Success));
            }
        }