Initial implementation of POST command

This commit is contained in:
XANTRONIX Development 2024-11-30 17:11:27 -05:00
parent abac757be2
commit feb7fc7cce

View file

@ -701,6 +701,61 @@ class Session():
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE, text)
RE_NEWSGROUPS_SPLIT = re.compile(r'\s*,\s*')
def _save_message(self, message: Message):
value = message.header('Newsgroups')
if value is None or value == '':
return False
names = map(lambda s: s.lower(), value)
newsgroups = list()
for name in names:
if name not in self.server.newsgroups:
return False
newsgroups.append(self.server.newsgroups[name])
if len(newsgroups) == 0:
return False
for newsgroup in newsgroups:
sql = """
insert into newsgroup_message (
newsgroup_id, message_id
) values (?, ?)
"""
cr = self.db.execute(sql, (newsgroup.id, message.id))
return True
def _cmd_post(self):
self.respond(ResponseCode.NNTP_INQUIRY_ARTICLE)
message = Message()
while True:
line = self.readline()
if line == '':
self.active = False
break
elif line == '.':
if self._save_message(message):
return self.respond(ResponseCode.NNTP_ARTICLE_RECEIVED)
else:
return self.respond(ResponseCode.NNTP_POST_FAILED)
elif line == '..':
line = '.'
try:
message.readline(line)
except:
return self.respond(ResponseCode.NNTP_POST_FAILED)
def _cmd_date(self):
timestamp = datetime.datetime.now(datetime.UTC)
@ -731,6 +786,7 @@ class Session():
'OVER': _cmd_over,
'XOVER': _cmd_over,
'STAT': _cmd_stat,
'POST': _cmd_post,
'DATE': _cmd_date,
'QUIT': _cmd_quit,
}