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[] { }; }
}
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(); }
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.");