1.1 restoration
[mir.git] / source / mircoders / localizer / basic / MirBasicOpenPostingLocalizer.java
index 62e01b1..b3d33ef 100755 (executable)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with  any library licensed under the Apache Software License, 
- * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library 
- * (or with modified versions of the above that use the same license as the above), 
- * and distribute linked combinations including the two.  You must obey the 
- * GNU General Public License in all respects for all of the code used other than 
- * the above mentioned libraries.  If you modify this file, you may extend this 
- * exception to your version of the file, but you are not obligated to do so.  
+ * the code of this program with  any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
  * If you do not wish to do so, delete this exception statement from your version.
  */
 package mircoders.localizer.basic;
 
-import java.util.List;
-import java.util.Random;
-
 import mir.config.MirPropertiesConfiguration;
 import mir.log.LoggerWrapper;
 import mir.session.Request;
@@ -41,17 +38,22 @@ import mircoders.entity.EntityComment;
 import mircoders.entity.EntityContent;
 import mircoders.global.MirGlobal;
 import mircoders.global.ProducerEngine;
+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;
   private List afterCommentProducerTasks;
+  private List filterTypes;
+  private Map filterTypesMap;
   protected LoggerWrapper logger;
   protected MirPropertiesConfiguration configuration;
 
-
   public MirBasicOpenPostingLocalizer() throws MirLocalizerExc, MirLocalizerFailure {
     logger = new LoggerWrapper("Localizer.Basic.OpenPosting");
 
@@ -74,17 +76,51 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
 
       throw new MirLocalizerFailure(t);
     }
+
+    filterTypes = new Vector();
+    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) throws MirLocalizerExc, MirLocalizerFailure  {
+    if (aSessionType!=null && aSessionType.equals("email"))
+      return new MirBasicEmailArticleHandler();
+
+    if (aSessionType!=null && aSessionType.equals("comment"))
+      return new MirBasicCommentPostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles"));
+
+    return new MirBasicArticlePostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles"));
   }
 
   public SessionHandler getOpenSessionHandler(Request aRequest, Session aSession) throws MirLocalizerExc, MirLocalizerFailure {
     if (aSession.getAttribute("handler")==null)
-      aSession.setAttribute("handler", new MirBasicCommentPostingSessionHandler());
+    {
+      aSession.setAttribute("handler", getOpenSessionHandler(aRequest.getParameter("sessiontype")));
+    }
 
     return (SessionHandler) aSession.getAttribute("handler");
   }
 
   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) {
@@ -96,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() {
@@ -114,4 +161,18 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer {
     return returnString.substring(5);
   }
 
+  public List getAntiAbuseFilterTypes() {
+    return filterTypes;
+  }
+
+  public void removeSimpleAntiAbuseFilterType(String aName) {
+    filterTypes.remove(filterTypesMap.get(aName));
+    filterTypesMap.remove(aName);
+  }
+
+  public void addSimpleAntiAbuseFilterType(MirAntiAbuseFilterType aFilterType) {
+    removeSimpleAntiAbuseFilterType(aFilterType.getName());
+    filterTypesMap.put(aFilterType.getName(), aFilterType);
+    filterTypes.add(aFilterType);
+  }
 }