From a8111fa2626208f87a3ab125dafec8943a0bf28c Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 13 Jun 2018 09:26:48 -0400 Subject: [PATCH] WIP1 --- .../MetadataResolverConfiguration.java | 56 ++++++++++++++++++- ...JPAMetadataResolverServiceImplTests.groovy | 2 + 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java index 62a449922..1968841c1 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/MetadataResolverConfiguration.java @@ -47,11 +47,61 @@ public class MetadataResolverConfiguration { public MetadataResolver metadataResolver() throws ResolverException, ComponentInitializationException { ChainingMetadataResolver metadataResolver = new ChainingMetadataResolver(); metadataResolver.setId("chain"); + List resolvers = new ArrayList<>(); - metadataResolver.setResolvers(resolvers); - metadataResolver.initialize(); + // TODO: remove this later when we allow for creation of arbitrary metadata resolvers + FileBackedHTTPMetadataResolver incommonMR = new FileBackedHTTPMetadataResolver(HttpClients.createMinimal(), "http://md.incommon.org/InCommon/InCommon-metadata.xml", "/tmp/incommonmd.xml"){ + @Override + protected void initMetadataResolver() throws ComponentInitializationException { + super.initMetadataResolver(); + + for (String entityId: this.getBackingStore().getIndexedDescriptors().keySet()) { + Document document = new Document(); + document.add(new StringField("id", entityId, Field.Store.YES)); + document.add(new TextField("content", entityId, Field.Store.YES)); // TODO: change entityId to be content of entity descriptor block + try { + indexWriter.addDocument(document); + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + try { + indexWriter.commit(); + } catch (IOException e) { + throw new ComponentInitializationException(e); + } + } + + // TODO: this is probably not the best way to do this + @Nullable + @Override + public DateTime getLastRefresh() { + return null; + } + + // TODO: this is probably not the best way to do this + @Override + protected void processConditionalRetrievalHeaders(HttpResponse response) { + // let's do nothing 'cause we want to allow a refresh + } + }; + incommonMR.setId("incommonmd"); + incommonMR.setParserPool(openSamlObjects.getParserPool()); + incommonMR.setMetadataFilter(new MetadataFilterChain()); + incommonMR.initialize(); + + resolvers.add(incommonMR); + + if (!metadataResolverRepository.findAll().iterator().hasNext()) { + edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver mr = new edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver(); + mr.setName("incommonmd"); + metadataResolverRepository.save(mr); + } + + metadataResolver.setResolvers(resolvers); + metadataResolver.initialize(); return metadataResolver; } -} +} \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy index c3dadb8c2..5f61701bc 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy @@ -124,8 +124,10 @@ class JPAMetadataResolverServiceImplTests extends Specification { then: assert metadataResolverRepository.findAll().size() > 0 + def mr = metadataResolverRepository.findByName('testme') def ed = metadataResolver.resolveSingle(new CriteriaSet(new EntityIdCriterion('http://test.scaldingspoon.org/test1'))) def resultString = openSamlObjects.marshalToXmlString(ed) + println resultString def diff = DiffBuilder.compare(Input.fromString(expectedXML)).withTest(Input.fromString(resultString)).ignoreComments().ignoreWhitespace().build() !diff.hasDifferences() }