Implement MODE

This commit is contained in:
XANTRONIX Development 2024-11-26 10:44:21 -05:00
parent 2ffbdcb39a
commit 239ac5f8f0

View file

@ -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,