/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/search/trunk/elasticsearch/impl/src/java/org/sakaiproject/search/elasticsearch/filter/impl/SearchSecurityFilter.java $ * $Id: SearchSecurityFilter.java 120867 2013-03-06 22:27:02Z jbush@rsmart.com $ *********************************************************************************** * * Copyright (c) 2006, 2007, 2008, 2009 The Sakai Foundation * * Licensed under the Educational Community 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.osedu.org/licenses/ECL-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 org.sakaiproject.search.elasticsearch.filter.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.component.api.ComponentManager; import org.sakaiproject.entity.api.EntityManager; import org.sakaiproject.search.api.EntityContentProducer; import org.sakaiproject.search.api.SearchIndexBuilder; import org.sakaiproject.search.api.SearchResult; import org.sakaiproject.search.api.TermFrequency; import org.sakaiproject.search.elasticsearch.Messages; import org.sakaiproject.search.elasticsearch.filter.SearchItemFilter; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * @author ieb */ public class SearchSecurityFilter implements SearchItemFilter { private static final Log log = LogFactory .getLog(SearchSecurityFilter.class); private SearchIndexBuilder searchIndexBuilder = null; private EntityManager entityManager = null; private SearchItemFilter nextFilter = null; public void init() { } private Object load(ComponentManager cm, String name) { Object o = cm.get(name); if (o == null) { log.error("Cant find Spring component named " + name); //$NON-NLS-1$ } return o; } /** * @return Returns the nextFilter. */ public SearchItemFilter getNextFilter() { return nextFilter; } /** * @param nextFilter * The nextFilter to set. */ public void setNextFilter(SearchItemFilter nextFilter) { this.nextFilter = nextFilter; } /** * @return Returns the searchIndexBuilder. */ public SearchIndexBuilder getSearchIndexBuilder() { return searchIndexBuilder; } /** * @param searchIndexBuilder * The searchIndexBuilder to set. */ public void setSearchIndexBuilder(SearchIndexBuilder searchIndexBuilder) { this.searchIndexBuilder = searchIndexBuilder; } public SearchResult filter(SearchResult result) { String reference = result.getReference(); EntityContentProducer ecp = searchIndexBuilder .newEntityContentProducer(reference); if (ecp == null || !ecp.canRead(reference)) { result = new CensoredSearchResult(); } if (nextFilter == null) { return result; } return nextFilter.filter(result); } public class CensoredSearchResult implements SearchResult { public float getScore() { return 0; } public String getId() { return ""; //$NON-NLS-1$ } public String[] getFieldNames() { return new String[0]; } public String[] getValues(String string) { return new String[0]; } public Map<String, String[]> getValueMap() { return new HashMap<String, String[]>(); } public String getUrl() { return ""; //$NON-NLS-1$ } public String getTitle() { return Messages.getString("SearchSecurityFilter.5"); //$NON-NLS-1$ } public int getIndex() { return 0; } public String getSearchResult() { return ""; //$NON-NLS-1$ } public String getReference() { return ""; //$NON-NLS-1$ } public TermFrequency getTerms() throws IOException { return new TermFrequency() { int[] freq = new int[0]; String[] terms = new String[0]; public int[] getFrequencies() { return freq; } public String[] getTerms() { return terms; } }; } public String getTool() { return ""; //$NON-NLS-1$ } public void toXMLString(StringBuilder sb) { sb.append("<result"); //$NON-NLS-1$ sb.append(" index=\"0\" "); //$NON-NLS-1$ sb.append(" score=\"0\" "); //$NON-NLS-1$ sb.append(" sid=\"\" "); //$NON-NLS-1$ sb.append(" reference=\"\" "); //$NON-NLS-1$ sb.append(" title=\"\" "); //$NON-NLS-1$ sb.append(" tool=\"\" "); //$NON-NLS-1$ sb.append(" url=\"\" />"); //$NON-NLS-1$ } public String getSiteId() { return ""; //$NON-NLS-1$ } public boolean isCensored() { return true; } public void setUrl(String newUrl) { // TODO Auto-generated method stub } public boolean hasPortalUrl() { log.debug("hasPortalUrl(" + getReference()); return false; } } /** * @return the entityManager */ public EntityManager getEntityManager() { return entityManager; } /** * @param entityManager the entityManager to set */ public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } }