X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMain.java;h=d8d75624685b023897044229e0a9b1f5e3d20874;hb=2b3135d4f657c818670fe8323e2415b76aedf478;hp=6a44fc6a7ce1f439c5ac62c64eee6711f473eaa3;hpb=bbceec5af4b7e228380ca1b574077f5dc88ca3a3;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Main.java b/src/org/ibex/mail/Main.java index 6a44fc6..d8d7562 100644 --- a/src/org/ibex/mail/Main.java +++ b/src/org/ibex/mail/Main.java @@ -1,23 +1,62 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.mail; import org.ibex.mail.target.*; import org.ibex.mail.protocol.*; import org.ibex.util.*; import org.ibex.jinetd.*; +import org.ibex.jetty.*; import org.ibex.io.*; import java.io.*; import java.net.*; import java.util.*; import org.ibex.crypto.*; +import org.ibex.jetty.*; public class Main implements Listener { - public void accept(Connection conn) { - Log.error(this, "connection port is " + conn.getLocalPort()); - if (conn.getLocalPort() == 25) { new SMTP.Server().handleRequest(conn); - } else if (conn.getLocalPort() == 143) { new IMAP.Listener().handleRequest(conn); - } else if (conn.getLocalPort() == 119) { new NNTP.Listener().handleRequest(conn); + public boolean accept(Connection conn) { + try { + if (conn.getLocalPort() == 143) new IMAP.Listener(auth).handleRequest(conn); + else if (conn.getLocalPort() == 25) new SMTP.Server().handleRequest(conn); + else if (conn.getLocalPort() == 8080) new SMTP.Server().handleRequest(conn); + else if (conn.getLocalPort() == 119) new NNTP.Listener(auth).handleRequest(conn); + //else if (conn.getLocalPort() == 110) new POP3.Listener(auth).handleRequest(conn); + //else if (conn.getLocalPort() == 8099) GMail.handleRequest(conn); + else return false; + return true; + } finally { + conn.close(); + } + } + + private static final Auth auth = new Auth(); + private static class Auth implements Login { + public Account anonymous() { + try { + final Mailbox root = + FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/list", false); + if (root==null) return null; + return new Account("anonymous", null, root){ + public Mailbox getMailbox(Class protocol) { + return super.getMailbox(protocol); + } + }; + } catch (Exception e) { throw new RuntimeException(e); } + } + public Object login(String user, String pass, Class protocol) { return login(user, pass); } + public Account login(String user, String pass) { + if (!EtcPasswd.verify(user, pass)) return null; + final Mailbox root = + FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/user", true); + return new Account(user, null, root.slash(user, true)){ + public Mailbox getMailbox(Class protocol) { + return super.getMailbox(protocol); + } + }; } - conn.close(); } }