X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Flocalizer%2Fbasic%2FMirBasicOpenPostingLocalizer.java;h=a851ac08d4fcb258b126c4dee0e7d9be989b9893;hb=42680c1f9fe3250bcbd0f9ed5d9dee6188333b15;hp=637f4ac6a226fb35feedaed01963fba47dc6e0af;hpb=bd42ea79e70f65a59814d5ade0a296a22399c9ae;p=mir.git diff --git a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java index 637f4ac6..a851ac08 100755 --- a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java @@ -29,14 +29,17 @@ */ package mircoders.localizer.basic; -import java.util.List; -import java.util.Random; - import mir.config.MirPropertiesConfiguration; import mir.log.LoggerWrapper; import mir.session.Request; import mir.session.Session; import mir.session.SessionHandler; +import mircoders.abuse.FilterType; +import mircoders.abuse.IPFilterType; +import mircoders.abuse.RegularExpressionFilterType; +import mircoders.abuse.ThrottleFilter; +import mircoders.abuse.PostingSizeFilterType; +import mircoders.abuse.URLBlacklistFilterType; import mircoders.entity.EntityComment; import mircoders.entity.EntityContent; import mircoders.global.MirGlobal; @@ -45,13 +48,24 @@ import mircoders.localizer.MirLocalizerExc; import mircoders.localizer.MirLocalizerFailure; import mircoders.localizer.MirOpenPostingLocalizer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Arrays; + 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 { + public MirBasicOpenPostingLocalizer() throws MirLocalizerFailure { logger = new LoggerWrapper("Localizer.Basic.OpenPosting"); try { @@ -73,13 +87,33 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer { throw new MirLocalizerFailure(t); } + + filterTypes = new ArrayList(); + filterTypesMap = new HashMap(); + + addSimpleAntiAbuseFilterType(new RegularExpressionFilterType("regexp")); + addSimpleAntiAbuseFilterType(new RegularExpressionFilterType("useragent", false, false, + RegularExpressionFilterType.REQUEST_HEADERS, new String[] {"User-Agent"})); + addSimpleAntiAbuseFilterType(new IPFilterType("ip")); + addSimpleAntiAbuseFilterType(new RegularExpressionFilterType("hostname", false, false, + RegularExpressionFilterType.REQUEST_HEADERS, new String[] {"hostname"})); + addSimpleAntiAbuseFilterType(new ThrottleFilter("throttle")); + addSimpleAntiAbuseFilterType(new PostingSizeFilterType("size")); + addSimpleAntiAbuseFilterType(new URLBlacklistFilterType("urlblacklist", + Arrays.asList(MirGlobal.config().getStringArray("Mir.URLBlacklistFilter.WhiteList")))); } - public SessionHandler getOpenSessionHandler(String aSessionType) { - if (aSessionType!=null && aSessionType.equals("comment")) - return new MirBasicCommentPostingHandler(); + public SessionHandler getOpenSessionHandler(String aSessionType) throws MirLocalizerExc, MirLocalizerFailure { + if ("email".equals(aSessionType)) + return new MirBasicEmailArticleHandler(); - return new MirBasicArticlePostingHandler(); + if ("comment".equals(aSessionType)) + return new MirBasicCommentPostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles")); + + if ("translation".equals(aSessionType)) + return new MirBasicTranslationPostingHandler(); + + return new MirBasicArticlePostingHandler(configuration.getBoolean("Localizer.OpenSession.PersistentUploadedFiles")); } public SessionHandler getOpenSessionHandler(Request aRequest, Session aSession) throws MirLocalizerExc, MirLocalizerFailure { @@ -92,19 +126,49 @@ 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) { + public void afterArticlePosting() { afterContentPosting(); } + public void afterArticlePosting(EntityContent anArticle) { + afterContentPosting(anArticle); + } + + public void afterContentPosting(EntityContent anArticle) { + afterArticlePosting(); + } + public void afterCommentPosting(EntityComment aComment) { afterCommentPosting(); } 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,12 +178,31 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer { long l = System.currentTimeMillis(); l = (l*l*l*l)/random; - if (l<0) + if (l<0) { l = l * -1; + } String returnString = ""+l; return returnString.substring(5); } + public List getAntiAbuseFilterTypes() { + return Collections.unmodifiableList(filterTypes); + } + + public boolean allowArticlePublication(EntityContent anArticle){ + return anArticle != null && "1".equals(anArticle.getFieldValue("is_published")); + } + + public void removeSimpleAntiAbuseFilterType(String aName) { + filterTypes.remove(filterTypesMap.get(aName)); + filterTypesMap.remove(aName); + } + + public void addSimpleAntiAbuseFilterType(FilterType aFilterType) { + removeSimpleAntiAbuseFilterType(aFilterType.getName()); + filterTypesMap.put(aFilterType.getName(), aFilterType); + filterTypes.add(aFilterType); + } }