merged 1.1 branch into head
[mir.git] / source / mircoders / servlet / ServletModuleAbuse.java
index e026be6..5cb0ded 100755 (executable)
 
 package mircoders.servlet;
 
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import mir.log.LoggerWrapper;
-import mir.servlet.ServletModule;
+import mir.servlet.AdminServletModule;
 import mir.servlet.ServletModuleExc;
 import mir.servlet.ServletModuleFailure;
+import mir.storage.DatabaseExc;
 import mir.util.HTTPRequestParser;
 import mir.util.URLBuilder;
-import mircoders.global.Abuse;
+import mircoders.abuse.FilterEngine;
 import mircoders.global.MirGlobal;
 
-public class ServletModuleAbuse extends ServletModule {
-  private static ServletModuleAbuse instance = new ServletModuleAbuse();
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+public class ServletModuleAbuse extends AdminServletModule {
   private String editFilterTemplate;
   private String listFiltersTemplate;
+  private String editFilterGroupTemplate;
+  private String listFilterGroupsTemplate;
   private String mainTemplate;
   private String viewLogTemplate;
 
-  public static ServletModule getInstance() { return instance; }
-
-  private ServletModuleAbuse() {
-    logger = new LoggerWrapper("ServletModule.Abuse");
-    defaultAction = "showsettings";
+  public ServletModuleAbuse() {
+    editFilterTemplate = getConfiguration().getString("ServletModule.Abuse.EditFilter.Template");
+    listFiltersTemplate = getConfiguration().getString("ServletModule.Abuse.ListFilters.Template");
+    editFilterGroupTemplate = getConfiguration().getString("ServletModule.Abuse.EditFilterGroup.Template");
+    listFilterGroupsTemplate = getConfiguration().getString("ServletModule.Abuse.ListFilterGroups.Template");
+    viewLogTemplate = getConfiguration().getString("ServletModule.Abuse.ViewLog.Template");
+    mainTemplate = getConfiguration().getString("ServletModule.Abuse.Main.Template");
+  }
 
-    editFilterTemplate = configuration.getString("ServletModule.Abuse.EditFilter.Template");
-    listFiltersTemplate = configuration.getString("ServletModule.Abuse.ListFilters.Template");
-    viewLogTemplate = configuration.getString("ServletModule.Abuse.ViewLog.Template");
-    mainTemplate = configuration.getString("ServletModule.Abuse.Main.Template");
+  public void defaultAction(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+    showsettings(aRequest, aResponse);
   }
 
-  public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+  public void editfilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
     String id=requestParser.getParameterWithDefault("id", "");
+    String groupid=requestParser.getParameterWithDefault("groupid", "");
 
-    if (id.equals("")) {
-      editfilter(aRequest, aResponse, "", "", "", "", "", "", "");
-    }
-    else {
-      Abuse.FilterRule filter = MirGlobal.abuse().getFilter(id);
-      if (filter==null)
-        throw new ServletModuleExc("Filter not found");
+    FilterEngine.Filter filter = MirGlobal.abuse().getFilterEngine().getFilterForId(groupid, id);
 
-      editfilter(aRequest, aResponse, filter.getId(), filter.getType(), filter.getExpression(), filter.getComments(), filter.getCommentAction(), filter.getArticleAction(), "");
-    }
+    editfilter(aRequest, aResponse,
+        groupid,
+        id, filter.getType(), filter.getExpression(),
+        filter.getComment(), filter.getTag(), filter.getCommentAction(), filter.getArticleAction(), "");
+  }
+
+  public void addfilter(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+    String groupid=requestParser.getParameterWithDefault("groupid", "");
+
+    editfilter(aRequest, aResponse, groupid, "", "", "", "", "", "", "", "");
   }
 
   public void editfilter(HttpServletRequest aRequest, HttpServletResponse aResponse,
-        String anId, String aType, String anExpression, String aComments,
+        String aGroupId, String anId, String aType, String anExpression, String aComments,
+        String aTag,
         String aCommentAction, String anArticleAction, String anErrorMessage) throws ServletModuleExc {
     try {
       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
 
       responseData.put("id", anId);
+      responseData.put("groupid", aGroupId);
       responseData.put("type", aType);
       responseData.put("expression", anExpression);
       responseData.put("comments", aComments);
+      responseData.put("tag", aTag);
       responseData.put("articleaction", anArticleAction);
       responseData.put("commentaction", aCommentAction);
       responseData.put("errormessage", anErrorMessage);
 
       responseData.put("articleactions", MirGlobal.abuse().getArticleActions());
       responseData.put("commentactions", MirGlobal.abuse().getCommentActions());
-      responseData.put("filtertypes", MirGlobal.abuse().getFilterTypes());
+      responseData.put("filtertypes", MirGlobal.abuse().getFilterEngine().getFilterTypes());
 
       ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterTemplate);
     }
@@ -110,106 +117,175 @@ public class ServletModuleAbuse extends ServletModule {
 
     String type=requestParser.getParameterWithDefault("type", "");
     String id=requestParser.getParameterWithDefault("id", "");
+    String groupid=requestParser.getParameter("groupid");
     String expression=requestParser.getParameterWithDefault("expression", "");
     String commentaction=requestParser.getParameterWithDefault("commentaction", "");
     String articleaction=requestParser.getParameterWithDefault("articleaction", "");
     String comments=requestParser.getParameterWithDefault("comments", "");
+    String tag=requestParser.getParameterWithDefault("tag", "");
 
     String errorMessage;
 
-    if (id.equals("")) {
-      errorMessage = MirGlobal.abuse().addFilter(type, expression,comments, commentaction, articleaction);
-      logAdminUsage(aRequest, "?", "object added");
+    try {
+      if (id.equals("")) {
+        errorMessage = MirGlobal.abuse().getFilterEngine().addFilter(
+            groupid, type, expression, comments, tag,
+            articleaction, commentaction);
+        logAdminUsage(aRequest, id, "filter added");
+      }
+      else {
+        errorMessage = MirGlobal.abuse().getFilterEngine().updateFilter(
+            groupid, id, type, expression, comments, tag,
+            articleaction, commentaction);
+        logAdminUsage(aRequest, id, "filter modified");
+      }
     }
-    else {
-      errorMessage = MirGlobal.abuse().setFilter(id, type, expression, comments, commentaction, articleaction);
-      logAdminUsage(aRequest, id, "object modified");
+    catch (DatabaseExc e) {
+      throw new ServletModuleFailure(e);
     }
 
     if (errorMessage!=null) {
-      editfilter(aRequest, aResponse, id, type, expression, comments, commentaction, articleaction, errorMessage);
+      editfilter(aRequest, aResponse, groupid, id, type,
+          expression, comments, tag, commentaction, articleaction, errorMessage);
     }
     else {
       MirGlobal.abuse().save();
-      showfilters(aRequest, aResponse);
+      listfilters(aRequest, aResponse);
     }
   }
 
-  public void delete(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void movefilterup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String id=requestParser.getParameterWithDefault("id", "");
-    MirGlobal.abuse().deleteFilter(id);
-    logAdminUsage(aRequest, id, "object deleted");
+    String id=requestParser.getParameter("id");
+    String groupid=requestParser.getParameter("groupid");
+
+    MirGlobal.abuse().getFilterEngine().moveFilterUp(groupid, id);
+    listfilters(aRequest, aResponse);
+  }
+
 
-    MirGlobal.abuse().save();
+  public void movefilterdown(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    showfilters(aRequest, aResponse);
+    String id=requestParser.getParameter("id");
+    String groupid=requestParser.getParameter("groupid");
+
+    MirGlobal.abuse().getFilterEngine().moveFilterDown(groupid, id);
+    listfilters(aRequest, aResponse);
   }
 
-  public void moveup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void movefiltertop(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String id=requestParser.getParameterWithDefault("id", "");
-    MirGlobal.abuse().moveFilterUp(id);
+    String id=requestParser.getParameter("id");
+    String groupid=requestParser.getParameter("groupid");
 
-    MirGlobal.abuse().save();
-    logAdminUsage(aRequest, id, "object moved upwards");
+    MirGlobal.abuse().getFilterEngine().moveFilterToTop(groupid, id);
+    listfilters(aRequest, aResponse);
+  }
+
+  public void movefilterbottom(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    showfilters(aRequest, aResponse);
+    String id=requestParser.getParameter("id");
+    String groupid=requestParser.getParameter("groupid");
+
+    MirGlobal.abuse().getFilterEngine().moveFilterToBottom(groupid, id);
+    listfilters(aRequest, aResponse);
   }
 
-  public void movedown(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void deletefilter(HttpServletRequest aRequest, HttpServletResponse aResponse) {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String id=requestParser.getParameterWithDefault("id", "");
-    MirGlobal.abuse().moveFilterDown(id);
-    logAdminUsage(aRequest, id, "object moved downwards");
+    String id=requestParser.getParameter("id");
+    String groupid=requestParser.getParameter("groupid");
+    MirGlobal.abuse().getFilterEngine().deleteFilter(groupid, id);
+    MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filter:"+groupid+":"+id, "filter deleted");
+
+    listfilters(aRequest, aResponse);
+  }
+
+  public void deletefiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+
+    String groupid=requestParser.getParameter("groupid");
+    MirGlobal.abuse().getFilterEngine().deleteFilterGroup(groupid);
 
-    MirGlobal.abuse().save();
+    MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group deleted");
 
-    showfilters(aRequest, aResponse);
+    showfiltergroups(aRequest, aResponse);
   }
 
-  public void movetop(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void movefiltergroupup(HttpServletRequest aRequest, HttpServletResponse aResponse) {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String id=requestParser.getParameterWithDefault("id", "");
-    MirGlobal.abuse().moveFilterToTop(id);
+    String groupid=requestParser.getParameter("groupid");
+    MirGlobal.abuse().getFilterEngine().moveFilterGroupUp(groupid);
 
-    MirGlobal.abuse().save();
-    logAdminUsage(aRequest, id, "object moved to the top");
+    MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group moved upwards");
 
-    showfilters(aRequest, aResponse);
+    showfiltergroups(aRequest, aResponse);
   }
 
-  public void movebottom(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void movefiltergroupdown(HttpServletRequest aRequest, HttpServletResponse aResponse) {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
+    String groupid=requestParser.getParameter("groupid");
+    MirGlobal.abuse().getFilterEngine().moveFilterGroupDown(groupid);
+
+    MirGlobal.logAdminUsage(ServletHelper.getUser(aRequest), getName() + ":" + "filtergroup:"+groupid, "filter group moved downwards");
+
+    showfiltergroups(aRequest, aResponse);
+  }
+
+  public void showfilterconfiguration(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+    showfiltergroups(aRequest, aResponse);
+  }
+
+  public void addfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    editfiltergroup(aRequest, aResponse, "", "");
+  }
+
+  public void editgroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
     String id=requestParser.getParameterWithDefault("id", "");
-    MirGlobal.abuse().moveFilterToBottom(id);
 
-    MirGlobal.abuse().save();
-    logAdminUsage(aRequest, id, "object moved to the bottom");
+    FilterEngine.FilterGroup group = MirGlobal.abuse().getFilterEngine().getFilterGroupForId(id);
 
-    showfilters(aRequest, aResponse);
+    editfiltergroup(aRequest, aResponse, id, group.getName());
   }
 
-  public void add(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
-    editfilter(aRequest, aResponse, "", "", "", "", "", "", "");
+  public void editfiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse,
+        String anId, String aName) throws ServletModuleExc {
+    try {
+      Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
+
+      responseData.put("id", anId);
+      responseData.put("name", aName);
+
+      ServletHelper.generateResponse(aResponse.getWriter(), responseData, editFilterGroupTemplate);
+    }
+    catch (Throwable e) {
+      throw new ServletModuleFailure(e);
+    }
   }
 
-  public void showfilters(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+  public void listfilters(HttpServletRequest aRequest, HttpServletResponse aResponse) {
     URLBuilder urlBuilder = new URLBuilder();
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+    String groupid=requestParser.getParameterWithDefault("groupid", "");
 
     try {
       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
 
       urlBuilder.setValue("module", "Abuse");
-      urlBuilder.setValue("do", "showfilters");
+      urlBuilder.setValue("do", "listfilters");
+      urlBuilder.setValue("groupid", groupid);
       responseData.put("thisurl", urlBuilder.getQuery());
+      responseData.put("groupid", groupid);
 
-      responseData.put("filters", MirGlobal.abuse().getFilters());
+      responseData.put("filters", MirGlobal.abuse().getFilterEngine().getFilters(groupid));
 
       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFiltersTemplate);
     }
@@ -218,6 +294,46 @@ public class ServletModuleAbuse extends ServletModule {
     }
   }
 
+  public void updatefiltergroup(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+
+    String name = requestParser.getParameterWithDefault("name", "");
+    String id = requestParser.getParameterWithDefault("id", "");
+
+    try {
+        if (id.equals("")) {
+          MirGlobal.abuse().getFilterEngine().addFilterGroup(name);
+        }
+        else {
+          MirGlobal.abuse().getFilterEngine().updateFilterGroup(id, name);
+        }
+    }
+    catch (DatabaseExc e) {
+      throw new ServletModuleFailure(e);
+    }
+
+    showfiltergroups(aRequest, aResponse);
+  }
+
+  public void showfiltergroups(HttpServletRequest aRequest, HttpServletResponse aResponse) {
+    URLBuilder urlBuilder = new URLBuilder();
+
+    try {
+      Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, getLocales(aRequest));
+
+      urlBuilder.setValue("module", "Abuse");
+      urlBuilder.setValue("do", "showfiltergroups");
+      responseData.put("thisurl", urlBuilder.getQuery());
+
+      responseData.put("filtergroups", MirGlobal.abuse().getFilterEngine().getFilterGroups());
+
+      ServletHelper.generateResponse(aResponse.getWriter(), responseData, listFilterGroupsTemplate);
+    }
+    catch (Throwable e) {
+      throw new ServletModuleFailure(e);
+    }
+  }
+
   public void showsettings(HttpServletRequest aRequest, HttpServletResponse aResponse) {
     URLBuilder urlBuilder = new URLBuilder();