X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmircoders%2Flocalizer%2Fbasic%2FMirBasicOpenPostingLocalizer.java;h=e621cc4e0abb97e9c95882638a114614b1a9e218;hb=259a8dadb6be28e48c7ffbd15de888eab066064c;hp=f4b5d5c7185bbf194c4cb379bb1f730b9f907a74;hpb=d7429fe1376f25d0c4420c35c69dc9edd651ab25;p=mir.git diff --git a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java index f4b5d5c7..e621cc4e 100755 --- a/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicOpenPostingLocalizer.java @@ -1,121 +1,183 @@ -/* - * Copyright (C) 2001, 2002 The Mir-coders group - * - * This file is part of Mir. - * - * Mir is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * Mir is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Mir; if not, write to the Free Software - * 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 the com.oreilly.servlet library, 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.Locale; -import java.util.*; -import javax.servlet.http.HttpServletRequest; - -import mir.log.LoggerWrapper; -import mir.servlet.*; -import mir.config.*; -import mir.session.Request; -import mir.session.Response; -import mir.session.*; - -import mircoders.entity.EntityComment; -import mircoders.entity.EntityContent; -import mircoders.global.MirGlobal; -import mircoders.global.ProducerEngine; -import mircoders.localizer.*; - -public class MirBasicOpenPostingLocalizer implements MirOpenPostingLocalizer { - private List afterContentProducerTasks; - private List afterCommentProducerTasks; - protected LoggerWrapper logger; - protected MirPropertiesConfiguration configuration; - - - public MirBasicOpenPostingLocalizer() throws MirLocalizerExc, MirLocalizerFailure { - logger = new LoggerWrapper("Localizer.Basic.OpenPosting"); - - try { - configuration = MirPropertiesConfiguration.instance(); - } - catch (Throwable e) { - throw new MirLocalizerFailure("Can't get configuration: " + e.getMessage(), e); - } - - try { - String contentProducers = MirGlobal.config().getString("Mir.Localizer.OpenPosting.ContentProducers"); - String commentProducers = MirGlobal.config().getString("Mir.Localizer.OpenPosting.CommentProducers"); - - afterContentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(contentProducers); - afterCommentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(commentProducers); - } - catch (Throwable t) { - logger.error("Setting up MirBasicOpenPostingLocalizer failed: " + t.getMessage()); - - throw new MirLocalizerFailure(t); - } - } - - public SessionHandler getOpenSessionHandler(Request aRequest, Session aSession) throws MirLocalizerExc, MirLocalizerFailure { - if (aSession.getAttribute("handler")==null) - aSession.setAttribute("handler", new MirBasicCommentPostingSessionHandler()); - - return (SessionHandler) aSession.getAttribute("handler"); - } - - public void afterContentPosting() { - MirGlobal.producerEngine().addTasks(afterContentProducerTasks); - } - - public void afterContentPosting(EntityContent aContent) { - afterContentPosting(); - } - - public void afterCommentPosting(EntityComment aComment) { - afterCommentPosting(); - } - - public void afterCommentPosting() { - MirGlobal.producerEngine().addTasks(afterCommentProducerTasks); - } - - public String generateOnetimePassword() { - Random r = new Random(); - int random = r.nextInt(); - - long l = System.currentTimeMillis(); - - l = (l*l*l*l)/random; - if (l<0) - l = l * -1; - - String returnString = ""+l; - - return returnString.substring(5); - } - -} +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * 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. + * If you do not wish to do so, delete this exception statement from your version. + */ +package mircoders.localizer.basic; + +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.ThrottleFilter; +import mircoders.abuse.IPFilterType; +import mircoders.abuse.RegularExpressionFilterType; +import mircoders.entity.EntityComment; +import mircoders.entity.EntityContent; +import mircoders.global.MirGlobal; +import mircoders.global.ProducerEngine; +import mircoders.localizer.MirLocalizerExc; +import mircoders.localizer.MirLocalizerFailure; +import mircoders.localizer.MirOpenPostingLocalizer; + +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"); + + try { + configuration = MirPropertiesConfiguration.instance(); + } + catch (Throwable e) { + throw new MirLocalizerFailure("Can't get configuration: " + e.getMessage(), e); + } + + try { + String contentProducers = MirGlobal.config().getString("Mir.Localizer.OpenPosting.ContentProducers"); + String commentProducers = MirGlobal.config().getString("Mir.Localizer.OpenPosting.CommentProducers"); + + afterContentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(contentProducers); + afterCommentProducerTasks = ProducerEngine.ProducerTask.parseProducerTaskList(commentProducers); + } + catch (Throwable t) { + logger.error("Setting up MirBasicOpenPostingLocalizer failed: " + t.getMessage()); + + 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")); + } + + public SessionHandler getOpenSessionHandler(String aSessionType) throws MirLocalizerExc, MirLocalizerFailure { + if ("email".equals(aSessionType)) + return new MirBasicEmailArticleHandler(); + + 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 { + if (aSession.getAttribute("handler")==null) + { + aSession.setAttribute("handler", getOpenSessionHandler(aRequest.getParameter("sessiontype"))); + } + + return (SessionHandler) aSession.getAttribute("handler"); + } + + public void afterContentPosting() { + 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) { + afterContentPosting(); + } + + public void afterCommentPosting(EntityComment aComment) { + afterCommentPosting(); + } + + public void afterCommentPosting() { + 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() { + Random r = new Random(); + int random = r.nextInt(); + + long l = System.currentTimeMillis(); + + l = (l*l*l*l)/random; + if (l<0) + l = l * -1; + + String returnString = ""+l; + + 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(FilterType aFilterType) { + removeSimpleAntiAbuseFilterType(aFilterType.getName()); + filterTypesMap.put(aFilterType.getName(), aFilterType); + filterTypes.add(aFilterType); + } +}