X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Flocalizer%2Fbasic%2FMirBasicOpenPostingLocalizer.java;h=b3d33efed34aaae196f859336567a68a1fa02017;hb=63e0ee1fb8038eb6d8f0190cf38c3b3ab2727216;hp=62e01b1ba59d29c8687ecfd8b18a589959803262;hpb=a459f111d85598df56c6ab711cec11632676b39c;p=mir.git diff --git a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java index 62e01b1b..b3d33efe 100755 --- a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java @@ -18,20 +18,17 @@ * 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); + } }