X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fmail%2FMain.java;h=cfad5c1a152e0c72e04f29f4d99338409fc9d102;hb=03e064207e936a838a108285b625613460aee829;hp=bafbebba0d2ebf03da88f77eb77051884abfffa2;hpb=c099a298576b1083c6be3259442900056032f0b1;p=org.ibex.mail.git diff --git a/src/org/ibex/mail/Main.java b/src/org/ibex/mail/Main.java index bafbebb..cfad5c1 100644 --- a/src/org/ibex/mail/Main.java +++ b/src/org/ibex/mail/Main.java @@ -1,31 +1,73 @@ +// 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); + 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 if (conn.getLocalPort() == 8080) Jetty.instance().accept(conn); + //else if (conn.getLocalPort() == 443) Jetty.instance().accept(conn); + //else if (conn.getLocalPort() == 80) Jetty.instance().accept(conn); + else return false; + return true; + } finally { + conn.close(); } - conn.close(); } - public static class BogusAuthenticator implements IMAP.Server.Authenticator { - final Mailbox root = - FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT, true).slash("user", true).slash("megacz", true); - public Mailbox authenticate(String u, String p) { - if (u.equals("megacz") && p.equals("pass")) return root; - return null; + private static final Auth auth = new Auth(); + private static class Auth implements Login { + public Account anonymous() { return null; } + public Object login(String user, String pass, Class protocol) { + //if (protocol == IMAP.class && user.endsWith("@gmail.com")) return GMail.getGMail(user, pass).getIMAP(); + return login(user, pass); + } + public Account login(String user, String pass) { + //if (user.indexOf("@gmail.com") != -1) return GMail.getGMail(user, 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) { + //if (protocol == IMAP.class) return super.getMailbox(protocol).slash("newmail", false).slash("pending", false); + /* + if (protocol == NNTP.class) { + final Mailbox arch = new MailmanArchives(); + return new Mailbox.Default() { + public void add(Message m) { throw new RuntimeException("not supported"); } + public void add(Message m, int i) { throw new RuntimeException("not supported"); } + public int uidValidity() { return 1; } + public Mailbox.Iterator iterator() { return null; } + public int uidNext() { return 0; } + public String[] children() { return new String[] { "us" }; } + public Mailbox slash(String name, boolean create) { return arch; } + }; + } else { + */ + return super.getMailbox(protocol); + //} + } + }; } }