String entityIDToBeAdded = ((ConfigMetadataProvider) added.getDelegate()).getEntityID(); if (!StringUtils.hasText(entityIDToBeAdded)) { throw new MetadataProviderException("Emtpy entityID for SAML provider with zoneId:" + providerDefinition.getZoneId() + " and origin:" + providerDefinition.getIdpEntityAlias()); ConfigMetadataProvider existingProvider = (ConfigMetadataProvider) getExtendedMetadataDelegate(existing).getDelegate(); if (entityIDToBeAdded.equals(existingProvider.getEntityID()) && !(existing.getUniqueAlias().equals(clone.getUniqueAlias()))) {
String metadataEntityId = ((ConfigMetadataProvider) added.getDelegate()).getEntityID(); if (provider.getEntityId() == null) { provider.setEntityId(metadataEntityId);
switch (def.getIdpEntityAlias()) { case "okta-local": { ComparableProvider provider = (ComparableProvider) configurator.getExtendedMetadataDelegateFromCache(def).getDelegate(); assertEquals("http://www.okta.com/k2lvtem0VAJDMINKEYJW", provider.getEntityID()); break; ComparableProvider provider = (ComparableProvider) configurator.getExtendedMetadataDelegateFromCache(def).getDelegate(); assertEquals("http://www.okta.com/k2lvtem0VAJDMINKEYJX", provider.getEntityID()); break; ComparableProvider provider = (ComparableProvider) configurator.getExtendedMetadataDelegateFromCache(def).getDelegate(); assertEquals("http://www.okta.com/k2lw4l5bPODCMIIDBRYZ", provider.getEntityID()); break; ComparableProvider provider = (ComparableProvider) configurator.getExtendedMetadataDelegateFromCache(def).getDelegate(); assertEquals("http://simplesamlphp.somewhere.com/saml2/idp/metadata.php", provider.getEntityID()); break; ComparableProvider provider = (ComparableProvider) configurator.getExtendedMetadataDelegateFromCache(def).getDelegate(); assertEquals("http://www.okta.com/k2lvtem0VAJDMINKEYJW", provider.getEntityID()); break;
@Test public void sp_initialized_in_non_snarl_metadata_manager() throws Exception { ExtendedMetadataDelegate localServiceProvider = spManager.getLocalServiceProvider(); assertNotNull(localServiceProvider); MetadataProvider provider = localServiceProvider.getDelegate(); assertNotNull(provider); assertTrue(provider instanceof MetadataMemoryProvider); String providerSpAlias = spManager.getProviderSpAlias(localServiceProvider); assertEquals(entityAlias, providerSpAlias); assertEquals(entityID, spManager.getEntityIdForAlias(providerSpAlias)); }
@Test public void testGetEntityId() throws Exception { conf.validateSamlServiceProvider(mockSamlServiceProviderForZone("uaa")); for (SamlServiceProviderHolder holder : conf.getSamlServiceProviders()) { SamlServiceProvider provider = holder.getSamlServiceProvider(); switch (provider.getEntityId()) { case "cloudfoundry-saml-login": { ComparableProvider compProvider = (ComparableProvider) conf.getExtendedMetadataDelegate(provider) .getDelegate(); assertEquals("cloudfoundry-saml-login", compProvider.getEntityID()); break; } default: fail(String.format("Unknown provider %s", provider.getEntityId())); } } }
@Test public void sp_initialization_in_non_snarl_metadata_manager() throws Exception { String subdomain = new RandomValueStringGenerator().generate().toLowerCase(); IdentityZone zone = new IdentityZone() .setConfig(new IdentityZoneConfiguration()) .setSubdomain(subdomain) .setId(subdomain) .setName(subdomain); zone = zoneProvisioning.create(zone); IdentityZoneHolder.set(zone); ExtendedMetadataDelegate localServiceProvider = spManager.getLocalServiceProvider(); assertNotNull(localServiceProvider); MetadataProvider provider = localServiceProvider.getDelegate(); assertNotNull(provider); assertTrue(provider instanceof MetadataMemoryProvider); String providerSpAlias = spManager.getProviderSpAlias(localServiceProvider); assertEquals(subdomain + "." + entityAlias, providerSpAlias); assertEquals(addSubdomainToEntityId(entityID, subdomain), spManager.getEntityIdForAlias(providerSpAlias)); }
@Override public String toString() { return getDelegate().toString(); }
/** * Equality is based on the object this class delegates to. * @param obj object * @return true when obj equals delegate, in case obj is a wrapper itself only its delegate is compared */ @Override public boolean equals(Object obj) { if (obj instanceof ExtendedMetadataDelegate) { ExtendedMetadataDelegate del = (ExtendedMetadataDelegate) obj; return delegate.equals(del.getDelegate()); } else { return false; } }
/** * Method destroys the metadata delegate. */ public void destroy() { if (getDelegate() instanceof AbstractMetadataProvider) { log.debug("Destroying delegate"); AbstractMetadataProvider provider = (AbstractMetadataProvider) getDelegate(); provider.destroy(); } else { log.debug("Cannot destroy delegate, doesn't extend AbstractMetadataProvider"); } }
/** * Method performs initialization of the provider it delegates to. * * @throws MetadataProviderException in case initialization fails */ public void initialize() throws MetadataProviderException { if (getDelegate() instanceof AbstractMetadataProvider) { log.debug("Initializing delegate"); AbstractMetadataProvider provider = (AbstractMetadataProvider) getDelegate(); provider.initialize(); } else { log.debug("Cannot initialize delegate, doesn't extend AbstractMetadataProvider"); } }
@SneakyThrows private boolean isLocal(ExtendedMetadataDelegate delegate) { delegate.initialize(); XMLObject metadata = delegate.getDelegate().getMetadata(); List<EntityDescriptor> descriptors = EntityDescriptor.class.isAssignableFrom(metadata.getClass()) ? Collections.singletonList((EntityDescriptor) metadata) : (EntitiesDescriptor.class.isAssignableFrom(metadata.getClass()) ? ((EntitiesDescriptor) metadata).getEntityDescriptors() : Collections.emptyList()); return descriptors.stream() .anyMatch(ed -> isLocal(delegate, ed.getEntityID())); }