Initial implementation of POST command
This commit is contained in:
parent
abac757be2
commit
feb7fc7cce
1 changed files with 56 additions and 0 deletions
|
@ -701,6 +701,61 @@ class Session():
|
||||||
|
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE, text)
|
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):
|
def _cmd_date(self):
|
||||||
timestamp = datetime.datetime.now(datetime.UTC)
|
timestamp = datetime.datetime.now(datetime.UTC)
|
||||||
|
|
||||||
|
@ -731,6 +786,7 @@ class Session():
|
||||||
'OVER': _cmd_over,
|
'OVER': _cmd_over,
|
||||||
'XOVER': _cmd_over,
|
'XOVER': _cmd_over,
|
||||||
'STAT': _cmd_stat,
|
'STAT': _cmd_stat,
|
||||||
|
'POST': _cmd_post,
|
||||||
'DATE': _cmd_date,
|
'DATE': _cmd_date,
|
||||||
'QUIT': _cmd_quit,
|
'QUIT': _cmd_quit,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue