Mercurial Hosting > nabble
diff src/nabble/view/web/tools/UploadMbox2.jtp @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/view/web/tools/UploadMbox2.jtp Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,131 @@ +<% +package nabble.view.web.tools; + +import fschmidt.util.java.IoUtils; +import fschmidt.util.mail.Mail; +import fschmidt.util.mail.MailAddress; +import fschmidt.util.mail.MailHome; +import fschmidt.util.mail.PlainTextContent; +import nabble.model.MailingList; +import nabble.model.ModelException; +import nabble.model.ModelHome; +import nabble.model.Executors; +import nabble.model.Node; +import nabble.view.lib.Jtp; +import nabble.view.lib.Shared; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.URL; +import java.util.Date; +import java.util.Map; + + +public final class UploadMbox2 extends HttpServlet { + private static final Logger logger = LoggerFactory.getLogger(UploadMbox2.class); + + protected void service(HttpServletRequest request,HttpServletResponse response) + throws ServletException, IOException + { + PrintWriter out = response.getWriter(); + final Map<String,FileItem> map; + try { + map = Jtp.getFileItems(request); + } catch(FileUploadException e) { + throw new RuntimeException(e); + } + final Node forum = Jtp.getSiteNotNull(request).getNode(Long.parseLong(map.get("forum").getString())); + final String mailErrorsTo = map.get("mailErrorsTo").getString(); + final int maxErrors = Integer.parseInt(map.get("maxErrors").getString()); + final boolean runRethread = map.get("runRethread") != null; + final String exportDir = getInitParameter("exportDir"); + + Executors.executeNow(new Runnable(){public void run() { + try { + StringBuilder buf = new StringBuilder(); + InputStream in; + if (map.get("mbox").getName()!=null && map.get("mbox").getName().length()>0) { + in = map.get("mbox").getInputStream(); + } else if (map.get("mboxurl").getString()!=null && map.get("mboxurl").getString().length()>0) { + in = new URL(map.get("mboxurl").getString()).openStream(); + } else if (map.get("mboxfile").getString()!=null && map.get("mboxfile").getString().length()>0) { + in = new FileInputStream(new File(exportDir+map.get("mboxfile").getString())); + } else throw new RuntimeException("no mbox file or url defined"); + File file = File.createTempFile("mbox",null); + try { + OutputStream out2 = new FileOutputStream(file); + IoUtils.copyAll(in,out2); + out2.close(); + in.close(); + try { + MailingList.ImportResult ir = forum.getMailingList().importMbox(file,mailErrorsTo,maxErrors); + buf.append("Results from mbox import to forum "+forum.getSubject()+":\n"); + buf.append("imported "+ir.getImported()+" messages\n"); + buf.append("errors "+ir.getErrors()+"\n"); + } catch (ModelException e) { + buf.append("Import error:\n"); + buf.append(e.getMessage()); + logger.error("",e); + } + Mail mail = MailHome.newMail(); + MailAddress to = new MailAddress(mailErrorsTo); + mail.setFrom(to); + mail.setTo(to); + mail.setSentDate(new Date()); + mail.setContent(new PlainTextContent(buf.toString())); + mail.setSubject("mbox import"); + ModelHome.send(mail); + + } finally { + file.delete(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + if(runRethread) { + StringBuilder buf = new StringBuilder(); + buf.append("Rethread procedure scheduled after mbox import for forum '" + forum.getSubject() + "' has finished\n"); + forum.getMailingList().rethread(); + Mail mail = MailHome.newMail(); + MailAddress to = new MailAddress(mailErrorsTo); + mail.setFrom(to); + mail.setTo(to); + mail.setSentDate(new Date()); + mail.setContent(new PlainTextContent(buf.toString())); + mail.setSubject("Rethreading finished"); + ModelHome.send(mail); + } + + }}); + + %> + <html> + <head> + <% + Shared.title(request,response,"uploaded mbox file"); + %> + </head> + <body> + <h2>uploading mbox file to <%=forum.getSubjectHtml()%></h2> + <p>Results will be emailed to <%=mailErrorsTo%> after the import has completed. + <p>return to forum: <%=Jtp.link(forum)%> + </body> + </html> + <% + } +} +%>