*/
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.entity.EntityComment;
import mircoders.entity.EntityContent;
import mircoders.global.MirGlobal;
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;
+
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 {
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"));
}
- 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 {
}
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() {
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);
+ }
}