X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleOpenIndy.java;h=6769e4299132d581198bf6e549f671ace0a544f7;hb=a875630822ea537e068f2ad31687f517437b082a;hp=bdb0f2efd72c81b1e01f4f18338300e84f5a4d11;hpb=63e0ee1fb8038eb6d8f0190cf38c3b3ab2727216;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleOpenIndy.java b/source/mircoders/servlet/ServletModuleOpenIndy.java index bdb0f2ef..6769e429 100755 --- a/source/mircoders/servlet/ServletModuleOpenIndy.java +++ b/source/mircoders/servlet/ServletModuleOpenIndy.java @@ -33,101 +33,85 @@ package mircoders.servlet; import gnu.regexp.RE; import gnu.regexp.REMatch; import mir.bundle.Bundle; -import mir.entity.Entity; import mir.generator.Generator; -import mir.log.LoggerWrapper; import mir.misc.StringUtil; import mir.servlet.ServletModule; import mir.servlet.ServletModuleExc; import mir.servlet.ServletModuleFailure; import mir.servlet.ServletModuleUserExc; -import mir.session.*; -import mir.storage.StorageObjectFailure; -import mir.util.*; -import mircoders.entity.EntityComment; +import mir.session.HTTPAdapters; +import mir.session.Request; +import mir.session.Session; +import mir.session.SessionHandler; +import mir.session.SimpleResponse; +import mir.util.FileRoutines; +import mir.util.HTTPParsedRequest; +import mir.util.HTTPRequestParser; +import mir.util.StringRoutines; +import mir.module.ModuleExc; import mircoders.entity.EntityContent; import mircoders.global.CacheKey; import mircoders.global.MirGlobal; -import mircoders.media.MediaUploadProcessor; -import mircoders.media.UnsupportedMediaTypeExc; -import mircoders.module.ModuleComment; import mircoders.module.ModuleContent; -import mircoders.module.ModuleMediaType; -import mircoders.media.UnsupportedMediaTypeExc; import mircoders.pdf.PDFGenerator; -import mircoders.search.*; -import mircoders.storage.*; -import org.apache.commons.fileupload.FileItem; +import mircoders.search.AudioSearchTerm; +import mircoders.search.ContentSearchTerm; +import mircoders.search.ImagesSearchTerm; +import mircoders.search.KeywordSearchTerm; +import mircoders.search.TextSearchTerm; +import mircoders.search.TopicMatrixSearchTerm; +import mircoders.search.TopicSearchTerm; +import mircoders.search.UnIndexedSearchTerm; +import mircoders.search.VideoSearchTerm; +import mircoders.storage.DatabaseTopics; +import mircoders.localizer.MirLocalizerExc; import org.apache.commons.net.smtp.SMTPClient; import org.apache.commons.net.smtp.SMTPReply; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; -import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.Searcher; +import org.apache.lucene.store.FSDirectory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import java.io.*; -import java.util.*; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Locale; +import java.util.Map; +import java.util.Random; +import java.util.Set; /* - * ServletModuleOpenIndy - - * is the open-access-servlet, which is responsible for - * adding comments to articles & - * open-postings to the newswire - * - * @author mir-coders group - * @version $Id: ServletModuleOpenIndy.java,v 1.89.2.12 2004/11/21 22:07:14 zapata Exp $ - * */ -public class ServletModuleOpenIndy extends ServletModule -{ - - private String commentFormTemplate, commentFormDoneTemplate, commentFormDupeTemplate; - private String postingFormTemplate, postingFormDoneTemplate, postingFormDupeTemplate; +public class ServletModuleOpenIndy extends ServletModule { private String searchResultsTemplate; private String prepareMailTemplate,sentMailTemplate,emailAnArticleTemplate; private ModuleContent contentModule; - private ModuleComment commentModule; - private String directOp ="yes"; - private static ServletModuleOpenIndy instance = new ServletModuleOpenIndy(); - public static ServletModule getInstance() { - return instance; - } + public ServletModuleOpenIndy() { + searchResultsTemplate = getConfiguration().getString("ServletModule.OpenIndy.SearchResultsTemplate"); + prepareMailTemplate = getConfiguration().getString("ServletModule.OpenIndy.PrepareMailTemplate"); + emailAnArticleTemplate = getConfiguration().getString("ServletModule.OpenIndy.MailableArticleTemplate"); + sentMailTemplate = getConfiguration().getString("ServletModule.OpenIndy.SentMailTemplate"); - private ServletModuleOpenIndy() { - super(); - try { - logger = new LoggerWrapper("ServletModule.OpenIndy"); - - commentFormTemplate = configuration.getString("ServletModule.OpenIndy.CommentTemplate"); - commentFormDoneTemplate = configuration.getString("ServletModule.OpenIndy.CommentDoneTemplate"); - commentFormDupeTemplate = configuration.getString("ServletModule.OpenIndy.CommentDupeTemplate"); - - postingFormTemplate = configuration.getString("ServletModule.OpenIndy.PostingTemplate"); - postingFormDoneTemplate = configuration.getString("ServletModule.OpenIndy.PostingDoneTemplate"); - postingFormDupeTemplate = configuration.getString("ServletModule.OpenIndy.PostingDupeTemplate"); - - searchResultsTemplate = configuration.getString("ServletModule.OpenIndy.SearchResultsTemplate"); - prepareMailTemplate = configuration.getString("ServletModule.OpenIndy.PrepareMailTemplate"); - emailAnArticleTemplate = configuration.getString("ServletModule.OpenIndy.MailableArticleTemplate"); - sentMailTemplate = configuration.getString("ServletModule.OpenIndy.SentMailTemplate"); - directOp = configuration.getString("DirectOpenposting").toLowerCase(); - commentModule = new ModuleComment(); - mainModule = commentModule; - contentModule = new ModuleContent(); - defaultAction = "defaultAction"; - } - catch (StorageObjectFailure e) { - logger.error("servletmoduleopenindy could not be initialized: " + e.getMessage()); - } + contentModule = new ModuleContent(); } /** @@ -147,334 +131,7 @@ public class ServletModuleOpenIndy extends ServletModule * @throws ServletModuleFailure */ public void openPostingDisabled(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { - deliver(aRequest, aResponse, null, null, configuration.getString("ServletModule.OpenIndy.PostingDisabledTemplate")); - } - - /** - * Method for making a comment - */ - public void addcomment(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { - if (MirGlobal.abuse().getOpenPostingDisabled()) { - openPostingDisabled(req, res); - - return; - } - - String aid = req.getParameter("aid"); // the article id the comment will belong to - - if (aid != null && !aid.equals("")) { - try { - Map mergeData = new HashMap(); - - // onetimepasswd - if (MirGlobal.abuse().getOpenPostingPassword()) { - String passwd = generateOnetimePassword(); - HttpSession session = req.getSession(false); - session.setAttribute("passwd", passwd); - mergeData.put("passwd", passwd); - } - else { - mergeData.put("passwd", null); - } - mergeData.put("aid", aid); - - Map extraInfo = new HashMap(); - extraInfo.put("languagePopUpData", DatabaseLanguage.getInstance().getPopupData()); - - deliver(req, res, mergeData, extraInfo, commentFormTemplate); - } - catch (Throwable t) { - throw new ServletModuleFailure("ServletModuleOpenIndy.addcomment: " + t.getMessage(), t); - } - } - else - throw new ServletModuleExc("aid not set!"); - } - - /** - * Method for inserting a comment into the Database and delivering - * the commentDone Page - */ - - public void inscomment(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { - if (MirGlobal.abuse().getOpenPostingDisabled()) { - openPostingDisabled(req, res); - - return; - } - - String aid = req.getParameter("to_media"); // the article id the comment will belong to - if (aid != null && !aid.equals("")) { - // ok, collecting data from form - try { - Map withValues = getIntersectingValues(req, DatabaseComment.getInstance()); - - //no html in comments(for now) - for (Iterator i = withValues.keySet().iterator(); i.hasNext(); ) { - String k = (String) i.next(); - String v = (String) withValues.get(k); - - withValues.put(k, StringUtil.removeHTMLTags(v)); - } - withValues.put("is_published", "1"); - withValues.put("to_comment_status", "1"); - withValues.put("is_html", "0"); - - //checking the onetimepasswd - HttpSession session = req.getSession(false); - String sessionPasswd = (String) session.getAttribute("passwd"); - if (sessionPasswd != null) { - String passwd = req.getParameter("passwd"); - if (passwd == null || passwd.length() == 0) { - throw new ServletModuleUserExc("comment.error.missingpassword", new String[] {}); - } - if (!sessionPasswd.equals(passwd)) { - throw new ServletModuleUserExc("comment.error.invalidpassword", new String[] {}); - } - session.invalidate(); - } - - String id = mainModule.add(withValues); - - SimpleResponse response = new SimpleResponse(); - response.setResponseGenerator(commentFormDoneTemplate); - - if (id == null) { - deliver(req, res, null, null, commentFormDupeTemplate); - } - else { - DatabaseContent.getInstance().setUnproduced("id=" + aid); - - try { - EntityComment comment = (EntityComment) DatabaseComment.getInstance().selectById(id); - MirGlobal.localizer().openPostings().afterCommentPosting(comment); - MirGlobal.abuse().checkComment( - comment, new HTTPAdapters.HTTPRequestAdapter(req), res); - } - catch (Throwable t) { - throw new ServletModuleExc(t.getMessage()); - } - } - - // redirecting to url - // should implement back to article - deliver(req, res, response.getResponseValues(), null, response.getResponseGenerator()); - } - catch (Throwable e) { - throw new ServletModuleFailure(e); - } - } - else - throw new ServletModuleExc("aid not set!"); - - } - - /** - * Method for delivering the form-Page for open posting - */ - - public void addposting(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { - try { - if (MirGlobal.abuse().getOpenPostingDisabled()) { - openPostingDisabled(req, res); - - return; - } - - Map mergeData = new HashMap(); - - // onetimepasswd - if (MirGlobal.abuse().getOpenPostingPassword()) { - String passwd = generateOnetimePassword(); - HttpSession session = req.getSession(false); - session.setAttribute("passwd", passwd); - mergeData.put("passwd", passwd); - } - else { - mergeData.put("passwd", null); - } - - String maxMedia = configuration.getString("ServletModule.OpenIndy.MaxMediaUploadItems"); - String defaultMedia = configuration.getString("ServletModule.OpenIndy.DefaultMediaUploadItems"); - String numOfMedia = req.getParameter("medianum"); - - if (numOfMedia == null || numOfMedia.equals("")) { - numOfMedia = defaultMedia; - } - else if (Integer.parseInt(numOfMedia) > Integer.parseInt(maxMedia)) { - numOfMedia = maxMedia; - } - - int mediaNum = Integer.parseInt(numOfMedia); - List mediaFields = new Vector(); - for (int i = 0; i < mediaNum; i++) { - Integer mNum = new Integer(i + 1); - mediaFields.add(mNum.toString()); - } - mergeData.put("medianum", numOfMedia); - mergeData.put("mediafields", mediaFields); - mergeData.put("to_topic", null); - - Map extraInfo = new HashMap(); - extraInfo.put("languagePopUpData", DatabaseLanguage.getInstance().getPopupData()); - extraInfo.put("themenPopupData", DatabaseTopics.getInstance().getPopupData()); - - deliver(req, res, mergeData, extraInfo, postingFormTemplate); - } - catch (Throwable t) { - throw new ServletModuleFailure(t); - } - } - - /** - * Method for inserting an open posting into the Database and delivering - * the postingDone Page - */ - - public void insposting(HttpServletRequest aRequest, HttpServletResponse aResponse) throws - ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { - if (MirGlobal.abuse().getOpenPostingDisabled()) { - openPostingDisabled(aRequest, aResponse); - - return; - } - - try { - HTTPParsedRequest parsedRequest = new HTTPParsedRequest( - aRequest, - configuration.getString("Mir.DefaultEncoding"), - configuration.getInt("MaxMediaUploadSize")*1024, - configuration.getString("TempDir")); - - Map mergeData = new HashMap(); - - HttpSession session = aRequest.getSession(false); - String sessionPasswd = (String) session.getAttribute("passwd"); - if (sessionPasswd != null) { - String passwd = parsedRequest.getParameter("passwd"); - - if (passwd == null || passwd.length() == 0) { - throw new ServletModuleUserExc("posting.error.missingpassword", new String[] {}); - } - if (!sessionPasswd.equals(passwd)) { - throw new ServletModuleUserExc("posting.error.invalidpassword", new String[] {}); - } - session.invalidate(); - } - - if (((parsedRequest.getParameter("title")).length() == 0) || - ((parsedRequest.getParameter("description")).length() == 0) || - ((parsedRequest.getParameter("content_data")).length() == 0)) - throw new ServletModuleUserExc("posting.error.missingfield", new String[] {}); - - List mediaList = new Vector(); - Iterator i = parsedRequest.getFiles().iterator(); - - while (i.hasNext()) { - UploadedFile file = new mir.session.CommonsUploadedFileAdapter((FileItem) i.next()); - Map mediaValues = new HashMap(); - - String suffix = file.getFieldName().substring(5); // media${m} - logger.debug("media_title" + suffix); - String title = parsedRequest.getParameter("media_title" + suffix); - - mediaValues.put("title", StringUtil.removeHTMLTags(title)); - mediaValues.put("creator", StringUtil.removeHTMLTags(parsedRequest.getParameter("creator"))); - mediaValues.put("to_publisher", "0"); - mediaValues.put("is_published", "1"); - mediaValues.put("to_media_folder", "7"); - - mediaList.add(MediaUploadProcessor.processMediaUpload(file, mediaValues)); - } - - Map withValues = new HashMap(); - i = DatabaseContent.getInstance().getFieldNames().iterator(); - while (i.hasNext()) { - String field = (String) i.next(); - String value = parsedRequest.getParameter(field); - if (value!=null) - withValues.put(field, value); - } - - - for (i = withValues.keySet().iterator(); i.hasNext(); ) { - String k = (String) i.next(); - String v = (String) withValues.get(k); - - if (k.equals("content_data")) { - //this doesn't quite work yet, so for now, all html goes - //withValues.put(k,StringUtil.approveHTMLTags(v)); - withValues.put(k, StringUtil.deleteForbiddenTags(v)); - } - else if (k.equals("description")) { - String tmp = StringUtil.deleteForbiddenTags(v); - withValues.put(k, StringUtil.deleteHTMLTableTags(tmp)); - } - else { - withValues.put(k, StringUtil.removeHTMLTags(v)); - } - } - - withValues.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); - withValues.put("publish_path", - StringUtil.webdbDate2path( (String) withValues.get("date"))); - withValues.put("is_produced", "0"); - withValues.put("is_published", "1"); - if (directOp.equals("yes")) - withValues.put("to_article_type", "1"); - - withValues.put("to_publisher", "1"); - - // inserting content into database - String cid = contentModule.add(withValues); - logger.debug("id: " + cid); - //insert was not successfull - if (cid == null) { - deliver(aRequest, aResponse, mergeData, null, postingFormDupeTemplate); - return; - } - - List topics = parsedRequest.getParameterList("to_topic"); - if (topics.size() > 0) { - try { - DatabaseContentToTopics.getInstance().setTopics(cid, topics); - } - catch (Throwable e) { - logger.error("setting content_x_topic failed"); - contentModule.deleteById(cid); - throw new ServletModuleFailure( - "smod - openindy :: insposting: setting content_x_topic failed: " + - e.toString(), e); - } - } - - i = mediaList.iterator(); - while (i.hasNext()) { - Entity mediaEnt = (Entity) i.next(); - DatabaseContentToMedia.getInstance().addMedia(cid, mediaEnt.getId()); - } - - EntityContent article = (EntityContent) contentModule.getById(cid); - try { - MirGlobal.abuse().checkArticle( - article, new HTTPAdapters.HTTPRequestAdapter(aRequest), aResponse); - MirGlobal.localizer().openPostings().afterContentPosting(article); - } - catch (Throwable t) { - logger.error("Error while post-processing article: " + t.getMessage()); - } - deliver(aRequest, aResponse, mergeData, null, postingFormDoneTemplate); - } - catch (Throwable e) { - e.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); - Throwable cause = ExceptionFunctions.traceCauseException(e); - - if (cause instanceof UnsupportedMediaTypeExc) { - throw new ServletModuleUserExc("media.unsupportedformat", new String[] {}); - } - throw new ServletModuleFailure(e); - } + deliver(aRequest, aResponse, null, null, getConfiguration().getString("ServletModule.OpenIndy.PostingDisabledTemplate")); } /** @@ -493,7 +150,7 @@ public class ServletModuleOpenIndy extends ServletModule String requestLanguage = aRequest.getParameter("language"); String sessionLanguage = (String) aSession.getAttribute("language"); String acceptLanguage = aRequest.getLocale().getLanguage(); - String defaultLanguage = configuration.getString("Mir.Login.DefaultLanguage", "en"); + String defaultLanguage = getConfiguration().getString("Mir.Login.DefaultLanguage", "en"); String language = requestLanguage; @@ -527,18 +184,23 @@ public class ServletModuleOpenIndy extends ServletModule try { Request request = new HTTPAdapters.HTTPParsedRequestAdapter(new HTTPParsedRequest(aRequest, - configuration.getString("Mir.DefaultEncoding"), - configuration.getInt("MaxMediaUploadSize")*1024, - configuration.getString("TempDir"))); + getConfiguration().getString("Mir.DefaultEncoding"), + getConfiguration().getInt("MaxMediaUploadSize")*1024, + getConfiguration().getString("TempDir"))); if (aRequest.isRequestedSessionIdValid() && !aRequest.isRequestedSessionIdFromURL() && - !aRequest.getRequestedSessionId().equals(aRequest.getParameter(SESSION_REQUEST_KEY))) + !aRequest.getRequestedSessionId().equals(aRequest.getParameter(SESSION_REQUEST_KEY))) { aRequest.getSession().invalidate(); + } Session session = new HTTPAdapters.HTTPSessionAdapter(aRequest.getSession()); SimpleResponse response = new SimpleResponse( - ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getResponseLocale(aRequest.getSession(), aRequest), getFallbackLocale(aRequest)}, + ServletHelper.makeGenerationData(aRequest, aResponse, + new Locale[] { + getResponseLocale(aRequest.getSession(), aRequest), + getFallbackLocale(aRequest) + }, "etc/bundles/open")); response.setResponseValue("actionURL", aResponse.encodeURL(MirGlobal.config().getString("RootUri") + "/servlet/OpenMir")+"?"+SESSION_REQUEST_KEY+"="+aRequest.getSession().getId()); @@ -549,8 +211,7 @@ public class ServletModuleOpenIndy extends ServletModule ServletHelper.generateOpenPostingResponse(aResponse.getWriter(), response.getResponseValues(), response.getResponseGenerator()); } catch (Throwable t) { - logger.error(t.toString()); - t.printStackTrace(logger.asPrintWriter(LoggerWrapper.DEBUG_MESSAGE)); + getLogger().error(t.toString(), t); throw new ServletModuleFailure(t); } @@ -559,20 +220,20 @@ public class ServletModuleOpenIndy extends ServletModule /** * Method for preparing and sending a content as an email message */ - public void mail(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure - { - String aid = req.getParameter("mail_aid"); + public void mail(HttpServletRequest aRequest, HttpServletResponse aResponse) + throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { + String aid = aRequest.getParameter("mail_aid"); if (aid == null){ - throw new ServletModuleExc("An article id must be specified in requests to email an article. Something therefore went badly wrong...."); + throw new ServletModuleExc("An article id must be specified in requests " + + "to email an article. Something therefore went badly wrong...."); } - String to = req.getParameter("mail_to"); - String from = req.getParameter("mail_from"); - String from_name = req.getParameter("mail_from_name"); - String from_ip = req.getRemoteAddr(); - String comment = req.getParameter("mail_comment"); - String mail_language = req.getParameter("mail_language"); + String to = aRequest.getParameter("mail_to"); + String from = aRequest.getParameter("mail_from"); + String from_name = aRequest.getParameter("mail_from_name"); + String from_ip = aRequest.getRemoteAddr(); + String comment = aRequest.getParameter("mail_comment"); + String mail_language = aRequest.getParameter("mail_language"); Map mergeData = new HashMap(); mergeData.put("mail_to",to); @@ -584,7 +245,7 @@ public class ServletModuleOpenIndy extends ServletModule if (to == null || from == null || from_name == null|| to.equals("") || from.equals("") || from_name.equals("") || mail_language == null || mail_language.equals("")){ - deliver(req, res, mergeData, null, prepareMailTemplate); + deliver(aRequest, aResponse, mergeData, null, prepareMailTemplate); } else { //run checks on to and from and mail_language to make sure no monkey business occurring @@ -603,31 +264,46 @@ public class ServletModuleOpenIndy extends ServletModule CacheKey theCacheKey=new CacheKey("email",aid+mail_language); String theEmailText; + EntityContent article; + try { + article = (EntityContent) contentModule.getById(aid); + } + catch (ModuleExc e) { + throw new ServletModuleExc("Couldn't retrieve article " + aid); + } + + if (!MirGlobal.localizer().openPostings().allowArticlePublication(article)) { + throw new ServletModuleExc("Illegal article"); + } + if (MirGlobal.mruCache().hasObject(theCacheKey)){ - logger.info("fetching email text for article "+aid+" from cache"); + getLogger().info("fetching email text for article "+aid+" from cache"); theEmailText = (String) MirGlobal.mruCache().getObject(theCacheKey); } else { - EntityContent contentEnt; + StringWriter theEMailTextWriter = new StringWriter(); + PrintWriter dest = new PrintWriter(theEMailTextWriter); try { - contentEnt = (EntityContent) contentModule.getById(aid); - StringWriter theEMailTextWriter = new StringWriter(); - PrintWriter dest = new PrintWriter(theEMailTextWriter); Map articleData = new HashMap(); - articleData.put("article", MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("content", contentEnt)); + try { + articleData.put("article", + MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("content", article)); + } + catch (MirLocalizerExc e) { + throw new ServletModuleExc("Can't retrieve article " + aid, e); + } articleData.put("languagecode", mail_language); - deliver(dest, req, res, articleData, null, emailAnArticleTemplate, mail_language); - theEmailText = theEMailTextWriter.toString(); - MirGlobal.mruCache().storeObject(theCacheKey, theEmailText); + deliver(dest, aRequest, aResponse, articleData, null, emailAnArticleTemplate, mail_language); } - catch (Throwable e) { - throw new ServletModuleFailure("Couldn't get content for article " + aid + mail_language + ": " + e.getMessage(), e); + finally { + dest.close(); } + theEmailText = theEMailTextWriter.toString(); + MirGlobal.mruCache().storeObject(theCacheKey, theEmailText); } String content = theEmailText; - // add some headers content = "To: " + to + "\nReply-To: "+ from + "\nX-Originating-IP: "+ from_ip + "\n" + content; // put in the comment where it should go @@ -652,7 +328,7 @@ public class ServletModuleOpenIndy extends ServletModule SMTPClient client=new SMTPClient(); try { int reply; - client.connect(configuration.getString("ServletModule.OpenIndy.SMTPServer")); + client.connect(getConfiguration().getString("ServletModule.OpenIndy.SMTPServer")); reply = client.getReplyCode(); @@ -661,11 +337,11 @@ public class ServletModuleOpenIndy extends ServletModule throw new ServletModuleExc("SMTP server refused connection."); } - client.sendSimpleMessage(configuration.getString("ServletModule.OpenIndy.EmailIsFrom"), to, content); + client.sendSimpleMessage(getConfiguration().getString("ServletModule.OpenIndy.EmailIsFrom"), to, content); client.disconnect(); //mission accomplished - deliver(req, res, mergeData, null, sentMailTemplate); + deliver(aRequest, aResponse, mergeData, null, sentMailTemplate); } catch(IOException e) { if(client.isConnected()) { @@ -733,7 +409,7 @@ public class ServletModuleOpenIndy extends ServletModule mergeData.put("topics", DatabaseTopics.getInstance().getPopupData()); } catch (Throwable e) { - logger.debug("Can't get topics: " + e.toString()); + getLogger().debug("Can't get topics: " + e.toString()); } String searchBackValue = req.getParameter("search_back"); @@ -760,7 +436,7 @@ public class ServletModuleOpenIndy extends ServletModule session.setAttribute("positionInResults", new Integer(newPosition)); } else { - File indexFile = FileFunctions.getAbsoluteOrRelativeFile(configuration.getHome(), configuration.getString("IndexPath")); + File indexFile = FileRoutines.getAbsoluteOrRelativeFile(getConfiguration().getHome(), getConfiguration().getString("IndexPath")); String creatorFragment = creatorTerm.makeTerm(req); if (creatorFragment != null) { @@ -771,7 +447,7 @@ public class ServletModuleOpenIndy extends ServletModule // the contentTerm uses param "search_boolean" to combine its terms String contentFragment = contentTerm.makeTerm(req); if (contentFragment != null) { - logger.debug("contentFragment: " + contentFragment); + getLogger().debug("contentFragment: " + contentFragment); queryString = queryString + " +" + contentFragment; } @@ -806,21 +482,22 @@ public class ServletModuleOpenIndy extends ServletModule else { try { Searcher searcher = null; + try { - searcher = new IndexSearcher(IndexReader.open(indexFile)); + searcher = new IndexSearcher(FSDirectory.getDirectory(indexFile,false)); } catch (IOException e) { - logger.debug("Can't open indexPath: " + indexFile.getAbsolutePath()); + getLogger().debug("Can't open indexPath: " + indexFile.getAbsolutePath()); throw new ServletModuleExc("Problem with Search Index! : " + e.toString()); } - Query query = null; + Query query; try { query = QueryParser.parse(queryString, "content", new StandardAnalyzer()); } catch (Exception e) { searcher.close(); - logger.debug("Query don't parse: " + queryString); + getLogger().debug("Query don't parse: " + queryString); throw new ServletModuleExc("Problem with Query String! (was '" + queryString + "')"); } @@ -830,7 +507,7 @@ public class ServletModuleOpenIndy extends ServletModule } catch (IOException e) { searcher.close(); - logger.debug("Can't get hits: " + e.toString()); + getLogger().debug("Can't get hits: " + e.toString()); throw new ServletModuleExc("Problem getting hits!"); } @@ -842,7 +519,7 @@ public class ServletModuleOpenIndy extends ServletModule throw new ServletModuleExc("Please let me sort by something!(missing search_sort)"); } - // here is where the documents will go for storage across sessions + // here is where the documents will go for database across sessions ArrayList theDocumentsSorted = new ArrayList(); if (sortBy.equals("score")) { @@ -890,7 +567,7 @@ public class ServletModuleOpenIndy extends ServletModule searcher.close(); } catch (IOException e) { - logger.debug("Can't close searcher: " + e.toString()); + getLogger().debug("Can't close searcher: " + e.toString()); throw new ServletModuleFailure("Problem closing searcher(normal):" + e.getMessage(), e); } @@ -904,7 +581,7 @@ public class ServletModuleOpenIndy extends ServletModule } catch (IOException e) { - logger.debug("Can't close searcher: " + e.toString()); + getLogger().debug("Can't close searcher: " + e.toString()); throw new ServletModuleFailure("Problem closing searcher: " + e.getMessage(), e); } } @@ -916,7 +593,7 @@ public class ServletModuleOpenIndy extends ServletModule if (theDocs != null) { mergeData.put("numberOfHits", (session.getAttribute("numberOfHits")).toString()); - List theHits = new Vector(); + List theHits = new ArrayList(); int pIR = ( (Integer) session.getAttribute("positionInResults")).intValue(); int terminus; int numHits = ( (Integer) session.getAttribute("numberOfHits")).intValue(); @@ -957,7 +634,7 @@ public class ServletModuleOpenIndy extends ServletModule } } catch (Throwable e) { - logger.error("Can't iterate over hits: " + e.toString()); + getLogger().error("Can't iterate over hits: " + e.toString()); throw new ServletModuleFailure("Problem getting hits: " + e.getMessage(), e); } @@ -975,19 +652,19 @@ public class ServletModuleOpenIndy extends ServletModule * Method for dynamically generating a pdf using iText */ - public void getpdf(HttpServletRequest req, HttpServletResponse res) + public void getpdf(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { + long starttime = System.currentTimeMillis(); + String ID_REQUEST_PARAM = "id"; int maxArticlesInNewsleter = 15; // it is nice not to be dos'ed try { - String idParam = req.getParameter(ID_REQUEST_PARAM); + String idParam = aRequest.getParameter(ID_REQUEST_PARAM); if (idParam != null) { - RE re = new RE("[0-9]+"); REMatch[] idMatches = re.getAllMatches(idParam); - String cacheSelector = ""; for (int i = 0; i < idMatches.length; i++) { @@ -1001,11 +678,11 @@ public class ServletModuleOpenIndy extends ServletModule byte[] thePDF; if (MirGlobal.mruCache().hasObject(theCacheKey)) { - logger.info("fetching pdf from cache"); + getLogger().debug("fetching pdf from cache"); thePDF = (byte[]) MirGlobal.mruCache().getObject(theCacheKey); } else { - logger.info("generating pdf and caching it"); + getLogger().debug("generating pdf and caching it"); ByteArrayOutputStream out = new ByteArrayOutputStream(); PDFGenerator pdfMaker = new PDFGenerator(out); @@ -1015,6 +692,8 @@ public class ServletModuleOpenIndy extends ServletModule REMatch aMatch = idMatches[i]; String id = aMatch.toString(); EntityContent contentEnt = (EntityContent) contentModule.getById(id); + + pdfMaker.addIndexItem(contentEnt); } } @@ -1022,9 +701,13 @@ public class ServletModuleOpenIndy extends ServletModule for (int i = 0; i < idMatches.length; i++) { REMatch aMatch = idMatches[i]; String id = aMatch.toString(); - EntityContent contentEnt = (EntityContent) contentModule.getById(id); + EntityContent article = (EntityContent) contentModule.getById(id); + + if (!MirGlobal.localizer().openPostings().allowArticlePublication(article)) { + throw new ServletModuleExc("Illegal article"); + } - pdfMaker.add(contentEnt); + pdfMaker.add(article, getLocale(aRequest)); } pdfMaker.stop(); @@ -1034,12 +717,12 @@ public class ServletModuleOpenIndy extends ServletModule MirGlobal.mruCache().storeObject(theCacheKey, thePDF); } - res.setContentType("application/pdf"); - res.setContentLength(thePDF.length); - res.getOutputStream().write(thePDF); - res.getOutputStream().flush(); + aResponse.setContentType("application/pdf"); + aResponse.setContentLength(thePDF.length); + aResponse.getOutputStream().write(thePDF); + aResponse.getOutputStream().flush(); String elapsedtime = (new Long(System.currentTimeMillis() - starttime)).toString(); - logger.info("pdf retireval took " + elapsedtime + " milliseconds"); + getLogger().info("pdf retireval took " + elapsedtime + " milliseconds"); } else { @@ -1047,7 +730,8 @@ public class ServletModuleOpenIndy extends ServletModule } } catch (Throwable t) { - logger.error(t.toString()); + getLogger().error(t.toString()); + throw new ServletModuleFailure(t); } } @@ -1085,13 +769,14 @@ public class ServletModuleOpenIndy extends ServletModule responseData.put("extra", anExtra); - Generator generator = MirGlobal.localizer().generators().makeOpenPostingGeneratorLibrary().makeGenerator(aGenerator); - generator.generate(anOutputWriter, responseData, logger); + Generator generator = + MirGlobal.localizer().generators().makeOpenPostingGeneratorLibrary().makeGenerator(aGenerator, null); + generator.generate(anOutputWriter, responseData, getLogger()); anOutputWriter.close(); } catch (Throwable e) { - logger.error("Error while generating " + aGenerator + ": " + e.getMessage()); + getLogger().error("Error while generating " + aGenerator + ": " + e.getMessage()); throw new ServletModuleFailure(e); } @@ -1105,13 +790,15 @@ public class ServletModuleOpenIndy extends ServletModule responseData.put("extra", anExtra); - Generator generator = MirGlobal.localizer().generators().makeOpenPostingGeneratorLibrary().makeGenerator(aGenerator); - generator.generate(anOutputWriter, responseData, logger); + Generator generator = + MirGlobal.localizer().generators(). + makeOpenPostingGeneratorLibrary().makeGenerator(aGenerator, null); + generator.generate(anOutputWriter, responseData, getLogger()); anOutputWriter.close(); } catch (Throwable e) { - logger.error("Error while generating " + aGenerator + ": " + e.getMessage()); + getLogger().error("Error while generating " + aGenerator + ": " + e.getMessage()); throw new ServletModuleFailure(e); } @@ -1120,13 +807,13 @@ public class ServletModuleOpenIndy extends ServletModule public void handleError(HttpServletRequest aRequest, HttpServletResponse aResponse,PrintWriter out, Throwable anException) { try { - logger.error("error: " + anException); + getLogger().error("Error during open action", anException); Map data = new HashMap(); data.put("errorstring", anException.getMessage()); data.put("date", StringUtil.date2readableDateTime(new GregorianCalendar())); - deliver(out, aRequest, aResponse, data, null, configuration.getString("ServletModule.OpenIndy.ErrorTemplate")); + deliver(out, aRequest, aResponse, data, null, getConfiguration().getString("ServletModule.OpenIndy.ErrorTemplate")); } catch (Throwable e) { throw new ServletModuleFailure(e); @@ -1136,7 +823,7 @@ public class ServletModuleOpenIndy extends ServletModule public void handleUserError(HttpServletRequest aRequest, HttpServletResponse aResponse, PrintWriter out, ServletModuleUserExc anException) { try { - logger.warn("user error: " + anException.getMessage()); + getLogger().warn("user error: " + anException.getMessage()); Map data = new HashMap(); Bundle bundle = @@ -1145,7 +832,7 @@ public class ServletModuleOpenIndy extends ServletModule data.put("errorstring", bundle.getValue(anException.getMessage(), Arrays.asList(anException.getParameters()))); data.put("date", StringUtil.date2readableDateTime(new GregorianCalendar())); - deliver(out, aRequest, aResponse, data, null, configuration.getString("ServletModule.OpenIndy.UserErrorTemplate")); + deliver(out, aRequest, aResponse, data, null, getConfiguration().getString("ServletModule.OpenIndy.UserErrorTemplate")); } catch (Throwable e) { throw new ServletModuleFailure(e);