start counting at 1
[org.ibex.mail.git] / src / org / ibex / mail / protocol / NNTP.java
index 7cf409c..048efba 100644 (file)
@@ -88,7 +88,7 @@ public class NNTP {
         private Group getgroup(String s) {
             Mailbox box = root;
             for(StringTokenizer st = new StringTokenizer(s, "."); st.hasMoreTokens(); box = box.slash(st.nextToken(), false));
-            return new Group(s, true, 0, box.count(Query.all()), box.count(Query.all()));
+            return new Group(s, true, 1, box.count(Query.all()), box.count(Query.all()));
         }
 
         public Group[]  newgroups(Date d, String[] distributions) { /* FEATURE */ return new Group[] { }; }
@@ -96,13 +96,10 @@ public class NNTP {
     }
 
     public static class Listener implements Worker {
-        private Server api;
+        private Server api = null;
+        private Login login;
         private Connection conn;
-        public Listener(Server api) { this.api = api; }
-        public Listener() {
-            Mailbox root = FileBasedMailbox.getFileBasedMailbox("/var/org.ibex.mail/user/megacz/newmail/", true);
-            this.api = new MailboxWrapper(root);
-        }
+        public Listener(Login l) { this.login = l; }
 
         private void println(String s) { Log.warn("[nntp-write]", s); conn.println(s); }
         private void println() { Log.warn("[nntp-write]", ""); conn.println(); }
@@ -127,10 +124,29 @@ public class NNTP {
             this.conn = conn;
             conn.setTimeout(30 * 60 * 1000);
             println("200 " + conn.vhost + " [" + NNTP.class.getName() + "]");
+            String user = null;
+            String pass = null;
+            Account account = login.anonymous();
+            this.api = account == null ? null : new MailboxWrapper(account.getMailbox(NNTP.class));
             for(String line = conn.readln(); line != null; line = conn.readln()) try {
                 Log.warn("[nntp-read]", line);
                 StringTokenizer st = new StringTokenizer(line, " ");
                 String command = st.nextToken().toUpperCase();
+                if (command.equals("AUTHINFO")) {
+                    String uop = st.nextToken().toUpperCase();
+                    if (uop.equals("USER")) user = st.nextToken();
+                    else if (uop.equals("PASS")) pass = st.nextToken();
+                    // FIXME error here
+                }
+                if (this.api == null) {
+                    if (user == null) { println("480 Authentication required"); continue; }
+                    if (pass == null) { println("381 Password required"); continue; }
+                    account = login.login(user, pass);
+                    if (account == null) { println("502 Invalid"); continue; }
+                    this.api = new MailboxWrapper(account.getMailbox(NNTP.class));
+                    println("281 Good to go");
+                    continue;
+                }
                 if        (command.equals("ARTICLE"))   { article(st.hasMoreTokens() ? st.nextToken() : null, true,  true); 
                 } else if (command.equals("HEAD"))      { article(st.hasMoreTokens() ? st.nextToken() : null, true,  false); 
                 } else if (command.equals("MODE"))      { println("201 Hello, you can post.");