public async Task UpdateSubscribesUsers()
        {
            // Arrange.
            var users         = TestUsers.ToList();
            var policyService = new TestSecurityPolicyService();
            var entitiesMock  = policyService.MockEntitiesContext;

            entitiesMock.Setup(c => c.Users).Returns(users.MockDbSet().Object);
            var controller   = new SecurityPolicyController(entitiesMock.Object, policyService);
            var subscription = policyService.Mocks.Subscription.Object;

            Assert.False(users.Any(u => policyService.IsSubscribed(u, subscription)));

            // Act.
            var viewModel = new SecurityPolicyViewModel()
            {
                UsersQuery        = "A,B,C",
                UserSubscriptions = new[]
                {
                    $"{{\"u\":\"A\",\"g\":\"{subscription.SubscriptionName}\"}}",
                    $"{{\"u\":\"C\",\"g\":\"{subscription.SubscriptionName}\"}}"
                }
            };
            var result = await controller.Update(viewModel);

            // Assert.
            Assert.True(policyService.IsSubscribed(users[0], subscription));
            Assert.False(policyService.IsSubscribed(users[1], subscription));
            Assert.True(policyService.IsSubscribed(users[2], subscription));

            policyService.MockEntitiesContext.Verify(c => c.SaveChangesAsync(), Times.Exactly(2));
        }
 public void Setup()
 {
     server = new QuickCoursesTestServer();
     server.UseCourses(TestCourses.CreateBasicSample());
     server.UseUsers(TestUsers.CreateSuperUserSample(), TestUsers.CreateUserSample());
     client = server.CreateClient();
 }
        public async Task <ActionResult <TestUsers> > PostTodoItem(TestUsers item)
        {
            _context.TestUsers.Add(item);
            await _context.SaveChangesAsync();

            return(CreatedAtAction(nameof(GetTodoItem), new { id = item.Id }, item));
        }
            public void WhenUserHasNoBlocklistReturnsAllUsers()
            {
                var result = Service.GetOnlineUsersForLobbyUser(TestUsers.First());

                Assert.AreEqual(TestUsers.Count, result.Count);
                CollectionAssert.AreEquivalent(TestUsers, result);
            }
Пример #5
0
        public async Task UpdateUnsubscribesUsers()
        {
            // Arrange.
            var users         = TestUsers.ToList();
            var policyService = new TestSecurityPolicyService();
            var entitiesMock  = policyService.MockEntitiesContext;

            entitiesMock.Setup(c => c.Users).Returns(users.MockDbSet().Object);
            var controller   = new SecurityPolicyController(entitiesMock.Object, policyService);
            var subscription = policyService.Mocks.Subscription.Object;

            users.ForEach(async u => await policyService.SubscribeAsync(u, subscription));
            policyService.MockEntitiesContext.ResetCalls();

            // Act.
            var model = new List <string>
            {
                $"{{\"u\":\"A\",\"g\":\"{subscription.SubscriptionName}\",\"v\":\"false\"}}",
                $"{{\"u\":\"B\",\"g\":\"{subscription.SubscriptionName}\",\"v\":\"true\"}}",
                $"{{\"u\":\"C\",\"g\":\"{subscription.SubscriptionName}\",\"v\":\"false\"}}"
            };
            var result = await controller.Update(model);

            // Assert.
            Assert.False(policyService.IsSubscribed(users[0], subscription));
            Assert.True(policyService.IsSubscribed(users[1], subscription));
            Assert.False(policyService.IsSubscribed(users[2], subscription));

            policyService.MockEntitiesContext.Verify(c => c.SaveChangesAsync(), Times.Exactly(2));
        }
Пример #6
0
        public void GetIdByLogin_Test()
        {
            var user = TestUsers.CreateUserSample();

            var result = client.GetIdByLoginAsync(ticket, user.Login).Result;

            Assert.True(!string.IsNullOrEmpty(result));
        }
Пример #7
0
 // This method gets called by the runtime. Use this method to add services to the container.
 public void ConfigureServices(IServiceCollection services)
 {
     services.AddIdentityServer()
     .AddTestUsers(TestUsers.GetUsers())
     .AddInMemoryClients(Clients.GetClients())
     .AddInMemoryApiResources()
     .AddInMemoryPersistedGrants();
 }
Пример #8
0
 // This method gets called by the runtime. Use this method to add services to the container.
 // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
 public void ConfigureServices(IServiceCollection services)
 {
     services.AddIdentityServer()
     .AddTemporarySigningCredential()
     .AddInMemoryApiResources(ApiResources.GetApiResources())
     .AddInMemoryClients(Clients.GetClients())
     .AddTestUsers(TestUsers.GetUsers());
 }
Пример #9
0
            public async Task WhenUserFoundReturnsUser()
            {
                var user = TestUsers.First();

                var result = await Service.GetUserFromUsernameAsync(user.UserName);

                Assert.IsNotNull(result);
                Assert.AreEqual(user, result);
            }
Пример #10
0
            public async Task WhenEmailAlreadyInUseReturnsFailure()
            {
                var account = TestUtils.GetRandomAccount();

                account.Email = TestUsers.First().Email;
                var result = await Service.RegisterUserAsync(account, "password");

                Assert.IsFalse(result.Success);
            }
Пример #11
0
 public AuthenticateController(
     IIdentityServerInteractionService interaction,
     IHostingEnvironment env,
     TestUserStore users = null)
 {
     _users       = users ?? new TestUserStore(TestUsers.GetTestUsers());
     _interaction = interaction;
     _env         = env;
 }
Пример #12
0
 public static void AddIdentityServerWithDefaults(this IServiceCollection services)
 {
     services.AddIdentityServer()
     .AddInMemoryClients(TestClients.Get())
     .AddInMemoryIdentityResources(TestResources.GetIdentityResources())
     .AddInMemoryApiResources(TestResources.GetApiResources())
     .AddTestUsers(TestUsers.Get())
     .AddDeveloperSigningCredential();
 }
                public async Task ReturnsSuccessAndBroadcastsToAllUsers()
                {
                    var firstUser = TestUsers.First();

                    var result = await Service.StartNewGameAsync(firstUser.ConnectionId, new StartNewGameRequest());

                    Assert.IsTrue(result.Success);

                    SubscriberMock.Verify(s => s.PublishAsync(It.Is <RedisChannel>(channel => channel == RedisChannels.NewGame), It.IsAny <RedisValue>(), It.IsAny <CommandFlags>()), Times.Once);
                }
Пример #14
0
        public async Task NotThrow2()
        {
            UserDto  user     = TestUsers.TestUser();
            Response response = await Send(new SampleAction2 { Message = "foo" })
                                .To("/api/actions/sample-2")
                                .As(user)
                                .ExecuteAndRead();

            response.Value.Should().Be("Hello World foo");
        }
Пример #15
0
            public async Task WhenIncorrectPasswordReturnsNull()
            {
                var user = TestUsers.First();

                UserManagerMock.Setup(um => um.CheckPasswordAsync(It.IsAny <GametekiUser>(), It.IsAny <string>())).ReturnsAsync(false);

                var result = await Service.LoginUserAsync(user.UserName, "password", "127.0.0.1");

                Assert.IsNull(result);
            }
Пример #16
0
        public object PreConnect()
        {
            var num = new Random().Next(0, TestUsers.Count());

            return(new
            {
                code = 0,
                token = TestUsers[num]
            });
        }
            public async Task WhenUserIsAlreadyInGameReturnsFailure()
            {
                var firstUser = TestUsers.First();

                await Service.StartNewGameAsync(firstUser.ConnectionId, new StartNewGameRequest());

                var result = await Service.StartNewGameAsync(firstUser.ConnectionId, new StartNewGameRequest());

                Assert.IsFalse(result.Success);
            }
Пример #18
0
            public async Task WhenSuccessfulReturnsToken()
            {
                var user = TestUsers.First();

                var result = await Service.CreateRefreshTokenAsync(user, "127.0.0.1");

                Assert.IsNotNull(result);
                Assert.AreEqual("127.0.0.1", result.IpAddress);
                Assert.IsNotNull(result.Token);
                Assert.AreEqual(user.Id, result.UserId);
            }
Пример #19
0
            public async Task WhenSucceedsReturnsTrue()
            {
                DbContext.RefreshToken.Add(new RefreshToken {
                    Token = "RefreshToken", User = TestUsers.First()
                });
                await DbContext.SaveChangesAsync();

                var result = await Service.LogoutUserAsync(
                    GenerateTokenForUser(TestUsers.First().UserName, AuthTokenOptionsMock.Object.Value.Issuer, AuthTokenOptionsMock.Object.Value.Key), "RefreshToken");

                Assert.IsTrue(result);
            }
        public async Task <IActionResult> PutTodoItem(long id, TestUsers item)
        {
            if (id != item.Id)
            {
                return(BadRequest());
            }

            _context.Entry(item).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(NoContent());
        }
            public void WhenSuppliedUserHasUserOnTheirBlockListReturnsAllExceptThatUser()
            {
                var sixthUser = TestUsers.ElementAt(6);
                var firstUser = TestUsers.First();

                firstUser.BlockList.Add(sixthUser.Name);

                var result = Service.GetOnlineUsersForLobbyUser(firstUser);

                Assert.AreEqual(TestUsers.Count - 1, result.Count);
                CollectionAssert.DoesNotContain(result, sixthUser);
            }
Пример #22
0
        public static void UseSampleIdentityData(this IApplicationBuilder app)
        {
            using (var scope = app.ApplicationServices.GetService <IServiceScopeFactory>().CreateScope())
            {
                scope.ServiceProvider.GetRequiredService <PersistedGrantDbContext>().Database.Migrate();
                scope.ServiceProvider.GetRequiredService <ConfigurationDbContext>().Database.Migrate();
                scope.ServiceProvider.GetRequiredService <ApplicationDbContext>().Database.Migrate();

                var context = scope.ServiceProvider.GetRequiredService <ConfigurationDbContext>();

                if (!context.Clients.Any())
                {
                    foreach (var client in TestClients.Get())
                    {
                        context.Clients.Add(client.ToEntity());
                    }
                    context.SaveChanges();
                }

                if (!context.IdentityResources.Any())
                {
                    foreach (var resource in TestResources.GetIdentityResources())
                    {
                        context.IdentityResources.Add(resource.ToEntity());
                    }
                    context.SaveChanges();
                }

                if (!context.ApiResources.Any())
                {
                    foreach (var resource in TestResources.GetApiResources())
                    {
                        context.ApiResources.Add(resource.ToEntity());
                    }
                    context.SaveChanges();
                }

                var userManager = scope.ServiceProvider.GetRequiredService <UserManager <IdentityUser> >();
                if (!userManager.Users.Any())
                {
                    foreach (var testUser in TestUsers.Get())
                    {
                        var identityUser = new IdentityUser(testUser.Username)
                        {
                            Id = testUser.SubjectId
                        };

                        userManager.CreateAsync(identityUser, testUser.Password).Wait();
                        userManager.AddClaimsAsync(identityUser, testUser.Claims.ToList()).Wait();
                    }
                }
            }
        }
Пример #23
0
            public async Task WhenCorrectPasswordReturnsResult()
            {
                var user = TestUsers.First();

                UserManagerMock.Setup(um => um.CheckPasswordAsync(It.IsAny <GametekiUser>(), It.IsAny <string>())).ReturnsAsync(true);

                var result = await Service.LoginUserAsync(user.UserName, "password", "127.0.0.1");

                Assert.IsNotNull(result);
                Assert.AreEqual(user, result.User);
                Assert.IsNotNull(result.Token);
                Assert.IsNotNull(result.RefreshToken);
            }
        public IActionResult SaveUser(UserModel model)
        {
            if (model.CreateUser)
            {
                TestUsers.AddUser(model);
            }
            else
            {
                TestUsers.EditUser(model);
            }

            return(RedirectToAction("Index"));
        }
Пример #25
0
            public async Task WhenNoMatchingTokenReturnsNull()
            {
                var token = GenerateTokenForUser("TestUser", AuthTokenOptionsMock.Object.Value.Issuer, AuthTokenOptionsMock.Object.Value.Key);

                DbContext.RefreshToken.Add(new RefreshToken {
                    Token = "SomeRandomString", User = TestUsers.ElementAt(8)
                });
                await DbContext.SaveChangesAsync();

                var result = await Service.RefreshTokenAsync(token, "RefreshToken", "127.0.0.1");

                Assert.IsNull(result);
            }
Пример #26
0
        public async Task <IActionResult> Callback()
        {
            // read external identity from the temporary cookie
            var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);

            if (result?.Succeeded != true)
            {
                throw new Exception("External authentication error");
            }

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                var externalClaims = result.Principal.Claims.Select(c => $"{c.Type}: {c.Value}");
                _logger.LogDebug("External claims: {@claims}", externalClaims);
            }

            // lookup our user and external provider info
            var(user, provider, providerUserId, claims) = await FindUserFromExternalProviderAsync(result);

            if (user == null)
            {
                user = _users.AutoProvisionUser(provider, providerUserId, claims.ToList());
            }

            var model = new UserModel(user);

            model.ProviderSubjectId = providerUserId;
            TestUsers.EditUser(model);

            await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.SubjectId, user.Username));

            var isuser = new IdentityServerUser(user.SubjectId)
            {
                DisplayName = user.Username
            };

            await HttpContext.SignInAsync(isuser, null);

            // delete temporary cookie used during external authentication
            await HttpContext.SignOutAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);

            // validate return URL and redirect back to authorization endpoint or a local page
            var returnUrl = result.Properties.Items["returnUrl"];

            if (_interaction.IsValidReturnUrl(returnUrl) || Url.IsLocalUrl(returnUrl))
            {
                return(Redirect(returnUrl));
            }

            return(Redirect("~/"));
        }
        public ExternalController(
            IIdentityServerInteractionService interaction,
            IClientStore clientStore,
            IEventService events,
            TestUserStore users = null)
        {
            // if the TestUserStore is not in DI, then we'll just use the global users collection
            // this is where you would plug in your own custom identity management library (e.g. ASP.NET Identity)
            _users = users ?? new TestUserStore(TestUsers.GetUsers());

            _interaction = interaction;
            _clientStore = clientStore;
            _events      = events;
        }
Пример #28
0
        public QuickCoursesClientTests()
        {
            server = new QuickCoursesTestServer();
            client = new QuickCoursesClient(ApiVersion.V1, "http://api", server.CreateClient());

            server.UseUsers(TestUsers.CreateSuperUserSample(), TestUsers.CreateUserSample());
            server.UseCourses(TestCourses.CreateBasicSample());

            ticket = client.GetTicketAsync(new AuthData {
                Login = "******", Password = "******"
            }).Result;
            courses     = client.GetCoursesAsync(ticket).Result;
            firstCourse = courses.First();
        }
Пример #29
0
            public async Task WhenPermissionsAddedCallsAdd()
            {
                var user           = TestUsers.First();
                var newPermissions = new Permissions
                {
                    CanEditNews    = true,
                    CanManageUsers = true,
                    CanManageGames = true
                };

                var result = await Service.UpdatePermissionsAsync(user, newPermissions);

                Assert.IsTrue(result);
                Assert.AreEqual(3, user.UserRoles.Count);
            }
Пример #30
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env,
                              RoleManager <UserRoleEntity> roleManager, UserManager <UserEntity> userManager)
        {
            if (env.IsDevelopment())
            {
                //IServiceScopeFactory scopeFactory = app.ApplicationServices
                //    .GetRequiredService<IServiceScopeFactory>();

                //using (IServiceScope scope = scopeFactory.CreateScope())
                //{
                //    RoleManager<UserRoleEntity> roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<UserRoleEntity>>();

                //    // Add test role
                //    AddTestRole(roleManager).Wait();
                //}
                //var roleManager = app.ApplicationServices
                //    .GetRequiredService<RoleManager<UserRoleEntity>>();



                app.UseDeveloperExceptionPage();

                // Lynda Video Tutorial: Part 4 (seed the database with test data)
                // InvalidOperationException is thrown
                // Athletes are currently added in the constructor of the AthleteController
                //var context = app.ApplicationServices.GetRequiredService<FieldScribeAPIContext>();
                //AddTestData(context);
            }

            app.UseHsts(opt =>
            {
                opt.MaxAge(days: 180);
                opt.IncludeSubdomains();
                opt.Preload();
            });


            app.UseAuthentication();

            // Add roles to database
            RolesData.CreateRoles(roleManager).Wait();

            // Add admins and test users to database
            Admins.CreateAdmins(userManager).Wait();
            TestUsers.CreateTestUsers(userManager).Wait();

            app.UseMvc();
        }