diff --git a/Dockerfile b/Dockerfile index d73f5d7..3d8cb21 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,11 @@ RUN mkdir -p /var/lib/xenu-nntp RUN mkdir -p /var/opt/xenu-nntp/bin RUN mkdir -p /var/opt/xenu-nntp/lib/xenu_nntp +COPY requirements.txt /root + +RUN apk add libpq +RUN pip3 install -r /root/requirements.txt + COPY < 0] table = type(obj) sql = f"update {table.name} set " - sql += ", ".join([f"{k} = ?" for k in dirty]) - sql += f" where {table.key} = ?" + sql += ", ".join([f"{k} = %s" for k in dirty]) + sql += f" where {table.key} = %s" values = [getattr(obj, k) for k in dirty] values.append(getattr(obj, table.key)) @@ -139,7 +159,7 @@ class Database(): if len(values) > 0: sql += " where " - sql += " and ".join([f"{table.name}.{k} = ?" for k in values]) + sql += " and ".join([f"{table.name}.{k} = %s" for k in values]) if len(order_by) > 0: sql += " order by" @@ -169,7 +189,7 @@ class Database(): if len(values) > 0: sql += " where " - sql += " and ".join([f"{k} = ?" for k in values]) + sql += " and ".join([f"{k} = %s" for k in values]) row = self.db.execute(sql, list(values.values())).fetchone() diff --git a/lib/xenu_nntp/mbox.py b/lib/xenu_nntp/mbox.py index 94d85aa..ac81c83 100644 --- a/lib/xenu_nntp/mbox.py +++ b/lib/xenu_nntp/mbox.py @@ -75,6 +75,8 @@ class MBoxReader(): return ret + line = line.replace('\x00', '') + self.line += 1 self.buf.add(line) diff --git a/lib/xenu_nntp/message.py b/lib/xenu_nntp/message.py index 2e9bf51..7f4d07d 100644 --- a/lib/xenu_nntp/message.py +++ b/lib/xenu_nntp/message.py @@ -168,14 +168,14 @@ class Message(DatabaseTable): # Defer parsing the message content until a specific header not already # assigned to a dedcicated property, or the message body, is required. # - message.content = row['content'] + message.content = row.content - message.id = row['id'] - message.created_on = row['created_on'] - message.message_id = row['message_id'] - message.reference_ids = row['reference_ids'] - message.sender = row['sender'] - message.subject = row['subject'] + message.id = row.id + message.created_on = row.created_on + message.message_id = row.message_id + message.reference_ids = row.reference_ids + message.sender = row.sender + message.subject = row.subject return message diff --git a/lib/xenu_nntp/newsgroup.py b/lib/xenu_nntp/newsgroup.py index 09c9311..8804464 100644 --- a/lib/xenu_nntp/newsgroup.py +++ b/lib/xenu_nntp/newsgroup.py @@ -13,12 +13,12 @@ class Newsgroup(DatabaseTable): @staticmethod def __from_row__(row): newsgroup = Newsgroup() - newsgroup.id = row['id'] - newsgroup.created_on = datetime.datetime.fromisoformat(row['created_on']) - newsgroup.created_by = row['created_by'] - newsgroup.name = row['name'] - newsgroup.description = row['description'] - newsgroup.writable = row['writable'] + newsgroup.id = row.id + newsgroup.created_on = row.created_on + newsgroup.created_by = row.created_by + newsgroup.name = row.name + newsgroup.description = row.description + newsgroup.writable = row.writable return newsgroup diff --git a/lib/xenu_nntp/server.py b/lib/xenu_nntp/server.py index aa16ef4..6a45f10 100644 --- a/lib/xenu_nntp/server.py +++ b/lib/xenu_nntp/server.py @@ -21,7 +21,7 @@ class Server(): config.get('tls', 'key')) def connect_to_db(self): - return Database.connect(self.config.get('database', 'path')) + return Database.from_config(self.config) def listen(self, host: str, port: int, af: int): listener = socket.socket(af, socket.SOCK_STREAM) diff --git a/lib/xenu_nntp/session.py b/lib/xenu_nntp/session.py index d972113..2372c13 100644 --- a/lib/xenu_nntp/session.py +++ b/lib/xenu_nntp/session.py @@ -130,7 +130,7 @@ class Session(Connection): from newsgroup_message where - newsgroup_id = ? + newsgroup_id = %s """ cr = self.db.execute(sql, (newsgroup.id,)) @@ -169,8 +169,8 @@ class Session(Connection): from newsgroup_message where - newsgroup_id = ? - and message_id < ? + newsgroup_id = %s + and message_id < %s """ cr = self.db.execute(sql, (self.newsgroup.id, self.article_id)) @@ -196,8 +196,8 @@ class Session(Connection): from newsgroup_message where - message_id = ? - and id > ? + message_id = %s + and id > %s """ cr = self.db.execute(sql, (self.newsgroup.id, self.article_id)) @@ -221,13 +221,13 @@ class Session(Connection): message where message.id = newsgroup_message.message_id - and newsgroup_message.newsgroup_id = ? + and newsgroup_message.newsgroup_id = %s """ values = [newsgroup.id] if since is not None: - sql += " and message.created_on >= ?" + sql += " and message.created_on >= %s" values.append(since.isoformat()) cr = self.db.execute(sql, values) @@ -258,7 +258,7 @@ class Session(Connection): from newsgroup_message where - newsgroup_id = ? + newsgroup_id = %s """ if len(args) > 1: @@ -318,7 +318,7 @@ class Session(Connection): message where message.id = newsgroup_message.message_id - and newsgroup_message.newsgroup_id = ? + and newsgroup_message.newsgroup_id = %s """ cr = self.db.execute(sql, (newsgroup.id,)) @@ -471,8 +471,8 @@ class Session(Connection): message where message.id = newsgroup_message.message_id - and newsgroup_message.newsgroup_id = ? - and message.created_on >= ? + and newsgroup_message.newsgroup_id = %s + and message.created_on >= %s """ for newsgroup in self.each_newsgroup(): @@ -555,7 +555,7 @@ class Session(Connection): message where message.id = newsgroup_message.message_id - and newsgroup_message.newsgroup_id = ? + and newsgroup_message.newsgroup_id = %s """ sql += " and " + msgrange.where('newsgroup_message.message_id') @@ -726,7 +726,7 @@ class Session(Connection): sql = """ insert into newsgroup_message ( newsgroup_id, message_id - ) values (?, ?) + ) values (%s, %s) """ cr = self.db.execute(sql, (newsgroup.id, message.id)) @@ -746,7 +746,7 @@ class Session(Connection): from message where - message_id = ? + message_id = %s """ cr = self.db.execute(sql, (message_id,)) diff --git a/lib/xenu_nntp/user.py b/lib/xenu_nntp/user.py index efec938..3a7f59e 100644 --- a/lib/xenu_nntp/user.py +++ b/lib/xenu_nntp/user.py @@ -38,7 +38,7 @@ class User(DatabaseTable): server_user_permission user_perm where perm.id = user_perm.permission_id - and user_perm.user_id = ? + and user_perm.user_id = %s """ cr = db.execute(sql, (self.id,))