Browse Source

refactoring for api

Shinsuke Sugaya 9 years ago
parent
commit
87a28313e3

+ 9 - 3
src/main/java/org/codelibs/fess/api/BaseApiManager.java

@@ -26,7 +26,7 @@ import org.codelibs.core.exception.IORuntimeException;
 import org.lastaflute.web.util.LaRequestUtil;
 import org.lastaflute.web.util.LaResponseUtil;
 
-public class BaseApiManager {
+public abstract class BaseApiManager implements WebApiManager {
     protected static final String FAVORITES_API = "/favoritesApi";
 
     protected static final String FAVORITE_API = "/favoriteApi";
@@ -37,12 +37,18 @@ public class BaseApiManager {
 
     protected static final String SEARCH_API = "/searchApi";
 
+    protected String pathPrefix;
+
     protected static enum FormatType {
         SEARCH, LABEL, SUGGEST, HOTSEARCHWORD, FAVORITE, FAVORITES, OTHER, PING;
     }
 
-    public BaseApiManager() {
-        super();
+    public String getPathPrefix() {
+        return pathPrefix;
+    }
+
+    public void setPathPrefix(final String pathPrefix) {
+        this.pathPrefix = pathPrefix;
     }
 
     protected FormatType getFormatType(final String formatType) {

+ 41 - 0
src/main/java/org/codelibs/fess/api/es/EsApiManager.java

@@ -0,0 +1,41 @@
+package org.codelibs.fess.api.es;
+
+import java.io.IOException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.codelibs.fess.api.BaseApiManager;
+import org.codelibs.fess.app.web.base.login.FessLoginAssist;
+import org.codelibs.fess.util.ComponentUtil;
+
+public class EsApiManager extends BaseApiManager {
+    protected String[] acceptedRoles = new String[] { "admin" };
+
+    public EsApiManager() {
+        setPathPrefix("/admin/server");
+    }
+
+    @Override
+    public boolean matches(HttpServletRequest request) {
+        final String servletPath = request.getServletPath();
+        if (servletPath.startsWith(pathPrefix)) {
+            FessLoginAssist loginAssist = ComponentUtil.getLoginAssist();
+            return loginAssist.getSessionUserBean().map(user -> user.hasRoles(acceptedRoles)).orElseGet(() -> Boolean.FALSE).booleanValue();
+        }
+        return false;
+    }
+
+    @Override
+    public void process(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void setAcceptedRoles(String[] acceptedRoles) {
+        this.acceptedRoles = acceptedRoles;
+    }
+
+}

+ 5 - 12
src/main/java/org/codelibs/fess/api/json/JsonApiManager.java

@@ -33,7 +33,6 @@ import org.codelibs.core.CoreLibConstants;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.api.BaseApiManager;
-import org.codelibs.fess.api.WebApiManager;
 import org.codelibs.fess.api.WebApiRequest;
 import org.codelibs.fess.api.WebApiResponse;
 import org.codelibs.fess.entity.PingResponse;
@@ -48,11 +47,13 @@ import org.lastaflute.web.util.LaRequestUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class JsonApiManager extends BaseApiManager implements WebApiManager {
+public class JsonApiManager extends BaseApiManager {
 
     private static final Logger logger = LoggerFactory.getLogger(JsonApiManager.class);
 
-    protected String jsonPathPrefix = "/json";
+    public JsonApiManager() {
+        setPathPrefix("/json");
+    }
 
     @Override
     public boolean matches(final HttpServletRequest request) {
@@ -61,7 +62,7 @@ public class JsonApiManager extends BaseApiManager implements WebApiManager {
         }
 
         final String servletPath = request.getServletPath();
-        return servletPath.startsWith(jsonPathPrefix);
+        return servletPath.startsWith(pathPrefix);
     }
 
     @Override
@@ -670,12 +671,4 @@ public class JsonApiManager extends BaseApiManager implements WebApiManager {
         return Integer.toHexString(ch).toUpperCase();
     }
 
-    public String getJsonPathPrefix() {
-        return jsonPathPrefix;
-    }
-
-    public void setJsonPathPrefix(final String jsonPathPrefix) {
-        this.jsonPathPrefix = jsonPathPrefix;
-    }
-
 }

+ 5 - 11
src/main/java/org/codelibs/fess/api/xml/XmlApiManager.java

@@ -32,7 +32,6 @@ import org.codelibs.core.CoreLibConstants;
 import org.codelibs.core.lang.StringUtil;
 import org.codelibs.fess.Constants;
 import org.codelibs.fess.api.BaseApiManager;
-import org.codelibs.fess.api.WebApiManager;
 import org.codelibs.fess.api.WebApiRequest;
 import org.codelibs.fess.api.WebApiResponse;
 import org.codelibs.fess.entity.PingResponse;
@@ -45,10 +44,12 @@ import org.codelibs.fess.util.WebApiUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class XmlApiManager extends BaseApiManager implements WebApiManager {
+public class XmlApiManager extends BaseApiManager {
     private static final Logger logger = LoggerFactory.getLogger(XmlApiManager.class);
 
-    protected String xmlPathPrefix = "/xml";
+    public XmlApiManager() {
+        setPathPrefix("/xml");
+    }
 
     @Override
     public boolean matches(final HttpServletRequest request) {
@@ -57,7 +58,7 @@ public class XmlApiManager extends BaseApiManager implements WebApiManager {
         }
 
         final String servletPath = request.getServletPath();
-        return servletPath.startsWith(xmlPathPrefix);
+        return servletPath.startsWith(pathPrefix);
     }
 
     @Override
@@ -403,11 +404,4 @@ public class XmlApiManager extends BaseApiManager implements WebApiManager {
         return buf.toString();
     }
 
-    public String getXmlPathPrefix() {
-        return xmlPathPrefix;
-    }
-
-    public void setXmlPathPrefix(final String xmlPathPrefix) {
-        this.xmlPathPrefix = xmlPathPrefix;
-    }
 }

+ 17 - 4
src/main/java/org/codelibs/fess/mylasta/action/FessUserBean.java

@@ -15,6 +15,8 @@
  */
 package org.codelibs.fess.mylasta.action;
 
+import java.util.stream.Stream;
+
 import org.codelibs.fess.es.exentity.User;
 import org.lastaflute.web.login.TypicalUserBean;
 
@@ -37,10 +39,6 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     // ===================================================================================
     //                                                                         Constructor
     //                                                                         ===========
-    public FessUserBean() {
-        // TODO needed?
-    }
-
     public FessUserBean(final User user) {
         this.user = user;
     }
@@ -56,4 +54,19 @@ public class FessUserBean extends TypicalUserBean<String> { // #change_it also L
     // ===================================================================================
     //                                                                            Accessor
     //                                                                            ========
+    public String[] getRoles() {
+        return user.getRoles();
+    }
+
+    public String[] getGroups() {
+        return user.getGroups();
+    }
+
+    public boolean hasRole(String role) {
+        return Stream.of(user.getRoles()).anyMatch(s -> s.equals(role));
+    }
+
+    public boolean hasRoles(String[] acceptedRoles) {
+        return Stream.of(user.getRoles()).anyMatch(s1 -> Stream.of(acceptedRoles).anyMatch(s2 -> s2.equals(s1)));
+    }
 }

+ 5 - 0
src/main/java/org/codelibs/fess/util/ComponentUtil.java

@@ -51,6 +51,7 @@ import org.codelibs.fess.job.JobExecutor;
 import org.lastaflute.core.message.MessageManager;
 import org.lastaflute.di.core.SingletonLaContainer;
 import org.lastaflute.di.core.factory.SingletonLaContainerFactory;
+import org.lastaflute.web.servlet.session.SessionManager;
 
 public final class ComponentUtil {
     private static final String DICTIONARY_MANAGER = "dictionaryManager";
@@ -263,6 +264,10 @@ public final class ComponentUtil {
         return getComponent(FessLoginAssist.class);
     }
 
+    public static SessionManager getSessionManager() {
+        return getComponent(SessionManager.class);
+    }
+
     public static <T> T getComponent(final Class<T> clazz) {
         return SingletonLaContainer.getComponent(clazz);
     }