public async Task FindApiResourcesByScopeAsync_WhenMultipleResourcesExist_ExpectOnlyRequestedResourcesReturned(ISessionFactory sessionFactory)
        {
            var resource = CreateApiTestResource();

            resource.Scopes.Add(new Scope
            {
                Name        = Guid.NewGuid().ToString(),
                Description = Guid.NewGuid().ToString(),
                DisplayName = Guid.NewGuid().ToString()
            });

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(resource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(CreateApiTestResource()));

                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(CreateApiTestResource()));
            }

            IEnumerable <ApiResource> resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.FindApiResourcesByScopeAsync(new List <string> {
                    resource.Scopes.First().Name
                });
            }

            Assert.NotNull(resources);
            Assert.NotEmpty(resources);
            Assert.Single(resources);
        }
        public async Task FindApiResourcesByScopeAsync_WhenResourceExists_ExpectResourceAndCollectionsReturned(ISessionFactory sessionFactory)
        {
            var resource = CreateApiTestResource();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(resource));
            }

            IEnumerable <ApiResource> resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.FindApiResourcesByScopeAsync(new List <string> {
                    resource.Scopes.First().Name
                });
            }

            Assert.NotEmpty(resources);
            Assert.NotNull(resources);

            Assert.NotNull(resources.First().UserClaims);
            Assert.NotEmpty(resources.First().UserClaims);
            Assert.NotNull(resources.First().ApiSecrets);
            Assert.NotEmpty(resources.First().ApiSecrets);
            Assert.NotNull(resources.First().Scopes);
            Assert.NotEmpty(resources.First().Scopes);
            Assert.Contains(resources.First().Scopes, x => x.UserClaims.Any());
        }
        public async Task FindResourcesAsync_WhenResourcesExist_ExpectResourcesReturned(ISessionFactory sessionFactory)
        {
            var testIdentityResource = CreateIdentityTestResource();
            var testApiResource      = CreateApiTestResource();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(testIdentityResource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(testApiResource));
            }

            Resources resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.FindResourcesByScopeAsync(new List <string>
                {
                    testIdentityResource.Name,
                    testApiResource.Scopes.First().Name
                });
            }

            Assert.NotNull(resources);
            Assert.NotNull(resources.IdentityResources);
            Assert.NotEmpty(resources.IdentityResources);
            Assert.NotNull(resources.ApiResources);
            Assert.NotEmpty(resources.ApiResources);
            Assert.NotNull(resources.IdentityResources.FirstOrDefault(x => x.Name == testIdentityResource.Name));
            Assert.NotNull(resources.ApiResources.FirstOrDefault(x => x.Name == testApiResource.Name));
        }
        public async Task FindApiResourceAsync_WhenResourceExists_ExpectResourceAndCollectionsReturned(ISessionFactory sessionFactory)
        {
            var resource = CreateApiTestResource();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(resource));
            }

            ApiResource foundResource;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                foundResource = await store.FindApiResourceAsync(resource.Name);
            }

            Assert.NotNull(foundResource);

            Assert.NotNull(foundResource.UserClaims);
            Assert.NotEmpty(foundResource.UserClaims);
            Assert.NotNull(foundResource.ApiSecrets);
            Assert.NotEmpty(foundResource.ApiSecrets);
            Assert.NotNull(foundResource.Scopes);
            Assert.NotEmpty(foundResource.Scopes);
            Assert.Contains(foundResource.Scopes, x => x.UserClaims.Any());
        }
        public async Task FindIdentityResourcesByScopeAsync_WhenResourcesExist_ExpectOnlyRequestedReturned(ISessionFactory sessionFactory)
        {
            var resource = CreateIdentityTestResource();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(resource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(CreateIdentityTestResource()));
            }

            IEnumerable <IdentityResource> resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.FindIdentityResourcesByScopeAsync(new List <string>
                {
                    resource.Name
                });
            }

            Assert.NotNull(resources);
            Assert.NotEmpty(resources);
            Assert.Single(resources);
        }
        public async Task FindIdentityResourcesByScopeAsync_WhenResourceExists_ExpectResourceAndCollectionsReturned(ISessionFactory sessionFactory)
        {
            var resource = CreateIdentityTestResource();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(resource));
            }

            IEnumerable <IdentityResource> resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.FindIdentityResourcesByScopeAsync(new List <string>
                {
                    resource.Name
                });
            }

            Assert.NotNull(resources);
            Assert.NotEmpty(resources);
            var foundScope = resources.Single();

            Assert.Equal(resource.Name, foundScope.Name);
            Assert.NotNull(foundScope.UserClaims);
            Assert.NotEmpty(foundScope.UserClaims);
        }
        public async Task IsOriginAllowedAsync_WhenOriginIsNotAllowed_ExpectFalse(ISessionFactory sessionFactory)
        {
            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.Client>(new Client
                {
                    ClientId           = Guid.NewGuid().ToString(),
                    ClientName         = Guid.NewGuid().ToString(),
                    AllowedCorsOrigins = new List <string> {
                        "https://www.identityserver.com"
                    }
                }));
            }

            bool result;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var ctx  = new DefaultHttpContext();
                var svcs = new ServiceCollection();
                svcs.AddSingleton(provider);
                ctx.RequestServices = svcs.BuildServiceProvider();
                var ctxAccessor = new HttpContextAccessor
                {
                    HttpContext = ctx
                };

                var service = new CorsPolicyService(ctxAccessor);
                result = service.IsOriginAllowedAsync("InvalidOrigin").Result;
            }

            Assert.False(result);
        }
        public async Task GetAllResources_WhenAllResourcesRequested_ExpectAllResourcesIncludingHidden(ISessionFactory sessionFactory)
        {
            var visibleIdentityResource = CreateIdentityTestResource();
            var visibleApiResource      = CreateApiTestResource();
            var hiddenIdentityResource  = new IdentityResource {
                Name = Guid.NewGuid().ToString(), ShowInDiscoveryDocument = false
            };
            var hiddenApiResource = new ApiResource
            {
                Name   = Guid.NewGuid().ToString(),
                Scopes = new List <Scope> {
                    new Scope {
                        Name = Guid.NewGuid().ToString(), ShowInDiscoveryDocument = false
                    }
                }
            };

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(visibleIdentityResource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(visibleApiResource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.IdentityResource>(hiddenIdentityResource));

                await provider.Session.SaveAsync(_mapper.Map <Entities.ApiResource>(hiddenApiResource));
            }

            Resources resources;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ResourceStore(provider);
                resources = await store.GetAllResourcesAsync();
            }

            Assert.NotNull(resources);
            Assert.NotEmpty(resources.IdentityResources);
            Assert.NotEmpty(resources.ApiResources);

            Assert.Contains(resources.IdentityResources, x => !x.ShowInDiscoveryDocument);
            Assert.Contains(resources.ApiResources, x => !x.Scopes.Any(y => y.ShowInDiscoveryDocument));
        }
        public async Task FindClientByIdAsync_WhenClientExists_ExpectClientRetured(ISessionFactory sessionFactory)
        {
            var testClient = CreateTestClient();

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                await provider.Session.SaveAsync(_mapper.Map <Entities.Client>(testClient));
            }

            Client client;

            using (var provider = new ConfigurationSessionProvider(sessionFactory.OpenSession))
            {
                var store = new ClientStore(provider);
                client = await store.FindClientByIdAsync(testClient.ClientId);
            }

            Assert.NotNull(client);
        }