package mircoders.global;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
import mir.config.MirPropertiesConfiguration;
import mir.entity.Entity;
import mir.entity.adapter.EntityAdapterModel;
import mir.log.LoggerWrapper;
+import mir.module.EntityNotFoundExc;
import mir.session.Request;
-import mir.util.DateTimeFunctions;
+import mir.util.DateTimeRoutines;
import mir.util.EntityUtility;
import mir.util.GeneratorFormatAdapters;
-import mir.util.StringRoutines;
import mircoders.abuse.FilterEngine;
import mircoders.entity.EntityComment;
import mircoders.entity.EntityContent;
import mircoders.localizer.MirAdminInterfaceLocalizer;
-
+import mircoders.module.ModuleComment;
+import mircoders.module.ModuleContent;
import org.apache.commons.collections.ExtendedProperties;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
/**
* This class manages abuse (spam, offending material, etc.). This
* is done by using a set of filters managed by the FilterEngine class.
private boolean cookieOnBlock;
private String articleBlockAction;
private String commentBlockAction;
- private List log;
+ private final List log = new ArrayList();
private File configFile = MirGlobal.config().getFile("Abuse.Config");
private FilterEngine filterEngine;
private static String cookieName = MirGlobal.config().getString("Abuse.CookieName");
private static int cookieMaxAge = 60 * 60 * MirGlobal.config().getInt("Abuse.CookieMaxAge");
+ private EntityAdapterModel model;
public Abuse(EntityAdapterModel aModel) {
logger = new LoggerWrapper("Global.Abuse");
filterEngine = new FilterEngine(aModel);
-
- log = new ArrayList();
+ model = aModel;
try {
configuration = MirPropertiesConfiguration.instance();
StringBuffer line = new StringBuffer();
- line.append(DateTimeFunctions.advancedDateFormat(
+ line.append(DateTimeRoutines.advancedDateFormat(
configuration.getString("Mir.DefaultDateTimeFormat"),
(new GregorianCalendar()).getTime(), configuration.getString("Mir.DefaultTimezone")));
StringBuffer line = new StringBuffer();
- line.append(DateTimeFunctions.advancedDateFormat(
+ line.append(DateTimeRoutines.advancedDateFormat(
configuration.getString("Mir.DefaultDateTimeFormat"),
(new GregorianCalendar()).getTime(), configuration.getString("Mir.DefaultTimezone")));
}
public List getLog() {
+ ModuleContent contentModule = new ModuleContent();
+ ModuleComment commentModule = new ModuleComment();
+
synchronized (log) {
- try {
- List result = new ArrayList();
-
- Iterator i = log.iterator();
- while (i.hasNext()) {
- LogEntry logEntry = (LogEntry) i.next();
- Map entry = new HashMap();
-
- entry.put("ip", logEntry.getIpNumber());
- entry.put("id", logEntry.getId());
- entry.put("timestamp", new GeneratorFormatAdapters.DateFormatAdapter(logEntry.getTimeStamp(), MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")));
- if (logEntry.getIsArticle())
- entry.put("type", "content");
- else
- entry.put("type", "comment");
- entry.put("browser", logEntry.getBrowserString());
- entry.put("filtertag", logEntry.getMatchingFilterTag());
-
- result.add(entry);
+ List result = new ArrayList();
+
+ Iterator i = log.iterator();
+ while (i.hasNext()) {
+ LogEntry logEntry = (LogEntry) i.next();
+ Map entry = new HashMap();
+
+ entry.put("ip", logEntry.getIpNumber());
+ entry.put("id", logEntry.getId());
+ entry.put("timestamp", new GeneratorFormatAdapters.DateFormatAdapter(logEntry.getTimeStamp(), MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")));
+
+ if (logEntry.getIsArticle()) {
+ entry.put("type", "content");
+ try {
+ entry.put("object",
+ model.makeEntityAdapter("content", contentModule.getById(logEntry.getId())));
+ }
+ catch (EntityNotFoundExc e) {
+ entry.put("object", null);
+ }
+ }
+ else {
+ entry.put("type", "comment");
+ try {
+ entry.put("object",
+ model.makeEntityAdapter("comment", commentModule.getById(logEntry.getId())));
+ }
+ catch (EntityNotFoundExc e) {
+ entry.put("object", null);
+ }
}
- return result;
- }
- catch (Throwable t) {
- throw new RuntimeException(t.toString());
+ entry.put("browser", logEntry.getBrowserString());
+ entry.put("filtertag", logEntry.getMatchingFilterTag());
+
+ result.add(entry);
}
+
+ return result;
}
}
public synchronized void load() {
try {
- ExtendedProperties configuration = new ExtendedProperties();
-
- try {
- configuration = new ExtendedProperties(configFile.getAbsolutePath());
- }
- catch (FileNotFoundException e) {
- }
+ ExtendedProperties configuration = new ExtendedProperties(configFile.getAbsolutePath());
setOpenPostingDisabled(configuration.getString("abuse.openPostingDisabled", "0").equals("1"));
setOpenPostingPassword(configuration.getString("abuse.openPostingPassword", "0").equals("1"));
Iterator i = MirGlobal.localizer().adminInterface().simpleArticleOperations().iterator();
while (i.hasNext()) {
- MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation =
- (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next();
+ MirAdminInterfaceLocalizer.EntityOperation operation =
+ (MirAdminInterfaceLocalizer.EntityOperation) i.next();
Map action = new HashMap();
action.put("resource", operation.getName());
Iterator i = MirGlobal.localizer().adminInterface().simpleCommentOperations().iterator();
while (i.hasNext()) {
- MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation =
- (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next();
+ MirAdminInterfaceLocalizer.EntityOperation operation =
+ (MirAdminInterfaceLocalizer.EntityOperation) i.next();
Map action = new HashMap();
action.put("resource", operation.getName());
}
}
- private String escapeConfigListEntry(String aFilterPart) {
- return StringRoutines.replaceStringCharacters(aFilterPart,
- new char[] {'\\', ':'},
- new String[] {"\\\\", "\\:"});
- }
-
- private String escapeFilterPart(String aFilterPart) {
- return StringRoutines.replaceStringCharacters(aFilterPart,
- new char[] {'\\', '\n', '\r', '\t', ' '},
- new String[] {"\\\\", "\\n", "\\r", "\\t", "\\ "});
- }
-
- private String deescapeFilterPart(String aFilterPart) {
- return StringRoutines.replaceEscapedStringCharacters(aFilterPart,
- '\\',
- new char[] {'\\', ':', 'n', 'r', 't', ' '},
- new String[] {"\\", ":", "\n", "\r", "\t", " "});
- }
-
private static class LogEntry {
private String ipNumber;
private String browserString;