From 0071aba6eec808612a56839e3c0289c203de2ba9 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 2 Aug 2016 03:15:24 -0300 Subject: [PATCH 1/5] 351 Added Enclave Resolver and default Organization Enclave Resolver (Which is not yet used anywhere really) --- ...ultOrganizationEnclaveResolverFactory.java | 36 +++++ .../sdk/servlet/enclave/EnclaveResolver.java | 30 ++++ .../enclave/OrganizationEnclaveResolver.java | 81 +++++++++++ .../servlet/config/web.stormpath.properties | 1 + .../OrganizationEnclaveResolverTest.groovy | 136 ++++++++++++++++++ 5 files changed, 284 insertions(+) create mode 100644 extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java create mode 100644 extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java create mode 100644 extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java create mode 100644 extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java new file mode 100644 index 0000000000..75bcd289cf --- /dev/null +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java @@ -0,0 +1,36 @@ +/* + * Copyright 2016 Stormpath, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.stormpath.sdk.servlet.enclave; + +import com.stormpath.sdk.organization.Organization; +import com.stormpath.sdk.servlet.config.ConfigSingletonFactory; +import com.stormpath.sdk.servlet.http.Resolver; +import com.stormpath.sdk.servlet.organization.DefaultOrganizationNameKeyResolver; + +import javax.servlet.ServletContext; + +/** + * @since 1.0.0 + */ +public class DefaultOrganizationEnclaveResolverFactory extends ConfigSingletonFactory> { + + protected Resolver createInstance(ServletContext servletContext) throws Exception { + OrganizationEnclaveResolver organizationEnclaveResolver = new OrganizationEnclaveResolver(); + DefaultOrganizationNameKeyResolver organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); + organizationEnclaveResolver.setOrganizationNameKeyResolver(organizationNameKeyResolver); + return organizationEnclaveResolver; + } +} diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java new file mode 100644 index 0000000000..4d90a46e7a --- /dev/null +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java @@ -0,0 +1,30 @@ +/* + * Copyright 2016 Stormpath, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.stormpath.sdk.servlet.enclave; + +import com.stormpath.sdk.servlet.http.Resolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @since 1.0.0 + */ +public interface EnclaveResolver extends Resolver { + + T get(HttpServletRequest request, HttpServletResponse response); + +} diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java new file mode 100644 index 0000000000..9778774646 --- /dev/null +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java @@ -0,0 +1,81 @@ +/* + * Copyright 2016 Stormpath, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.stormpath.sdk.servlet.enclave; + +import com.stormpath.sdk.accountStoreMapping.AccountStoreMapping; +import com.stormpath.sdk.application.Application; +import com.stormpath.sdk.application.ApplicationAccountStoreMappingList; +import com.stormpath.sdk.directory.AccountStore; +import com.stormpath.sdk.directory.AccountStoreVisitor; +import com.stormpath.sdk.directory.Directory; +import com.stormpath.sdk.group.Group; +import com.stormpath.sdk.organization.Organization; +import com.stormpath.sdk.servlet.application.ApplicationResolver; +import com.stormpath.sdk.servlet.http.Resolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @since 1.0.0 + */ +public class OrganizationEnclaveResolver implements EnclaveResolver { + + Resolver organizationNameKeyResolver; + ApplicationResolver applicationResolver = ApplicationResolver.INSTANCE; + + public void setOrganizationNameKeyResolver(Resolver organizationNameKeyResolver) { + this.organizationNameKeyResolver = organizationNameKeyResolver; + } + + public Organization get(HttpServletRequest request, HttpServletResponse response) { + + final String domainName = organizationNameKeyResolver.get(request, response); + if (domainName == null) { + return null; + } + + Application application = applicationResolver.getApplication(request); + ApplicationAccountStoreMappingList accountStoreMappings = application.getAccountStoreMappings(); + final Organization organization[] = {null}; + for (AccountStoreMapping accountStoreMapping : accountStoreMappings) { + final AccountStore accountStore = accountStoreMapping.getAccountStore(); + + accountStore.accept(new AccountStoreVisitor() { + @Override + public void visit(Group group) { + //no-op + } + + @Override + public void visit(Directory directory) { + //no-op + } + + @Override + public void visit(Organization org) { + if (domainName.equals(org.getName())) { + organization[0] = org; + } + } + }); + + if (organization[0] != null) break; + } + return organization[0]; + } + +} diff --git a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties index 0874b14362..ceb7b7660d 100644 --- a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties +++ b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties @@ -185,6 +185,7 @@ stormpath.web.idSite.OrganizationResolverFactory = com.stormpath.sdk.servlet.fil # Inferred based on heuristics by default. However if your application is not deployed to an apex domain, like # myapp.com, you *must* specify your application's base domain, e.g. myapp.mycompany.com stormpath.web.application.domain = +stormpath.web.application.enclave.resolver = com.stormpath.sdk.servlet.enclave.DefaultOrganizationEnclaveResolverFactory stormpath.web.request.event.publisher = com.stormpath.sdk.servlet.event.impl.EventPublisherFactory stormpath.web.request.event.listener = com.stormpath.sdk.servlet.event.RequestEventListenerAdapter diff --git a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy new file mode 100644 index 0000000000..dcf5e3c414 --- /dev/null +++ b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy @@ -0,0 +1,136 @@ +/* + * Copyright 2016 Stormpath, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.stormpath.sdk.servlet.enclave + +import com.stormpath.sdk.accountStoreMapping.AccountStoreMapping +import com.stormpath.sdk.application.Application +import com.stormpath.sdk.application.ApplicationAccountStoreMappingList +import com.stormpath.sdk.directory.AccountStoreVisitor +import com.stormpath.sdk.directory.Directory +import com.stormpath.sdk.group.Group +import com.stormpath.sdk.organization.Organization +import com.stormpath.sdk.servlet.organization.DefaultOrganizationNameKeyResolver +import com.stormpath.sdk.servlet.util.SubdomainResolver +import org.easymock.Capture +import org.easymock.IAnswer +import org.testng.annotations.Test + +import javax.servlet.http.HttpServletRequest + +import static org.easymock.EasyMock.* +import static org.testng.Assert.assertEquals + +/** + * @since 1.0.0 + */ +class OrganizationEnclaveResolverTest { + + @Test + void testOrganizationExistInAccountStores() { + def request = createMock(HttpServletRequest) + def application = createStrictMock(Application) + def applicationAccountStoreMappingList = createStrictMock(ApplicationAccountStoreMappingList) + def iterator = createMock(Iterator) + def accountStoreMapping = createMock(AccountStoreMapping) + def dir = createMock(Directory) + def organization = createMock(Organization) + + expect(request.getAttribute(Application.getCanonicalName())).andReturn(application) + expect(request.getHeader(eq('Host'))).andStubReturn('bar.foo.com') + expect(application.getAccountStoreMappings()).andReturn(applicationAccountStoreMappingList) + expect(applicationAccountStoreMappingList.iterator()).andReturn(iterator) + expect(iterator.hasNext()).andReturn(true) + expect(iterator.next()).andReturn(accountStoreMapping) + expect(accountStoreMapping.getAccountStore()).andReturn(dir) + expect(dir.accept(anyObject())).andVoid() + expect(iterator.hasNext()).andReturn(true) + expect(iterator.next()).andReturn(accountStoreMapping) + expect(accountStoreMapping.getAccountStore()).andReturn(organization) + + Capture capturedArgument = new Capture(); + expect(organization.accept(and(capture(capturedArgument), isA(AccountStoreVisitor)))).andAnswer( + new IAnswer() { + @Override + public AccountStoreVisitor answer() throws Throwable { + AccountStoreVisitor accountStoreVisitor = (AccountStoreVisitor) capturedArgument.getValue(); + accountStoreVisitor.visit(organization); + } + } + ) + expect(organization.getName()).andReturn("bar") //we return "bar" as the organization name found in account store mappings + + replay(request, application, applicationAccountStoreMappingList, iterator, accountStoreMapping, dir, organization) + + def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); + organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) + def resolver = new OrganizationEnclaveResolver(); + resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) + + assertEquals(resolver.get(request, null), organization) //expected Organization is 'organization' + + verify(request, application, applicationAccountStoreMappingList, iterator, accountStoreMapping, dir, organization) + } + + @Test + void testOrganizationDoesNotExistInAccountStores() { + def request = createMock(HttpServletRequest) + def application = createStrictMock(Application) + def applicationAccountStoreMappingList = createStrictMock(ApplicationAccountStoreMappingList) + def iterator = createMock(Iterator) + def accountStoreMapping = createMock(AccountStoreMapping) + def group = createMock(Group) + + expect(request.getAttribute(Application.getCanonicalName())).andReturn(application) + expect(request.getHeader(eq('Host'))).andStubReturn('bar.foo.com') + expect(application.getAccountStoreMappings()).andReturn(applicationAccountStoreMappingList) + expect(applicationAccountStoreMappingList.iterator()).andReturn(iterator) + expect(iterator.hasNext()).andReturn(true) + expect(iterator.next()).andReturn(accountStoreMapping) + expect(accountStoreMapping.getAccountStore()).andReturn(group) + expect(group.accept(anyObject())).andVoid() + expect(iterator.hasNext()).andReturn(false) + + replay(request, application, applicationAccountStoreMappingList, iterator, accountStoreMapping, group) + + def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); + organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) + def resolver = new OrganizationEnclaveResolver(); + resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) + + assertEquals(resolver.get(request, null), null) //expected Organization is null + + verify(request, application, applicationAccountStoreMappingList, iterator, accountStoreMapping, group) + } + + @Test + void testNoOrganizationDomain() { + def request = createMock(HttpServletRequest) + + expect(request.getHeader(eq('Host'))).andStubReturn('foo.com') //no organization found in url + + replay(request) + + def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); + organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) + def resolver = new OrganizationEnclaveResolver(); + resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) + + assertEquals(resolver.get(request, null), null) + + verify(request) + } + +} From 88c45a6c08069689b82a64acf6990f0b259c6a4a Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 2 Aug 2016 03:26:12 -0300 Subject: [PATCH 2/5] 351 changed expected number of properties in verifyWebPropertiesInDefaultAreInSpec --- .../sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy index 04f4d7c69d..7a02883c10 100644 --- a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy +++ b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy @@ -77,7 +77,7 @@ class SpecConfigVersusWebPropertiesTest { specProperties.containsKey(k) ? null : k } - def expected_diff_size = 80 + def expected_diff_size = 81 if (diff.size != expected_diff_size) { println "It looks like a property was added or removed from the Framework Spec or web.stormpath.properties." From 2a4ede93112cb78e8c2781bdb529f619ec47b553 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 2 Aug 2016 12:27:46 -0300 Subject: [PATCH 3/5] 351 renamed EnclaveResolver to TenantResolver --- .../DefaultOrganizationTenantResolverFactory.java} | 10 +++++----- .../OrganizationTenantResolver.java} | 4 ++-- .../TenantResolver.java} | 4 ++-- .../sdk/servlet/config/web.stormpath.properties | 2 +- .../OrganizationTenantResolverTest.groovy} | 10 +++++----- 5 files changed, 15 insertions(+), 15 deletions(-) rename extensions/servlet/src/main/java/com/stormpath/sdk/servlet/{enclave/DefaultOrganizationEnclaveResolverFactory.java => tenant/DefaultOrganizationTenantResolverFactory.java} (74%) rename extensions/servlet/src/main/java/com/stormpath/sdk/servlet/{enclave/OrganizationEnclaveResolver.java => tenant/OrganizationTenantResolver.java} (95%) rename extensions/servlet/src/main/java/com/stormpath/sdk/servlet/{enclave/EnclaveResolver.java => tenant/TenantResolver.java} (85%) rename extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/{enclave/OrganizationEnclaveResolverTest.groovy => tenant/OrganizationTenantResolverTest.groovy} (95%) diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java similarity index 74% rename from extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java rename to extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java index 75bcd289cf..3a323e609f 100644 --- a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/DefaultOrganizationEnclaveResolverFactory.java +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.stormpath.sdk.servlet.enclave; +package com.stormpath.sdk.servlet.tenant; import com.stormpath.sdk.organization.Organization; import com.stormpath.sdk.servlet.config.ConfigSingletonFactory; @@ -25,12 +25,12 @@ /** * @since 1.0.0 */ -public class DefaultOrganizationEnclaveResolverFactory extends ConfigSingletonFactory> { +public class DefaultOrganizationTenantResolverFactory extends ConfigSingletonFactory> { protected Resolver createInstance(ServletContext servletContext) throws Exception { - OrganizationEnclaveResolver organizationEnclaveResolver = new OrganizationEnclaveResolver(); + OrganizationTenantResolver organizationTenantResolver = new OrganizationTenantResolver(); DefaultOrganizationNameKeyResolver organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); - organizationEnclaveResolver.setOrganizationNameKeyResolver(organizationNameKeyResolver); - return organizationEnclaveResolver; + organizationTenantResolver.setOrganizationNameKeyResolver(organizationNameKeyResolver); + return organizationTenantResolver; } } diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java similarity index 95% rename from extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java rename to extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java index 9778774646..1da25bafe7 100644 --- a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolver.java +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.stormpath.sdk.servlet.enclave; +package com.stormpath.sdk.servlet.tenant; import com.stormpath.sdk.accountStoreMapping.AccountStoreMapping; import com.stormpath.sdk.application.Application; @@ -32,7 +32,7 @@ /** * @since 1.0.0 */ -public class OrganizationEnclaveResolver implements EnclaveResolver { +public class OrganizationTenantResolver implements TenantResolver { Resolver organizationNameKeyResolver; ApplicationResolver applicationResolver = ApplicationResolver.INSTANCE; diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/TenantResolver.java similarity index 85% rename from extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java rename to extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/TenantResolver.java index 4d90a46e7a..76ffa7fae7 100644 --- a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/enclave/EnclaveResolver.java +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/TenantResolver.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.stormpath.sdk.servlet.enclave; +package com.stormpath.sdk.servlet.tenant; import com.stormpath.sdk.servlet.http.Resolver; @@ -23,7 +23,7 @@ /** * @since 1.0.0 */ -public interface EnclaveResolver extends Resolver { +public interface TenantResolver extends Resolver { T get(HttpServletRequest request, HttpServletResponse response); diff --git a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties index ceb7b7660d..cba2d4c22b 100644 --- a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties +++ b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties @@ -185,7 +185,7 @@ stormpath.web.idSite.OrganizationResolverFactory = com.stormpath.sdk.servlet.fil # Inferred based on heuristics by default. However if your application is not deployed to an apex domain, like # myapp.com, you *must* specify your application's base domain, e.g. myapp.mycompany.com stormpath.web.application.domain = -stormpath.web.application.enclave.resolver = com.stormpath.sdk.servlet.enclave.DefaultOrganizationEnclaveResolverFactory +stormpath.web.application.tenant.resolver = com.stormpath.sdk.servlet.tenant.DefaultOrganizationTenantResolverFactory stormpath.web.request.event.publisher = com.stormpath.sdk.servlet.event.impl.EventPublisherFactory stormpath.web.request.event.listener = com.stormpath.sdk.servlet.event.RequestEventListenerAdapter diff --git a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy similarity index 95% rename from extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy rename to extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy index dcf5e3c414..a134a4d82e 100644 --- a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/enclave/OrganizationEnclaveResolverTest.groovy +++ b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.stormpath.sdk.servlet.enclave +package com.stormpath.sdk.servlet.tenant import com.stormpath.sdk.accountStoreMapping.AccountStoreMapping import com.stormpath.sdk.application.Application @@ -36,7 +36,7 @@ import static org.testng.Assert.assertEquals /** * @since 1.0.0 */ -class OrganizationEnclaveResolverTest { +class OrganizationTenantResolverTest { @Test void testOrganizationExistInAccountStores() { @@ -76,7 +76,7 @@ class OrganizationEnclaveResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationEnclaveResolver(); + def resolver = new OrganizationTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), organization) //expected Organization is 'organization' @@ -107,7 +107,7 @@ class OrganizationEnclaveResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationEnclaveResolver(); + def resolver = new OrganizationTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), null) //expected Organization is null @@ -125,7 +125,7 @@ class OrganizationEnclaveResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationEnclaveResolver(); + def resolver = new OrganizationTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), null) From bdd56deec58072b0b86219312758e56e4a2fa58f Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Tue, 2 Aug 2016 14:21:55 -0700 Subject: [PATCH 4/5] Refactored class names per @lhazlewood --- ...tionTenantResolver.java => DefaultTenantResolver.java} | 2 +- ...lverFactory.java => DefaultTenantResolverFactory.java} | 8 ++++---- .../stormpath/sdk/servlet/config/web.stormpath.properties | 2 +- ...solverTest.groovy => DefaultTenantResolverTest.groovy} | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) rename extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/{OrganizationTenantResolver.java => DefaultTenantResolver.java} (97%) rename extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/{DefaultOrganizationTenantResolverFactory.java => DefaultTenantResolverFactory.java} (77%) rename extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/{OrganizationTenantResolverTest.groovy => DefaultTenantResolverTest.groovy} (96%) diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolver.java similarity index 97% rename from extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java rename to extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolver.java index 1da25bafe7..ce14d5fcf2 100644 --- a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolver.java +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolver.java @@ -32,7 +32,7 @@ /** * @since 1.0.0 */ -public class OrganizationTenantResolver implements TenantResolver { +public class DefaultTenantResolver implements TenantResolver { Resolver organizationNameKeyResolver; ApplicationResolver applicationResolver = ApplicationResolver.INSTANCE; diff --git a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverFactory.java similarity index 77% rename from extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java rename to extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverFactory.java index 3a323e609f..9f240c1613 100644 --- a/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultOrganizationTenantResolverFactory.java +++ b/extensions/servlet/src/main/java/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverFactory.java @@ -25,12 +25,12 @@ /** * @since 1.0.0 */ -public class DefaultOrganizationTenantResolverFactory extends ConfigSingletonFactory> { +public class DefaultTenantResolverFactory extends ConfigSingletonFactory> { protected Resolver createInstance(ServletContext servletContext) throws Exception { - OrganizationTenantResolver organizationTenantResolver = new OrganizationTenantResolver(); + DefaultTenantResolver defaultTenantResolver = new DefaultTenantResolver(); DefaultOrganizationNameKeyResolver organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); - organizationTenantResolver.setOrganizationNameKeyResolver(organizationNameKeyResolver); - return organizationTenantResolver; + defaultTenantResolver.setOrganizationNameKeyResolver(organizationNameKeyResolver); + return defaultTenantResolver; } } diff --git a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties index cba2d4c22b..ef25dfaf29 100644 --- a/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties +++ b/extensions/servlet/src/main/resources/com/stormpath/sdk/servlet/config/web.stormpath.properties @@ -185,7 +185,7 @@ stormpath.web.idSite.OrganizationResolverFactory = com.stormpath.sdk.servlet.fil # Inferred based on heuristics by default. However if your application is not deployed to an apex domain, like # myapp.com, you *must* specify your application's base domain, e.g. myapp.mycompany.com stormpath.web.application.domain = -stormpath.web.application.tenant.resolver = com.stormpath.sdk.servlet.tenant.DefaultOrganizationTenantResolverFactory +stormpath.web.application.tenant.resolver = com.stormpath.sdk.servlet.tenant.DefaultTenantResolverFactory stormpath.web.request.event.publisher = com.stormpath.sdk.servlet.event.impl.EventPublisherFactory stormpath.web.request.event.listener = com.stormpath.sdk.servlet.event.RequestEventListenerAdapter diff --git a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverTest.groovy similarity index 96% rename from extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy rename to extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverTest.groovy index a134a4d82e..9a40a95c75 100644 --- a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/OrganizationTenantResolverTest.groovy +++ b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/tenant/DefaultTenantResolverTest.groovy @@ -36,7 +36,7 @@ import static org.testng.Assert.assertEquals /** * @since 1.0.0 */ -class OrganizationTenantResolverTest { +class DefaultTenantResolverTest { @Test void testOrganizationExistInAccountStores() { @@ -76,7 +76,7 @@ class OrganizationTenantResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationTenantResolver(); + def resolver = new DefaultTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), organization) //expected Organization is 'organization' @@ -107,7 +107,7 @@ class OrganizationTenantResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationTenantResolver(); + def resolver = new DefaultTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), null) //expected Organization is null @@ -125,7 +125,7 @@ class OrganizationTenantResolverTest { def organizationNameKeyResolver = new DefaultOrganizationNameKeyResolver(); organizationNameKeyResolver.setSubdomainResolver(new SubdomainResolver()) - def resolver = new OrganizationTenantResolver(); + def resolver = new DefaultTenantResolver(); resolver.setOrganizationNameKeyResolver(organizationNameKeyResolver) assertEquals(resolver.get(request, null), null) From 7d10e794a49d7092d47c17828f092d5a0065542f Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Wed, 4 Jan 2017 09:27:49 -0700 Subject: [PATCH 5/5] Re-enable `verifyPropertiesInSpecAreInDefault`. It will pass now, but there are 22 missing properties in the spec and not in the Java SDK. --- .../SpecConfigVersusWebPropertiesTest.groovy | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy index e546c3d02e..a4983af53c 100644 --- a/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy +++ b/extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/config/SpecConfigVersusWebPropertiesTest.groovy @@ -51,13 +51,7 @@ class SpecConfigVersusWebPropertiesTest { defaultProperties = new ResourcePropertiesSource(defaultConfig).properties } - /** - * NOTE: This test is temporarily disabled as 15 new properties have been added to the framework spec for - * multi-tenancy that are not yet implemented in the SDK. - * Per high priority ticket: https://github.com/stormpath/stormpath-sdk-java/issues/1033, - * Todo: this should be re-enabled and support for the new properties should be added asap - */ - @Test(enabled=false) + @Test void verifyPropertiesInSpecAreInDefault() { def diff = specProperties.findResults { k,v -> @@ -74,9 +68,9 @@ class SpecConfigVersusWebPropertiesTest { println "Or you could adjust the assertEquals statement in this method to allow for this missing key as a temporary solution." } - //todo: 15 new properties related to organizations were added to the spec, we do not yet suppor them. + //todo: 22 new properties related to organizations were added to the spec, we do not yet support them. //see https://github.com/stormpath/stormpath-sdk-java/issues/1052 - assertEquals 15, diff.size(), "Missing keys in default config: ${diff}" + assertEquals diff.size(), 22, "Missing keys in default config: ${diff}" } @Test @@ -85,7 +79,7 @@ class SpecConfigVersusWebPropertiesTest { specProperties.containsKey(k) ? null : k } - def expected_diff_size = 81 + def expected_diff_size = 83 if (diff.size != expected_diff_size) { println "It looks like a property was added or removed from the Framework Spec or web.stormpath.properties." @@ -95,20 +89,20 @@ class SpecConfigVersusWebPropertiesTest { assertEquals diff.size(), expected_diff_size, "Missing keys in spec config: ${diff}" // to see the keys missing in spec, uncomment the following - /*if (diff.size > 0) { + if (diff.size > 0) { println "Missing keys in spec:" diff.each { println "${it}" } - }*/ + } // to see the keys and their values for updating the wiki, uncomment the following // https://github.com/stormpath/stormpath-sdk-java/wiki/1.0-Configuration-Changes-&-Additions-Guide#not-in-specification - /* + SortedSet keys = new TreeSet(properties.keySet()); keys.each { println("|${it}|" + properties.get(it) + "|") - }*/ + } } @Test(enabled = false)