1.1 restoration
[mir.git] / source / mircoders / global / Abuse.java
index 14eb503..0009749 100755 (executable)
@@ -54,6 +54,7 @@ import mir.session.Request;
 import mir.util.DateTimeFunctions;
 import mir.util.GeneratorFormatAdapters;
 import mir.util.StringRoutines;
+import mir.util.EntityUtility;
 import mircoders.entity.EntityComment;
 import mircoders.entity.EntityContent;
 import mircoders.localizer.MirAdminInterfaceLocalizer;
@@ -76,7 +77,7 @@ public class Abuse {
   private String articleBlockAction;
   private String commentBlockAction;
   private List log;
-  private String configFile = MirGlobal.config().getStringWithHome("Abuse.Config");
+  private File configFile = MirGlobal.config().getFile("Abuse.Config");
 
   private MirPropertiesConfiguration configuration;
 
@@ -185,7 +186,7 @@ public class Abuse {
 
         line.append(" ");
         line.append(filterRule.getType() +" ("+ filterRule.getExpression()+")");
-        aComment.appendLineToField("comment", line.toString());
+        EntityUtility.appendLineToField(aComment, "comment", line.toString());
 
         MirGlobal.performCommentOperation(null, aComment, filterRule.getCommentAction());
         setCookie(aResponse);
@@ -225,7 +226,7 @@ public class Abuse {
 
         line.append(" ");
         line.append(filterRule.getType() +" ("+ filterRule.getExpression()+")");
-        anArticle.appendLineToField("comment", line.toString());
+        EntityUtility.appendLineToField(anArticle, "comment", line.toString());
 
         MirGlobal.performArticleOperation(null, anArticle, filterRule.getArticleAction());
         setCookie(aResponse);
@@ -372,7 +373,7 @@ public class Abuse {
         ExtendedProperties configuration = new ExtendedProperties();
 
         try {
-          configuration = new ExtendedProperties(configFile);
+          configuration = new ExtendedProperties(configFile.getAbsolutePath());
         }
         catch (FileNotFoundException e) {
         }
@@ -408,7 +409,7 @@ public class Abuse {
         configuration.addProperty("abuse.articleBlockAction", getArticleBlockAction());
         configuration.addProperty("abuse.commentBlockAction", getCommentBlockAction());
 
-        configuration.save(new BufferedOutputStream(new FileOutputStream(new File(configFile)),8192), "Anti abuse configuration");
+        configuration.save(new BufferedOutputStream(new FileOutputStream(configFile),8192), "Anti abuse configuration");
       }
       catch (Throwable t) {
         throw new RuntimeException(t.toString());
@@ -507,7 +508,7 @@ public class Abuse {
 
   public FilterRule getFilter(String anId) {
     synchronized (filterRules) {
-      FilterRule result = (FilterRule) findFilter(filterRules, anId);
+      FilterRule result = findFilter(filterRules, anId);
       if (result == null)
         return result;
       else
@@ -531,6 +532,14 @@ public class Abuse {
     moveFilter(filterRules, anIdentifier, 1);
   }
 
+  public void moveFilterToTop(String anIdentifier) {
+    setFilterPosition(filterRules, anIdentifier, 0);
+  }
+
+  public void moveFilterToBottom(String anIdentifier) {
+    setFilterPosition(filterRules, anIdentifier, Integer.MAX_VALUE);
+  }
+
   private String addFilter(List aFilters, String aType, String anExpression, String aComments, String aCommentAction, String anArticleAction, Date aLastHit) {
     MirAntiAbuseFilterType type = (MirAntiAbuseFilterType) filterTypes.get(aType);
 
@@ -598,6 +607,27 @@ public class Abuse {
     return null;
   }
 
+  private void setFilterPosition(List aFilters, String anIdentifier, int aPosition) {
+    synchronized (aFilters) {
+      if (aPosition<0)
+        aPosition=0;
+
+      for (int i = 0; i < aFilters.size(); i++) {
+        FilterRule rule = (FilterRule) aFilters.get(i);
+
+        if (rule.getId().equals(anIdentifier)) {
+          aFilters.remove(rule);
+
+          if (aPosition<aFilters.size())
+            aFilters.add(aPosition, rule);
+          else
+            aFilters.add(rule);
+          break;
+        }
+      }
+    }
+  }
+
   private void moveFilter(List aFilters, String anIdentifier, int aDirection) {
     synchronized (aFilters) {
       for (int i = 0; i < aFilters.size(); i++) {
@@ -732,10 +762,16 @@ public class Abuse {
     }
   }
 
+  private String escapeConfigListEntry(String aFilterPart) {
+    return StringRoutines.replaceStringCharacters(aFilterPart,
+        new char[] {'\\', ':'},
+        new String[] {"\\\\", "\\:"});
+  }
+
   private String escapeFilterPart(String aFilterPart) {
     return StringRoutines.replaceStringCharacters(aFilterPart,
-        new char[] {'\\', ':', '\n', '\r', '\t', ' '},
-        new String[] {"\\\\", "\\:", "\\n", "\\r", "\\t", "\\ "});
+        new char[] {'\\', '\n', '\r', '\t', ' '},
+        new String[] {"\\\\", "\\n", "\\r", "\\t", "\\ "});
   }
 
   private String deescapeFilterPart(String aFilterPart) {
@@ -753,11 +789,11 @@ public class Abuse {
         FilterRule filter = (FilterRule) i.next();
 
         String filterconfig =
-            escapeFilterPart(filter.getType()) + ":" +
-            escapeFilterPart(filter.getExpression()) + ":" +
-            escapeFilterPart(filter.getArticleAction()) + ":" +
-            escapeFilterPart(filter.getCommentAction()) + ":" +
-            escapeFilterPart(filter.getComments()) + ":";
+            escapeConfigListEntry(escapeFilterPart(filter.getType())) + ":" +
+            escapeConfigListEntry(escapeFilterPart(filter.getExpression())) + ":" +
+            escapeConfigListEntry(escapeFilterPart(filter.getArticleAction())) + ":" +
+            escapeConfigListEntry(escapeFilterPart(filter.getCommentAction())) + ":" +
+            escapeConfigListEntry(escapeFilterPart(filter.getComments())) + ":";
 
         if (filter.getLastHit() != null)
           filterconfig = filterconfig + filter.getLastHit().getTime();