Skip to content

Commit

Permalink
Merge branch 'NOJIRA-Chaining-Resolver-Fix' of bitbucket.org:unicon/s…
Browse files Browse the repository at this point in the history
…hib-idp-ui into bugfix/nojira-ui-duration-backupfileinitnextrefreshdelay
  • Loading branch information
rmathis committed Aug 24, 2018
2 parents f65097c + a2fe5b4 commit d116865
Show file tree
Hide file tree
Showing 8 changed files with 130 additions and 47 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package edu.internet2.tier.shibboleth.admin.ui.configuration;

import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityIdsSearchResultRepresentation;
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects;
import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository;
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository;
Expand All @@ -11,6 +10,7 @@
import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityIdsSearchService;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityIdsSearchServiceImpl;
import edu.internet2.tier.shibboleth.admin.ui.service.EntityService;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterService;
import edu.internet2.tier.shibboleth.admin.ui.service.FilterTargetService;
Expand All @@ -24,13 +24,6 @@
import edu.internet2.tier.shibboleth.admin.util.AttributeUtility;
import edu.internet2.tier.shibboleth.admin.util.LuceneUtility;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -46,9 +39,6 @@
import org.springframework.web.util.UrlPathHelper;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class CoreShibUiConfiguration {
Expand Down Expand Up @@ -92,44 +82,20 @@ public AttributeUtility attributeUtility() {
return new AttributeUtility(openSamlObjects());
}

@Autowired
Analyzer fullTokenAnalyzer;

@Autowired
DirectoryService directoryService;

@Autowired
LocaleResolver localeResolver;

@Autowired
ResourceBundleMessageSource messageSource;

@Autowired
LuceneUtility luceneUtility;

@Bean
public EntityDescriptorFilesScheduledTasks entityDescriptorFilesScheduledTasks(EntityDescriptorRepository entityDescriptorRepository) {
return new EntityDescriptorFilesScheduledTasks(this.metadataDir, entityDescriptorRepository, openSamlObjects());
}

@Bean
public EntityIdsSearchService entityIdsSearchService() {
return (resourceId, term, limit) -> {
List<String> entityIds = new ArrayList<>();
try {
IndexReader indexReader = luceneUtility.getIndexReader(resourceId);
IndexSearcher searcher = new IndexSearcher(indexReader);
QueryParser parser = new QueryParser("content", fullTokenAnalyzer);
TopDocs topDocs = searcher.search(parser.parse(term.trim()), limit);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
entityIds.add(document.get("id"));
}
} catch (IOException | ParseException e) {
logger.error(e.getMessage(), e);
}
return new EntityIdsSearchResultRepresentation(entityIds);
};
public EntityIdsSearchService entityIdsSearchService(LuceneUtility luceneUtility, Analyzer fullTokenAnalyzer) {
return new EntityIdsSearchServiceImpl(luceneUtility, fullTokenAnalyzer);
}

@Bean
Expand Down Expand Up @@ -199,7 +165,7 @@ public DirectoryService directoryService() {
}

@Bean
public LuceneUtility luceneUtility() {
return new LuceneUtility();
public LuceneUtility luceneUtility(DirectoryService directoryService) {
return new LuceneUtility(directoryService);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.configuration;

import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver;
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects;
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository;
import edu.internet2.tier.shibboleth.admin.ui.service.IndexWriterService;
Expand Down Expand Up @@ -39,7 +40,7 @@ public class MetadataResolverConfiguration {

@Bean
public MetadataResolver metadataResolver() throws ResolverException, ComponentInitializationException {
ChainingMetadataResolver metadataResolver = new ChainingMetadataResolver();
ChainingMetadataResolver metadataResolver = new OpenSamlChainingMetadataResolver();
metadataResolver.setId("chain");

List<MetadataResolver> resolvers = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml;

import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.resolver.ResolverException;
import org.opensaml.saml.metadata.resolver.ChainingMetadataResolver;
import org.opensaml.saml.metadata.resolver.MetadataResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* @author Bill Smith (wsmith@unicon.net)
*/
public class OpenSamlChainingMetadataResolver extends ChainingMetadataResolver {
@Nonnull private final Logger log = LoggerFactory.getLogger(OpenSamlChainingMetadataResolver.class);

@Nonnull @NonnullElements private List<MetadataResolver> mutableResolvers;

public OpenSamlChainingMetadataResolver() {
this.mutableResolvers = Collections.emptyList();
}

public OpenSamlChainingMetadataResolver(@Nonnull List<MetadataResolver> mutableResolvers) {
this.mutableResolvers = mutableResolvers;
}

@Override
public void setResolvers(@Nonnull @NonnullElements final List<? extends MetadataResolver> newResolvers)
throws ResolverException {
if (newResolvers == null || newResolvers.isEmpty()) {
mutableResolvers = Collections.emptyList();
return;
}

mutableResolvers = new ArrayList<>(Collections2.filter(newResolvers, Predicates.notNull()));
}

@Nonnull
@NonnullElements
@Override
public List<MetadataResolver> getResolvers() {
return mutableResolvers;
}

@Override
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
if (mutableResolvers == null) {
log.warn("OpenSamlChainingMetadataResolver was not configured with any member MetadataResolvers");
mutableResolvers = Collections.emptyList();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -25,6 +26,6 @@ public Directory getDirectory(String resourceId) {

@Override
public List<Directory> getDirectories() {
return (List<Directory>) directoryMap.values();
return new ArrayList<>(directoryMap.values());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.internet2.tier.shibboleth.admin.ui.service;

import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityIdsSearchResultRepresentation;
import edu.internet2.tier.shibboleth.admin.util.LuceneUtility;
import net.andreinc.mockneat.MockNeat;

import java.util.ArrayList;
Expand All @@ -10,7 +11,6 @@
/**
* API component responsible for entity ids search.
*/
@FunctionalInterface
public interface EntityIdsSearchService {

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package edu.internet2.tier.shibboleth.admin.ui.service;

import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityIdsSearchResultRepresentation;
import edu.internet2.tier.shibboleth.admin.util.LuceneUtility;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* @author Bill Smith (wsmith@unicon.net)
*/
public class EntityIdsSearchServiceImpl implements EntityIdsSearchService {
private static final Logger logger = LoggerFactory.getLogger(EntityIdsSearchServiceImpl.class);
private Analyzer fullTokenAnalyzer;
private LuceneUtility luceneUtility;

public EntityIdsSearchServiceImpl(LuceneUtility luceneUtility, Analyzer fullTokenAnalyzer) {
this.luceneUtility = luceneUtility;
this.fullTokenAnalyzer = fullTokenAnalyzer;
}

@Override
public EntityIdsSearchResultRepresentation findBySearchTermAndOptionalLimit(String resourceId,
String searchTerm,
int limit) {
List<String> entityIds = new ArrayList<>();
try {
IndexReader indexReader = luceneUtility.getIndexReader(resourceId);
IndexSearcher searcher = new IndexSearcher(indexReader);
QueryParser parser = new QueryParser("content", fullTokenAnalyzer);
TopDocs topDocs = searcher.search(parser.parse(searchTerm.trim()), limit);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document document = searcher.doc(scoreDoc.doc);
entityIds.add(document.get("id"));
}
} catch (IOException | ParseException e) {
logger.error(e.getMessage(), e);
}
return new EntityIdsSearchResultRepresentation(entityIds);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import org.apache.lucene.store.Directory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.ArrayList;
Expand All @@ -19,10 +18,12 @@
*/
public class LuceneUtility {
private static final Logger logger = LoggerFactory.getLogger(LuceneUtility.class);

@Autowired
private DirectoryService directoryService;

public LuceneUtility(DirectoryService directoryService) {
this.directoryService = directoryService;
}

public IndexReader getIndexReader(String resourceId) throws IOException {
IndexReader indexReader;
if (StringUtils.isBlank(resourceId)) {
Expand All @@ -35,7 +36,8 @@ public IndexReader getIndexReader(String resourceId) throws IOException {
logger.error(e.getMessage(), e);
}
});
IndexReader[] indexReaders = (IndexReader[]) indexReaderList.toArray();
IndexReader[] indexReaders = new IndexReader[indexReaderList.size()];
indexReaders = indexReaderList.toArray(indexReaders);
indexReader = new MultiReader(indexReaders, true);
} else {
indexReader = DirectoryReader.open(directoryService.getDirectory(resourceId));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.internet2.tier.shibboleth.admin.ui.configuration

import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlChainingMetadataResolver
import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects
import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.service.IndexWriterService
Expand Down Expand Up @@ -36,7 +37,7 @@ class TestConfiguration {

@Bean
MetadataResolver metadataResolver() {
ChainingMetadataResolver metadataResolver = new ChainingMetadataResolver()
ChainingMetadataResolver metadataResolver = new OpenSamlChainingMetadataResolver()
metadataResolver.setId("chain")
String resolverId = "test"

Expand Down

0 comments on commit d116865

Please sign in to comment.