rebuilding head
[mir.git] / source / mircoders / localizer / basic / MirBasicOpenPostingLocalizer.java
index 14ba032..b3d33ef 100755 (executable)
@@ -29,9 +29,6 @@
  */
 package mircoders.localizer.basic;
 
-import java.util.*;
-import java.util.Random;
-
 import mir.config.MirPropertiesConfiguration;
 import mir.log.LoggerWrapper;
 import mir.session.Request;
@@ -41,9 +38,13 @@ import mircoders.entity.EntityComment;
 import mircoders.entity.EntityContent;
 import mircoders.global.MirGlobal;
 import mircoders.global.ProducerEngine;
-import mircoders.localizer.*;
+import mircoders.localizer.MirAntiAbuseFilterType;
+import mircoders.localizer.MirLocalizerExc;
 import mircoders.localizer.MirLocalizerFailure;
 import mircoders.localizer.MirOpenPostingLocalizer;
+import mircoders.localizer.basic.filters.ThrottleFilter;
+
+import java.util.*;
 
 public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
   private List afterContentProducerTasks;
@@ -80,14 +81,22 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
     filterTypesMap = new HashMap();
 
     addSimpleAntiAbuseFilterType(new MirBasicAntiAbuseFilterTypes.RegularExpressionFilter("regexp"));
+    addSimpleAntiAbuseFilterType(new MirBasicAntiAbuseFilterTypes.RegularExpressionFilter("useragent", false, false,
+        MirBasicAntiAbuseFilterTypes.RegularExpressionFilter.REQUEST_HEADERS, new String[] {"User-Agent"}));
     addSimpleAntiAbuseFilterType(new MirBasicAntiAbuseFilterTypes.IPFilter("ip"));
+    addSimpleAntiAbuseFilterType(new MirBasicAntiAbuseFilterTypes.RegularExpressionFilter("hostname", false, false,
+        MirBasicAntiAbuseFilterTypes.RegularExpressionFilter.REQUEST_HEADERS, new String[] {"hostname"}));
+    addSimpleAntiAbuseFilterType(new ThrottleFilter("throttle", 60*60*1000));
   }
 
-  public SessionHandler getOpenSessionHandler(String aSessionType) {
+  public SessionHandler getOpenSessionHandler(String aSessionType) throws MirLocalizerExc, MirLocalizerFailure  {
+    if (aSessionType!=null && aSessionType.equals("email"))
+      return new MirBasicEmailArticleHandler();
+
     if (aSessionType!=null && aSessionType.equals("comment"))
-      return new MirBasicCommentPostingHandler();
+      return new MirBasicCommentPostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles"));
 
-    return new MirBasicArticlePostingHandler();
+    return new MirBasicArticlePostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles"));
   }
 
   public SessionHandler getOpenSessionHandler(Request aRequest, Session aSession) throws MirLocalizerExc, MirLocalizerFailure {
@@ -100,7 +109,18 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
   }
 
   public void afterContentPosting() {
-    MirGlobal.producerEngine().addTasks(afterContentProducerTasks);
+    Iterator i = afterContentProducerTasks.iterator();
+
+    while (i.hasNext()) {
+      ProducerEngine.ProducerTask task = (ProducerEngine.ProducerTask) i.next();
+
+      try {
+        MirGlobal.getProducerEngine().addTask(task);
+      }
+      catch (Throwable t) {
+        logger.error("Error adding content task "+task.getProducer()+"::"+task.getVerb()+": " + t.toString());
+      }
+    }
   }
 
   public void afterContentPosting(EntityContent aContent) {
@@ -112,7 +132,18 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
   }
 
   public void afterCommentPosting() {
-    MirGlobal.producerEngine().addTasks(afterCommentProducerTasks);
+    Iterator i = afterCommentProducerTasks.iterator();
+
+    while (i.hasNext()) {
+      ProducerEngine.ProducerTask task = (ProducerEngine.ProducerTask) i.next();
+
+      try {
+        MirGlobal.getProducerEngine().addTask(task);
+      }
+      catch (Throwable t) {
+        logger.error("Error adding comment task "+task.getProducer()+"::"+task.getVerb()+": " + t.toString());
+      }
+    }
   }
 
   public String generateOnetimePassword() {