Exemple #1
0
        public async void HttpPost_Create_ModelIsValid_ShouldIncludeUserDetails()
        {
            var model       = ValidModel();
            var newUser     = A.Fake <IUnauthenticatedUser>();
            var token       = A.Fake <TokenResponse>();
            var accessToken = "token";

            A.CallTo(() => oauthClientCredential.GetClientCredentialsAsync()).Returns(token);

            var userCreationData = new InternalUserCreationData();

            A.CallTo(() => newUser.CreateInternalUserAsync(A <InternalUserCreationData> ._, token.AccessToken))
            .Invokes((InternalUserCreationData u, string t) =>
            {
                userCreationData = u;
                accessToken      = token.AccessToken;
            })
            .Returns(Task.FromResult(A.Dummy <string>()));

            A.CallTo(() => apiClient.User).Returns(newUser);

            A.CallTo(() => weeeAuthorization.SignIn(A <string> ._, A <string> ._, A <bool> ._))
            .Returns(LoginResult.Success("dshadjk", A.Dummy <ActionResult>()));

            await AccountController().Create(model);

            Assert.Equal(model.Name, userCreationData.FirstName);
            Assert.Equal(model.Surname, userCreationData.Surname);
            Assert.Equal(model.Email, userCreationData.Email);
            Assert.Equal(model.Password, userCreationData.Password);
        }
Exemple #2
0
        public async Task <IHttpActionResult> CreateInternalUser(InternalUserCreationData model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = new ApplicationUser
            {
                UserName  = model.Email,
                Email     = model.Email,
                FirstName = model.FirstName,
                Surname   = model.Surname,
            };

            user.Claims.Add(new IdentityUserClaim
            {
                ClaimType  = ClaimTypes.AuthenticationMethod,
                ClaimValue = Claims.CanAccessInternalArea,
                UserId     = user.Id
            });

            var result = await userManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                return(GetErrorResult(result));
            }

            await SendActivationEmail(user.Id, user.Email, model.ActivationBaseUrl);

            return(Ok(user.Id));
        }
        public async Task<IHttpActionResult> CreateInternalUser(InternalUserCreationData model)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var user = new ApplicationUser
            {
                UserName = model.Email,
                Email = model.Email,
                FirstName = model.FirstName,
                Surname = model.Surname,
            };

            user.Claims.Add(new IdentityUserClaim
            {
                ClaimType = ClaimTypes.AuthenticationMethod,
                ClaimValue = Claims.CanAccessInternalArea,
                UserId = user.Id
            });

            var result = await userManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                return GetErrorResult(result);
            }

            await SendActivationEmail(user.Id, user.Email, model.ActivationBaseUrl);

            return Ok(user.Id);
        }
        public async Task <string> CreateInternalUserAsync(InternalUserCreationData userCreationData, string accessToken)
        {
            httpClient.SetBearerToken(accessToken);

            var response = await httpClient.PostAsJsonAsync(Controller + "CreateInternalUser", userCreationData);

            return(await response.CreateResponseAsync <string>());
        }
Exemple #5
0
        public async Task <ActionResult> Create(InternalUserCreationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var userCreationData = new InternalUserCreationData
            {
                Email             = model.Email,
                FirstName         = model.Name,
                Surname           = model.Surname,
                Password          = model.Password,
                ConfirmPassword   = model.ConfirmPassword,
                ActivationBaseUrl = externalRouteService.ActivateInternalUserAccountUrl,
            };

            try
            {
                using (var client = apiClient())
                {
                    var response = await apiClientCredential().GetClientCredentialsAsync();

                    var userId = await client.User.CreateInternalUserAsync(userCreationData, response.AccessToken);

                    var loginResult = await weeeAuthorization.SignIn(model.Email, model.Password, false);

                    if (loginResult.Successful)
                    {
                        await client.SendAsync(loginResult.AccessToken, new AddCompetentAuthorityUser(userId));

                        return(RedirectToAction("AdminAccountActivationRequired"));
                    }

                    ModelState.AddModelError(string.Empty, loginResult.ErrorMessage);
                }
            }
            catch (ApiBadRequestException ex)
            {
                this.HandleBadRequest(ex);

                if (ModelState.IsValid)
                {
                    throw;
                }

                AddRemoveModelStateErrors();
            }
            catch (SmtpException)
            {
                ViewBag.Errors = new[] { "The activation email was not sent, please try again later." };
            }

            return(View(model));
        }
        public async Task<ActionResult> Create(InternalUserCreationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            var userCreationData = new InternalUserCreationData
            {
                Email = model.Email,
                FirstName = model.Name,
                Surname = model.Surname,
                Password = model.Password,
                ConfirmPassword = model.ConfirmPassword,
                ActivationBaseUrl = externalRouteService.ActivateInternalUserAccountUrl,
            };

            try
            {
                using (var client = apiClient())
                {
                    var userId = await client.User.CreateInternalUserAsync(userCreationData);
                    var loginResult = await weeeAuthorization.SignIn(model.Email, model.Password, false);

                    if (loginResult.Successful)
                    {
                        await client.SendAsync(loginResult.AccessToken, new AddCompetentAuthorityUser(userId));
                        return RedirectToAction("AdminAccountActivationRequired");
                    }

                    ModelState.AddModelError(string.Empty, loginResult.ErrorMessage);
                }
            }
            catch (ApiBadRequestException ex)
            {
                this.HandleBadRequest(ex);

                if (ModelState.IsValid)
                {
                    throw;
                }

                AddRemoveModelStateErrors();
            }
            catch (SmtpException)
            {
                ViewBag.Errors = new[] { "The activation email was not sent, please try again later." };
            }

            return View(model);
        }
        public async Task HttpPost_NewUser_IsValid()
        {
            var userCreationViewModel = GetValidUserCreationViewModel();
            var newUser = A.Fake <IUnauthenticatedUser>();

            var userCreationData = new InternalUserCreationData();

            A.CallTo(() => newUser.CreateInternalUserAsync(A <InternalUserCreationData> ._, A <string> ._))
            .Invokes((InternalUserCreationData u) => userCreationData = u)
            .Returns(Task.FromResult(A.Dummy <string>()));

            A.CallTo(() => weeeClient.User).Returns(newUser);

            await NewUserController().UserCreation(userCreationViewModel);
        }
Exemple #8
0
        public async Task CreateInternalUser_WithValidModel_IssuesCanAccessInternalAreaClaim()
        {
            // Arrange
            ApplicationUser        capturedUser = null;
            ApplicationUserManager userManager  = A.Fake <ApplicationUserManager>();

            A.CallTo(() => userManager.CreateAsync(A <ApplicationUser> ._))
            .Invokes((ApplicationUser user) => capturedUser = user)
            .Returns(IdentityResult.Success);

            A.CallTo(() => userManager.CreateAsync(A <ApplicationUser> ._, A <string> ._))
            .Invokes((ApplicationUser user, string password) => capturedUser = user)
            .Returns(IdentityResult.Success);

            IUserContext            userContext            = A.Fake <IUserContext>();
            IWeeeEmailService       emailService           = A.Fake <IWeeeEmailService>();
            IGetAdminUserDataAccess getAdminUserDataAccess = A.Dummy <IGetAdminUserDataAccess>();

            UnauthenticatedUserController controller = new UnauthenticatedUserController(
                userManager,
                userContext,
                emailService,
                getAdminUserDataAccess);

            InternalUserCreationData model = new InternalUserCreationData()
            {
                FirstName         = "John",
                Surname           = "Smith",
                Email             = "*****@*****.**",
                Password          = "******",
                ConfirmPassword   = "******",
                ActivationBaseUrl = "ActivationBaseUrl"
            };

            // Act
            await controller.CreateInternalUser(model);

            // Assert
            Assert.NotNull(capturedUser);

            int claimCount = capturedUser.Claims.Count(
                c => c.ClaimType == ClaimTypes.AuthenticationMethod &&
                c.ClaimValue == Claims.CanAccessInternalArea);

            Assert.True(claimCount == 1, "A single \"CanAccessInternalArea\" claim was not issued to the user.");
        }
        public async void HttpPost_Create_ModelIsValid_ShouldIncludeUserDetails()
        {
            var model = ValidModel();
            var newUser = A.Fake<IUnauthenticatedUser>();

            var userCreationData = new InternalUserCreationData();
            A.CallTo(() => newUser.CreateInternalUserAsync(A<InternalUserCreationData>._))
                .Invokes((InternalUserCreationData u) => userCreationData = u)
                .Returns(Task.FromResult(A.Dummy<string>()));

            A.CallTo(() => apiClient.User).Returns(newUser);

            A.CallTo(() => weeeAuthorization.SignIn(A<string>._, A<string>._, A<bool>._))
                .Returns(LoginResult.Success("dshadjk", A.Dummy<ActionResult>()));

            await AccountController().Create(model);

            Assert.Equal(model.Name, userCreationData.FirstName);
            Assert.Equal(model.Surname, userCreationData.Surname);
            Assert.Equal(model.Email, userCreationData.Email);
            Assert.Equal(model.Password, userCreationData.Password);
        }
 public async Task<string> CreateInternalUserAsync(InternalUserCreationData userCreationData)
 {
     var response = await httpClient.PostAsJsonAsync(Controller + "CreateInternalUser", userCreationData);
     return await response.CreateResponseAsync<string>();
 }