From 0f7ce01e0256db7bf28e104887f78159ca23aed2 Mon Sep 17 00:00:00 2001 From: adam Date: Fri, 18 Mar 2005 09:09:58 +0000 Subject: [PATCH] added a servlet for webmail darcs-hash:20050318090958-5007d-15db562ddd7eaa45e4a5597104e98079cadcb30d.gz --- src/org/ibex/mail/target/FileBasedMailbox.java | 129 ++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/src/org/ibex/mail/target/FileBasedMailbox.java b/src/org/ibex/mail/target/FileBasedMailbox.java index 428319f..e3b9afd 100644 --- a/src/org/ibex/mail/target/FileBasedMailbox.java +++ b/src/org/ibex/mail/target/FileBasedMailbox.java @@ -13,6 +13,8 @@ import java.nio.channels.*; import java.net.*; import java.util.*; import java.text.*; +import javax.servlet.*; +import javax.servlet.http.*; /** An exceptionally crude implementation of Mailbox relying on POSIXy filesystem semantics */ public class FileBasedMailbox extends Mailbox.Default { @@ -142,4 +144,131 @@ public class FileBasedMailbox extends Mailbox.Default { } finally { if (fis != null) try { fis.close(); } catch (Exception e) { /* DELIBERATE */ } } } } + + public static class Servlet extends HttpServlet { + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {doGet(request, response);} + private void frames(HttpServletRequest request, HttpServletResponse response, boolean top) throws IOException { + String basename = request.getServletPath(); + PrintWriter pw = new PrintWriter(response.getWriter()); + pw.println(""); + if (top) { + pw.println(" "); + pw.println(" "); + pw.println(" "); + } else { + pw.println(" "); + pw.println(" "); + pw.println(" "); + } + pw.println(" "); + pw.println(""); + pw.flush(); + } + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + String frame = request.getParameter("frame"); + String basename = request.getServletPath(); + + if (frame == null) { frames(request, response, true); return; } + if (frame.equals("top")) { frames(request, response, false); return; } + if (frame.equals("topleft")) { return; } + + if (request.getServletPath().indexOf("..") != -1) throw new IOException(".. not allowed in image paths"); + ServletContext cx = getServletContext(); + String path = cx.getRealPath(request.getServletPath()); + Mailbox mbox = FileBasedMailbox.getFileBasedMailbox(path, false); + if (mbox == null) throw new IOException("no such mailbox: " + path); + + Vec msgs = new Vec(); + for(Mailbox.Iterator it = mbox.iterator(); it.next();) { + String[] s = new String[4]; + Message m = it.cur(); + s[0] = (m.from==null?"":m.from.toString(true)); + s[1] = m.subject; + s[2] = (m.date + "").trim().replaceAll(" "," "); + s[3] = it.num() + ""; + msgs.addElement(s); + } + String[][] messages; + msgs.copyInto(messages = new String[msgs.size()][]); + + if ("bottom".equals(frame)) { bottom(request, response, messages, mbox); return; } + if ("topright".equals(frame)) { topright(request, response, messages); return; } + } + + private void bottom(HttpServletRequest request, HttpServletResponse response, String[][] messages, Mailbox mbox) + throws IOException { + PrintWriter pw = new PrintWriter(response.getWriter()); + pw.println(""); + pw.println(" "); + pw.println("
");
+            if (request.getParameter("msgnum") != null) {
+                int target = Integer.parseInt(request.getParameter("msgnum"));
+                for(Mailbox.Iterator it = mbox.iterator(); it.next();) {
+                    if (it.num() == target) {
+                        StringBuffer tgt = new StringBuffer();
+                        it.cur().getBody().getStream().transcribe(tgt);
+                        pw.println(tgt.toString());
+                        break;
+                    }
+                }
+            }
+            pw.println("    
"); + pw.println(" "); + pw.println(""); + } + + private void topright(HttpServletRequest request, HttpServletResponse response, String[][] messages) throws IOException { + PrintWriter pw = new PrintWriter(response.getWriter()); + String basename = request.getServletPath(); + pw.println(""); + pw.println(" "); + pw.println(" "); + pw.println(" "); + pw.println(" "); + pw.println(" "); + pw.println(" "); + boolean odd=false; + for(int i=0; i"); + String[] m = messages[i]; + pw.println(""); + pw.println(""); + pw.println(""); + pw.println(""); + pw.println(""); + pw.println(""); + } + pw.println("
"+m[0]+""+m[1]+""+m[2]+"
"); + pw.println("
"); + pw.println(" "); + pw.println(""); + } + } } -- 1.7.10.4