浏览代码

fix #1154 add virtual_host to search condition

Shinsuke Sugaya 8 年之前
父节点
当前提交
a6ed94d64d

+ 17 - 0
src/main/java/org/codelibs/fess/helper/QueryHelper.java

@@ -291,6 +291,7 @@ public class QueryHelper {
         buildBaseQuery(queryContext, context);
         buildBoostQuery(queryContext);
         buildRoleQuery(queryContext, searchRequestType);
+        buildVirtualHostQuery(queryContext, searchRequestType);
 
         if (!queryContext.hasSorts() && defaultSortBuilders != null) {
             queryContext.addSorts(defaultSortBuilders);
@@ -298,6 +299,22 @@ public class QueryHelper {
         return queryContext;
     }
 
+    protected void buildVirtualHostQuery(final QueryContext queryContext, final SearchRequestType searchRequestType) {
+        switch (searchRequestType) {
+        case ADMIN_SEARCH:
+            // nothing to do
+            break;
+        default:
+            final String key = fessConfig.getVirtualHostKey();
+            if (StringUtil.isNotBlank(key)) {
+                queryContext.addQuery(boolQuery -> {
+                    boolQuery.filter(QueryBuilders.termQuery(fessConfig.getIndexFieldVirtualHost(), key));
+                });
+            }
+            break;
+        }
+    }
+
     protected void buildRoleQuery(final QueryContext queryContext, final SearchRequestType searchRequestType) {
         if (roleQueryHelper != null && queryContext.roleQueryEnabled()) {
             final Set<String> roleSet = roleQueryHelper.build(searchRequestType);

+ 13 - 2
src/test/java/org/codelibs/fess/helper/QueryHelperTest.java

@@ -15,9 +15,13 @@
  */
 package org.codelibs.fess.helper;
 
+import java.io.File;
+
 import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
 import org.apache.lucene.queryparser.classic.QueryParser;
 import org.apache.lucene.queryparser.ext.ExtendableQueryParser;
+import org.codelibs.core.io.FileUtil;
+import org.codelibs.core.misc.DynamicProperties;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
 import org.codelibs.fess.mylasta.direction.FessConfig;
@@ -27,6 +31,7 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
+import org.lastaflute.di.core.factory.SingletonLaContainerFactory;
 
 public class QueryHelperTest extends UnitFessTestCase {
 
@@ -43,10 +48,16 @@ public class QueryHelperTest extends UnitFessTestCase {
                 queryParser.setDefaultOperator(QueryParser.Operator.AND);
                 return queryParser;
             }
+
         };
+        File file = File.createTempFile("test", ".properties");
+        file.deleteOnExit();
+        FileUtil.writeBytes(file.getAbsolutePath(), "ldap.security.principal=%s@fess.codelibs.local".getBytes("UTF-8"));
+        DynamicProperties systemProps = new DynamicProperties(file);
+        SingletonLaContainerFactory.getContainer().register(systemProps, "systemProperties");
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
-        registerMockInstance(fessConfig);
-        registerMockInstance(new SystemHelper());
+        registerMock(fessConfig);
+        registerMock(new SystemHelper());
         inject(queryHelper);
         queryHelper.init();
     }