Mercurial Hosting > nabble
diff src/nabble/view/web/tools/UploadMbox2.java @ 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.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,130 @@ + +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); + } + + }}); + + + out.print( "\r\n<html>\r\n<head>\r\n" ); + + Shared.title(request,response,"uploaded mbox file"); + + out.print( "\r\n</head>\r\n<body>\r\n<h2>uploading mbox file to " ); + out.print( (forum.getSubjectHtml()) ); + out.print( "</h2>\r\n<p>Results will be emailed to " ); + out.print( (mailErrorsTo) ); + out.print( " after the import has completed.\r\n<p>return to forum: " ); + out.print( (Jtp.link(forum)) ); + out.print( "\r\n</body>\r\n</html>\r\n" ); + + } +} +