diff --git a/lib/nntp/tiny/session.py b/lib/nntp/tiny/session.py index d82c137..e10be96 100644 --- a/lib/nntp/tiny/session.py +++ b/lib/nntp/tiny/session.py @@ -19,6 +19,9 @@ class SessionState(enum.Flag): AUTH_OK = enum.auto() AUTH_POST = enum.auto() +class SessionMode(enum.Enum): + READER = 1 + class MessagePart(enum.Enum): HEAD = 1 BODY = enum.auto() @@ -104,9 +107,10 @@ class Session(): def __init__(self, server: Server, sock: socket.socket): self.server: Server = server self.db: Database = server.db - self.state: SessionState = SessionState.ACTIVE self.sock: socket.socket = sock self.buf: LineBuffer = LineBuffer() + self.state: SessionState = SessionState.ACTIVE + self.mode: SessionMode = SessionMode.READER self.newsgroup: Optional[Newsgroup] = None self.article_id: Optional[int] = None @@ -139,6 +143,14 @@ class Session(): self.end() + def _cmd_mode(self, *args): + if len(args) != 1 or args[0] != 'READER': + return self.respond(ResponseCode.NNTP_SYNTAX_ERROR) + + self.mode = SessionMode.READER + + return self.respond(ResponseCode.NNTP_POST_PROHIBITED) + def _cmd_group(self, name: str): if name not in self.server.newsgroups: return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_FOUND) @@ -561,6 +573,7 @@ class Session(): COMMANDS = { 'CAPABILITIES': _cmd_capabilities, + 'MODE': _cmd_mode, 'GROUP': _cmd_group, 'LISTGROUP': _cmd_listgroup, 'LIST': _cmd_list,