From 42680c1f9fe3250bcbd0f9ed5d9dee6188333b15 Mon Sep 17 00:00:00 2001 From: zapata Date: Mon, 25 Dec 2006 20:10:22 +0000 Subject: [PATCH] added: * url blacklist filter * delete operation for comments / articles --- bundles/admin_en.properties | 6 +- etc/producer/producers.xml | 7 ++ source/mir/module/AbstractModule.java | 29 ++++--- source/mir/module/ModuleFailure.java | 7 +- source/mir/storage/Database.java | 5 +- source/mir/util/InternetRoutines.java | 2 +- source/mir/util/StringRoutines.java | 26 ------- .../abuse/RegularExpressionFilterType.java | 12 ++- source/mircoders/global/Abuse.java | 91 ++++++++-------------- source/mircoders/global/MirGlobal.java | 20 ++--- .../localizer/MirAdminInterfaceLocalizer.java | 6 +- .../basic/MirBasicAdminInterfaceLocalizer.java | 59 +++++++++++--- .../basic/MirBasicDataModelLocalizer.java | 4 +- .../basic/MirBasicOpenPostingLocalizer.java | 4 + .../localizer/basic/MirBasicUtilityFunctions.java | 3 - .../basic/actions/ArticleTopicAction.java | 2 +- .../mircoders/servlet/ServletModuleFileEdit.java | 11 +-- templates/admin/abuse.log.template | 44 +++++++---- 18 files changed, 181 insertions(+), 157 deletions(-) diff --git a/bundles/admin_en.properties b/bundles/admin_en.properties index 28925e11..5462196d 100755 --- a/bundles/admin_en.properties +++ b/bundles/admin_en.properties @@ -1,6 +1,6 @@ ########## admin ########## # language: english -# $Id: admin_en.properties,v 1.48.2.28 2006/03/19 20:53:11 zapata Exp $ +# $Id: admin_en.properties,v 1.48.2.29 2006/12/25 20:10:22 zapata Exp $ languagename=English @@ -128,6 +128,7 @@ comment.comment.info=(internal) comment.operation.hide=hide comment.operation.unhide=unhide +comment.operation.delete=delete #commentlist @@ -233,6 +234,8 @@ content.selectparent=select content.operation.hide=hide content.operation.unhide=unhide content.operation.newswire=newswire +content.operation.delete=delete + content.preview.default = Preview @@ -511,6 +514,7 @@ filtertype.useragent= User Agent filtertype.throttle = Throttle filtertype.hostname = Host name filtertype.size= Posting size +filtertype.urlblacklist = URL Blacklist query filtererror.title = Error: filtererror.invalidtype = Invalid filter type diff --git a/etc/producer/producers.xml b/etc/producer/producers.xml index 6d4f83dd..b305c299 100755 --- a/etc/producer/producers.xml +++ b/etc/producer/producers.xml @@ -489,6 +489,13 @@ + + + + + diff --git a/source/mir/module/AbstractModule.java b/source/mir/module/AbstractModule.java index cfd11a7a..d65dd2b3 100755 --- a/source/mir/module/AbstractModule.java +++ b/source/mir/module/AbstractModule.java @@ -31,6 +31,7 @@ package mir.module; import mir.entity.Entity; import mir.entity.EntityList; import mir.storage.Database; +import mir.storage.DatabaseExc; import java.util.Map; @@ -60,19 +61,23 @@ public class AbstractModule { return database; } - public Entity getById (String id) throws ModuleExc, ModuleFailure { - try { - if (database == null) - throw new ModuleExc("AbstractModule.getById: No Database set!"); - Entity entity = database.selectById(id); + public Entity getById (String anId) throws ModuleFailure, EntityNotFoundExc { + if (database == null) { + throw new ModuleFailure("AbstractModule.getById: No Database set!"); + } - if (entity == null) - throw new ModuleExc("AbstractModule.getById: No object for id = " + id); - return entity; - } - catch (Throwable e) { - throw new ModuleFailure(e); - } + try { + Entity result = database.selectById(anId); + + if (result == null) { + throw new EntityNotFoundExc("AbstractModule.getById: No object for id = " + anId); + } + + return result; + } + catch (DatabaseExc e) { + throw new ModuleFailure("Database exception while retrieving entity with id " + anId); + } } public EntityList getByWhereClause (String whereClause, int offset) throws ModuleExc, ModuleFailure { diff --git a/source/mir/module/ModuleFailure.java b/source/mir/module/ModuleFailure.java index f8502dea..fe277c03 100755 --- a/source/mir/module/ModuleFailure.java +++ b/source/mir/module/ModuleFailure.java @@ -30,9 +30,12 @@ package mir.module; import multex.Failure; public class ModuleFailure extends Failure { + public ModuleFailure(String aMessage) { + super(aMessage, null); + } - public ModuleFailure(String msg,Throwable cause) { - super(msg,cause); + public ModuleFailure(String aMessage,Throwable aCause) { + super(aMessage,aCause); } public ModuleFailure(Throwable aCause) { diff --git a/source/mir/storage/Database.java b/source/mir/storage/Database.java index e18d3a5e..f86f043d 100755 --- a/source/mir/storage/Database.java +++ b/source/mir/storage/Database.java @@ -53,7 +53,7 @@ import java.util.*; /** * Implements database access. * - * @version $Id: Database.java,v 1.44.2.36 2006/08/10 19:29:36 zapata Exp $ + * @version $Id: Database.java,v 1.44.2.37 2006/12/25 20:10:22 zapata Exp $ * @author rk * @author Zapata * @@ -259,7 +259,8 @@ public class Database { } /** - * Return an entity specified by id + * Return an entity specified by id, or null if no such + * entity exists. */ public Entity selectById(String anId) throws DatabaseExc { if ((anId == null) || anId.equals("")) { diff --git a/source/mir/util/InternetRoutines.java b/source/mir/util/InternetRoutines.java index 70419210..123e673e 100755 --- a/source/mir/util/InternetRoutines.java +++ b/source/mir/util/InternetRoutines.java @@ -32,6 +32,7 @@ package mir.util; import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.List; public class InternetRoutines { @@ -103,5 +104,4 @@ public class InternetRoutines { return (1L<<32)-1; } - } \ No newline at end of file diff --git a/source/mir/util/StringRoutines.java b/source/mir/util/StringRoutines.java index b79ef109..6757bdfd 100755 --- a/source/mir/util/StringRoutines.java +++ b/source/mir/util/StringRoutines.java @@ -169,32 +169,6 @@ public class StringRoutines { } } - public static String performCaseInsensitiveRegularExpressionReplacement(String aSource, String aSearchExpression, String aReplacement) { - try { - RE regularExpression; - - regularExpression = new RE(aSearchExpression, RE.REG_ICASE); - - return regularExpression.substituteAll(aSource, aReplacement); - } - catch (Throwable t) { - throw new UtilFailure("StringRoutines.performRegularExpressionReplacement: " + t.toString(), t); - } - } - - public static boolean performRegularExpressionSearch(String aSource, String aSearchExpression) { - try { - RE regularExpression; - - regularExpression = new RE(aSearchExpression); - - return regularExpression.isMatch(aSource); - } - catch (Throwable t) { - throw new UtilFailure("StringRoutines.performRegularExpressionSearch: " + t.toString(), t); - } - } - /** * Separates a string based on a separator: * seperateString("a:b:c", ":"); will lead to diff --git a/source/mircoders/abuse/RegularExpressionFilterType.java b/source/mircoders/abuse/RegularExpressionFilterType.java index b3b6cfa8..8eceafa4 100755 --- a/source/mircoders/abuse/RegularExpressionFilterType.java +++ b/source/mircoders/abuse/RegularExpressionFilterType.java @@ -64,10 +64,12 @@ import java.util.List; caseSensitive = aCaseSensitive; exactMatch = anExactMatch; - if (aSelectedFields==null) + if (aSelectedFields==null) { selectedFields = null; - else + } + else { selectedFields = Arrays.asList(aSelectedFields); + } } @@ -112,10 +114,12 @@ import java.util.List; } break; case ENTITY_FIELDS: - if (selectedFields != null) + if (selectedFields != null) { j = selectedFields.iterator(); - else + } + else { j = anEntity.getFieldNames().iterator(); + } while (j.hasNext()) { String field = anEntity.getFieldValue( (String) j.next()); diff --git a/source/mircoders/global/Abuse.java b/source/mircoders/global/Abuse.java index dd549884..697d6e21 100755 --- a/source/mircoders/global/Abuse.java +++ b/source/mircoders/global/Abuse.java @@ -34,11 +34,11 @@ 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.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; @@ -51,7 +51,6 @@ import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Date; @@ -78,7 +77,7 @@ public class Abuse { 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; @@ -93,8 +92,6 @@ public class Abuse { filterEngine = new FilterEngine(aModel); model = aModel; - log = new ArrayList(); - try { configuration = MirPropertiesConfiguration.instance(); } @@ -289,40 +286,45 @@ public class Abuse { ModuleComment commentModule = new ModuleComment(); synchronized (log) { - try { - List result = new ArrayList(); + List result = new ArrayList(); - Iterator i = log.iterator(); - while (i.hasNext()) { - LogEntry logEntry = (LogEntry) i.next(); - Map entry = new HashMap(); + 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"))); + 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"); + if (logEntry.getIsArticle()) { + entry.put("type", "content"); + try { entry.put("object", model.makeEntityAdapter("content", contentModule.getById(logEntry.getId()))); } - else { - entry.put("type", "comment"); + catch (EntityNotFoundExc e) { + entry.put("object", null); + } + } + else { + entry.put("type", "comment"); + try { entry.put("object", model.makeEntityAdapter("comment", commentModule.getById(logEntry.getId()))); } - - entry.put("browser", logEntry.getBrowserString()); - entry.put("filtertag", logEntry.getMatchingFilterTag()); - - result.add(entry); + 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; } } @@ -360,13 +362,7 @@ public class Abuse { 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")); @@ -406,8 +402,8 @@ public class Abuse { 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()); @@ -429,8 +425,8 @@ public class Abuse { 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()); @@ -446,25 +442,6 @@ public class Abuse { } } - 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; diff --git a/source/mircoders/global/MirGlobal.java b/source/mircoders/global/MirGlobal.java index 9601f05e..e64d14a6 100755 --- a/source/mircoders/global/MirGlobal.java +++ b/source/mircoders/global/MirGlobal.java @@ -184,7 +184,7 @@ public class MirGlobal { } public static void performArticleOperation(EntityUsers aUser, EntityContent anArticle, String anOperation) { - MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation = getArticleOperationForName(anOperation); + MirAdminInterfaceLocalizer.EntityOperation operation = getArticleOperationForName(anOperation); try { EntityAdapter user = null; @@ -204,7 +204,7 @@ public class MirGlobal { } public static void performCommentOperation(EntityUsers aUser, EntityComment aComment, String anOperation) { - MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation = getCommentOperationForName(anOperation); + MirAdminInterfaceLocalizer.EntityOperation operation = getCommentOperationForName(anOperation); try { EntityAdapter user = null; @@ -223,40 +223,40 @@ public class MirGlobal { } } - private synchronized static MirAdminInterfaceLocalizer.MirSimpleEntityOperation + private synchronized static MirAdminInterfaceLocalizer.EntityOperation getArticleOperationForName(String aName) { try { if (articleOperations == null) { articleOperations = new HashMap(); Iterator i = localizer().adminInterface().simpleArticleOperations().iterator(); while (i.hasNext()) { - MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation = - (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next(); + MirAdminInterfaceLocalizer.EntityOperation operation = + (MirAdminInterfaceLocalizer.EntityOperation) i.next(); articleOperations.put(operation.getName(), operation); } } - return (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) articleOperations.get(aName); + return (MirAdminInterfaceLocalizer.EntityOperation) articleOperations.get(aName); } catch (Throwable t) { throw new MirGlobalFailure(t.getMessage(), t); } } - private synchronized static MirAdminInterfaceLocalizer.MirSimpleEntityOperation + private synchronized static MirAdminInterfaceLocalizer.EntityOperation getCommentOperationForName(String aName) { try { if (commentOperations == null) { commentOperations = new HashMap(); Iterator i = localizer().adminInterface().simpleCommentOperations().iterator(); while (i.hasNext()) { - MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation = - (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next(); + MirAdminInterfaceLocalizer.EntityOperation operation = + (MirAdminInterfaceLocalizer.EntityOperation) i.next(); commentOperations.put(operation.getName(), operation); } } - return (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) commentOperations.get(aName); + return (MirAdminInterfaceLocalizer.EntityOperation) commentOperations.get(aName); } catch (Throwable t) { throw new MirGlobalFailure(t.getMessage(), t); diff --git a/source/mircoders/localizer/MirAdminInterfaceLocalizer.java b/source/mircoders/localizer/MirAdminInterfaceLocalizer.java index 3c5880dd..0377c705 100755 --- a/source/mircoders/localizer/MirAdminInterfaceLocalizer.java +++ b/source/mircoders/localizer/MirAdminInterfaceLocalizer.java @@ -91,16 +91,16 @@ public interface MirAdminInterfaceLocalizer { public List getPreviewPages(EntityAdapter anArticle) throws MirLocalizerExc, MirLocalizerFailure; /** - * Get the {@link List} of {@link MirSimpleEntityOperation}s available for comments + * Get the {@link List} of {@link EntityOperation}s available for comments */ public List simpleCommentOperations(); /** - * Get the {@link List} of {@link MirSimpleEntityOperation}s available for articles + * Get the {@link List} of {@link EntityOperation}s available for articles */ public List simpleArticleOperations(); - public interface MirSimpleEntityOperation { + public interface EntityOperation { /** * Returns the name of the operation. Must be unique and immutable. */ diff --git a/source/mircoders/localizer/basic/MirBasicAdminInterfaceLocalizer.java b/source/mircoders/localizer/basic/MirBasicAdminInterfaceLocalizer.java index ef75632d..ccdb4a88 100755 --- a/source/mircoders/localizer/basic/MirBasicAdminInterfaceLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicAdminInterfaceLocalizer.java @@ -63,6 +63,8 @@ import mircoders.localizer.MirAdminInterfaceLocalizer; import mircoders.localizer.MirLocalizerExc; import mircoders.localizer.MirLocalizerFailure; import mircoders.module.ModuleLanguage; +import mircoders.module.ModuleContent; +import mircoders.module.ModuleComment; import mircoders.storage.DatabaseContent; @@ -110,18 +112,22 @@ public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocaliz addSimpleArticleOperation(new ChangeArticleFieldOperation("newswire", "to_article_type", "0", "1", false)); addSimpleArticleOperation(new ModifyArticleFieldOperation("unhide", "is_published", "1", false)); addSimpleArticleOperation(new ModifyArticleFieldOperation("hide", "is_published", "0", false)); + addSimpleArticleOperation(new DeleteEntityOperation("delete")); addSimpleCommentOperation(new ModifyCommentFieldOperation("unhide", "is_published", "1")); addSimpleCommentOperation(new ModifyCommentFieldOperation("hide", "is_published", "0")); + addSimpleCommentOperation(new DeleteEntityOperation("delete")); } /** {@inheritDoc} */ - public String getAdminPageGenerator(String aPage, Map aTemplateData, EntityAdapter aUser, String aDefault) throws MirLocalizerExc { + public String getAdminPageGenerator(String aPage, Map aTemplateData, EntityAdapter aUser, + String aDefault) throws MirLocalizerExc { return aDefault; } /** {@inheritDoc} */ - public Generator prepareArticlePreview(String aPreviewPage, EntityAdapter anArticle, Map aContext) throws MirLocalizerExc { + public Generator prepareArticlePreview(String aPreviewPage, EntityAdapter anArticle, + Map aContext) throws MirLocalizerExc { MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(aContext); aContext.put("article", anArticle); @@ -186,12 +192,12 @@ public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocaliz return Collections.unmodifiableList(simpleArticleOperations); } - public MirSimpleEntityOperation simpleArticleOperationForName(String aName) { - return (MirSimpleEntityOperation) simpleArticleOperationsMap.get(aName); + public EntityOperation simpleArticleOperationForName(String aName) { + return (EntityOperation) simpleArticleOperationsMap.get(aName); } - public MirSimpleEntityOperation simpleCommentOperationForName(String aName) { - return (MirSimpleEntityOperation) simpleCommentOperationsMap.get(aName); + public EntityOperation simpleCommentOperationForName(String aName) { + return (EntityOperation) simpleCommentOperationsMap.get(aName); } public void removeSimpleArticleOperation(String aName) { @@ -199,7 +205,7 @@ public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocaliz simpleArticleOperationsMap.remove(aName); } - public void addSimpleArticleOperation(MirSimpleEntityOperation anOperation) { + public void addSimpleArticleOperation(EntityOperation anOperation) { removeSimpleArticleOperation(anOperation.getName()); simpleArticleOperationsMap.put(anOperation.getName(), anOperation); simpleArticleOperations.add(anOperation); @@ -210,13 +216,13 @@ public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocaliz simpleCommentOperationsMap.remove(aName); } - public void addSimpleCommentOperation(MirSimpleEntityOperation anOperation) { + public void addSimpleCommentOperation(EntityOperation anOperation) { removeSimpleCommentOperation(anOperation.getName()); simpleCommentOperationsMap.put(anOperation.getName(), anOperation); simpleCommentOperations.add(anOperation); } - protected abstract static class EntityModifyingOperation implements MirSimpleEntityOperation { + protected abstract static class EntityModifyingOperation implements EntityOperation { private String name; private boolean logOperation; @@ -449,4 +455,39 @@ public class MirBasicAdminInterfaceLocalizer implements MirAdminInterfaceLocaliz anArticle.setFieldValue(field, newValue); } } + + public static class DeleteEntityOperation implements EntityOperation { + private String name; + private ModuleContent content; + private ModuleComment comment; + + public DeleteEntityOperation(String aName) { + name = aName; + comment = new ModuleComment(); + content = new ModuleContent(); + } + + public String getName() { + return "delete"; + } + + public boolean isAvailable(EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure { + return false; + } + + public void perform(EntityAdapter aUser, EntityAdapter anEntity) throws MirLocalizerExc, MirLocalizerFailure { + Entity entity = anEntity.getEntity(); + try { + if (entity instanceof EntityContent) { + content.deleteById(entity.getId()); + } + else if (entity instanceof EntityComment) { + comment.deleteById(entity.getId()); + } + } + catch (ModuleExc e) { + throw new MirLocalizerFailure(e); + } + } + } } diff --git a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java index a0dc143f..a1a9425f 100755 --- a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java @@ -312,8 +312,8 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { List availableOperations = new ArrayList(); while (i.hasNext()) { - MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation = - (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next(); + MirAdminInterfaceLocalizer.EntityOperation operation = + (MirAdminInterfaceLocalizer.EntityOperation) i.next(); if (operation.isAvailable(anEntityAdapter)) { availableOperations.add(operation.getName()); diff --git a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java index bad1ede2..a851ac08 100755 --- a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java @@ -39,6 +39,7 @@ 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; @@ -54,6 +55,7 @@ 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; @@ -97,6 +99,8 @@ public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer { 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) throws MirLocalizerExc, MirLocalizerFailure { diff --git a/source/mircoders/localizer/basic/MirBasicUtilityFunctions.java b/source/mircoders/localizer/basic/MirBasicUtilityFunctions.java index e22c3478..c2542145 100755 --- a/source/mircoders/localizer/basic/MirBasicUtilityFunctions.java +++ b/source/mircoders/localizer/basic/MirBasicUtilityFunctions.java @@ -153,7 +153,4 @@ public class MirBasicUtilityFunctions { return StringRoutines.performRegularExpressionReplacement(aString, anExpression, aReplacement); } - public boolean regexpmatch(String aString, String anExpression) { - return StringRoutines.performRegularExpressionSearch(aString, anExpression); - } } diff --git a/source/mircoders/localizer/basic/actions/ArticleTopicAction.java b/source/mircoders/localizer/basic/actions/ArticleTopicAction.java index 38f876a8..a3e1f83a 100755 --- a/source/mircoders/localizer/basic/actions/ArticleTopicAction.java +++ b/source/mircoders/localizer/basic/actions/ArticleTopicAction.java @@ -39,7 +39,7 @@ import mircoders.localizer.MirLocalizerFailure; import mircoders.localizer.basic.MirBasicAdminInterfaceLocalizer; import mircoders.storage.DatabaseContentToTopics; -public class ArticleTopicAction implements MirBasicAdminInterfaceLocalizer.MirSimpleEntityOperation{ +public class ArticleTopicAction implements MirBasicAdminInterfaceLocalizer.EntityOperation { private String name; private List deleteTopics; private List addTopics; diff --git a/source/mircoders/servlet/ServletModuleFileEdit.java b/source/mircoders/servlet/ServletModuleFileEdit.java index df3b04be..6543c11c 100755 --- a/source/mircoders/servlet/ServletModuleFileEdit.java +++ b/source/mircoders/servlet/ServletModuleFileEdit.java @@ -51,7 +51,7 @@ import java.util.*; * in the config file. * * @author $Author: zapata $ - * @version $Revision: 1.13.2.13 $ $Date: 2006/11/11 15:48:50 $ + * @version $Revision: 1.13.2.14 $ $Date: 2006/12/25 20:10:23 $ * */ @@ -106,13 +106,11 @@ public class ServletModuleFileEdit extends AdminServletModule { return result; } - public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { listSubDirectory(getDirectory(aRequest), "/", aRequest, aResponse); } - public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { try { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); @@ -150,8 +148,7 @@ public class ServletModuleFileEdit extends AdminServletModule { /** * Called when an edited file is saved by the user */ - public void update(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + public void update(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); String filename = requestParser.getParameter("filename"); String subDirectory = requestParser.getParameter("subdirectory"); diff --git a/templates/admin/abuse.log.template b/templates/admin/abuse.log.template index 28d2ede0..798aaff3 100755 --- a/templates/admin/abuse.log.template +++ b/templates/admin/abuse.log.template @@ -40,29 +40,39 @@ ${l.ip} - Article + + Article + + Article ${l.id} (no longer available) + - Comment + + Comment + + Comment ${l.id} (no longer available) + - - - [ ${lang(l.type+".operation."+op)} ] - - - - - ${lang(l.type+".operation."+op)} - - - - ${lang(l.type+".operation."+op)} - + + + + ${utility.encodeHTML(l.browser)} -- 2.11.0