/** * Build metadata resolver aggregate. Loops through metadata resources * and attempts to resolve the metadata. * * @param entityId the entity id */ @Synchronized @SneakyThrows public void buildMetadataResolverAggregate(final String entityId) { LOGGER.debug("Building metadata resolver aggregate"); this.metadataResolver = new ChainingMetadataResolver(); val resolvers = new ArrayList<MetadataResolver>(); val entries = this.metadataResources.entrySet(); entries.forEach(entry -> { val resource = entry.getKey(); LOGGER.debug("Loading [{}]", resource.getFilename()); resolvers.addAll(loadMetadataFromResource(entry.getValue(), resource, entityId)); }); this.metadataResolver.setId(ChainingMetadataResolver.class.getCanonicalName()); this.metadataResolver.setResolvers(resolvers); LOGGER.info("Collected metadata from [{}] resolvers(s). Initializing aggregate resolver...", resolvers.size()); this.metadataResolver.initialize(); LOGGER.info("Metadata aggregate initialized successfully."); }
/** * Gets chaining metadata resolver for all saml services. * * @param servicesManager the services manager * @param entityID the entity id * @param resolver the resolver * @return the chaining metadata resolver for all saml services */ @SneakyThrows @SuppressFBWarnings("PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS") public static MetadataResolver getMetadataResolverForAllSamlServices(final ServicesManager servicesManager, final String entityID, final SamlRegisteredServiceCachingMetadataResolver resolver) { val registeredServices = servicesManager.findServiceBy(SamlRegisteredService.class::isInstance); val chainingMetadataResolver = new ChainingMetadataResolver(); val resolvers = registeredServices.stream() .filter(SamlRegisteredService.class::isInstance) .map(SamlRegisteredService.class::cast) .map(s -> SamlRegisteredServiceServiceProviderMetadataFacade.get(resolver, s, entityID)) .filter(Optional::isPresent) .map(Optional::get) .map(SamlRegisteredServiceServiceProviderMetadataFacade::getMetadataResolver) .collect(Collectors.toList()); LOGGER.debug("Located [{}] metadata resolvers to match against [{}]", resolvers, entityID); chainingMetadataResolver.setResolvers(resolvers); chainingMetadataResolver.setId(entityID); chainingMetadataResolver.initialize(); return chainingMetadataResolver; }
protected ChainingMetadataResolver initChainingMetadataResolver(final MetadataResolver idpMetadataProvider, final MetadataResolver spMetadataProvider) { final ChainingMetadataResolver metadataManager = new ChainingMetadataResolver(); metadataManager.setId(ChainingMetadataResolver.class.getCanonicalName()); try { final List<MetadataResolver> list = new ArrayList<>(); list.add(idpMetadataProvider); list.add(spMetadataProvider); metadataManager.setResolvers(list); metadataManager.initialize(); } catch (final ResolverException e) { throw new TechnicalException("Error adding idp or sp metadatas to manager", e); } catch (final ComponentInitializationException e) { throw new TechnicalException("Error initializing manager", e); } return metadataManager; }
chain.setResolvers(resolverList); chain.setId("MultiFileResolverFor:"+resolvers.size()+":Resources"); chain.initialize(); final RelyingPartyMetadataProvider result = new RelyingPartyMetadataProvider(); result.setEmbeddedResolver(chain);
LOGGER.trace("There are [{}] eligible metadata resolver(s) for this request", availableResolvers.size()); metadataResolver.setResolvers(metadataResolvers); metadataResolver.initialize();