Implement HDR command

This commit is contained in:
XANTRONIX Development 2024-11-25 21:53:08 -05:00
parent 4eecca8630
commit 49968be522

View file

@ -471,6 +471,38 @@ class Session():
def _cmd_article(self, identifier: Optional[str]=None): def _cmd_article(self, identifier: Optional[str]=None):
return self._serve_message(MessagePart.WHOLE, identifier) return self._serve_message(MessagePart.WHOLE, identifier)
def _send_message_header(self, message: Message, name: str):
return self.print("%d %s" % (
message.id, message.headers.get(name, '')
))
def _cmd_hdr(self, name: str, msg: Optional[str]=None):
if self.newsgroup is None:
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
if msg is None:
if self.article_id is None:
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
message = self.db.get(Message, self.article_id)
self.respond(ResponseCode.NNTP_HEADERS_FOLLOW)
self._send_message_header(message, name)
else:
msgrange = MessageRange.parse(msg)
sql = f"select * from {Message.name} where "
sql += " newsgroup_id = ? and " + msgrange.where()
cr = self.db.query_sql(Message, sql, (self.newsgroup.id,))
self.respond(ResponseCode.NNTP_HEADERS_FOLLOW)
for message in cr.each():
self._send_message_header(message, name)
return self.end()
COMMANDS = { COMMANDS = {
'CAPABILITIES': _cmd_capabilities, 'CAPABILITIES': _cmd_capabilities,
'GROUP': _cmd_group, 'GROUP': _cmd_group,
@ -480,7 +512,8 @@ class Session():
'NEWGROUPS': _cmd_newgroups, 'NEWGROUPS': _cmd_newgroups,
'HEAD': _cmd_head, 'HEAD': _cmd_head,
'BODY': _cmd_body, 'BODY': _cmd_body,
'ARTICLE': _cmd_article 'ARTICLE': _cmd_article,
'HDR': _cmd_hdr,
} }
def handle(self): def handle(self):