Example #1
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id='ggg'):
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 C.username,
                 C.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', D.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.post_username
             FROM
                 %sposts A, 
                 %sposts_text B
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             LEFT JOIN
                 %stopics D
             ON
                 A.topic_id = D.topic_id
             WHERE
                 A.forum_id=%s AND
                 %s REGEXP '%s' AND
                 A.post_id = B.post_id AND
                 A.post_id >= %s""" % (prefix, prefix, prefix, prefix, forum_id, header, strutil.format_wildcards(pattern), start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.post_id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4]))
         elif header.upper() == 'FROM':
             # XXX: totally broken with empty values for the email address
             hdrs.append('%s %s <%s>' % (row[0], row[2], row[3]))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #2
0
 def get_HEAD(self, group_name, id):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 parent
             FROM
                 %s
             WHERE
                 approved='Y' AND
                 id=%s""" % (table_name, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     if len(result[2]) == 0:
         author = result[1].strip()
     else:
         author = "%s <%s>" % (result[1].strip(), result[2].strip())
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3].strip()))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
     if result[5] != 0:
         headers.append("References: <%s@%s>" % (result[5], group_name))
     return "\r\n".join(headers)
Example #3
0
 def get_HEAD(self, group_name, id):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 author,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 parent
             FROM
                 %s
             WHERE
                 id=%s""" % (table_name, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (result[1]))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (strutil.get_formatted_time(time.localtime(result[3]))))
     headers.append("Subject: %s" % (result[2]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
     if result[4] != 0:
         headers.append("References: <%s@%s>" % (result[4], group_name))
     return "\r\n".join(headers)
Example #4
0
 def get_HEAD(self, group_name, id):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 C.username,
                 C.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', E.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 A.topic_id,
                 A.post_username,
                 MIN(D.post_id)
             FROM
                 %sposts A,
                 %sposts_text B
             INNER JOIN
                 %stopics E
             ON
                 A.topic_id = E.topic_id
             INNER JOIN
                 %sposts D
             ON
                 D.topic_id=A.topic_id
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             WHERE
                 A.forum_id=%s AND
                 A.post_id=B.post_id AND
                 A.post_id=%s
             GROUP BY
                 D.topic_id""" % (prefix, prefix, prefix, prefix, prefix,
                                  forum_id, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     # check if there is a registered user
     if len(result[6]) == 0 or result[6] == '':
         if len(result[2]) == 0:
             author = result[1]
         else:
             author = "%s <%s>" % (result[1], result[2])
     else:
         author = result[6]
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" %
                    (settings.nntp_hostname, group_name, result[0]))
     if result[7] != result[0]:
         headers.append("References: <%s@%s>" % (result[7], group_name))
     return "\r\n".join(headers)
Example #5
0
 def get_ARTICLE(self, group_name, id):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     nuke_prefix = settings.nuke_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 C.username,
                 C.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', E.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.topic_id,
                 A.post_username,
                 MIN(D.post_id)
             FROM
                 %sposts A,
                 %sposts_text B
             INNER JOIN
                 %sposts D
             ON
                 D.topic_id=A.topic_id
             INNER JOIN
                 %stopics E
             ON
                 A.topic_id = E.topic_id
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             WHERE
                 A.forum_id=%s AND
                 A.post_id=B.post_id AND
                 A.post_id=%s
             GROUP BY
                 D.topic_id""" % (prefix, prefix, prefix, prefix, nuke_prefix, forum_id, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     # check if there is a registered user
     if result[7] == '':
         if len(result[2]) == 0:
             author = result[1]
         else:
             author = "%s <%s>" % (result[1], result[2])
     else:
         author = result[7]
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
     if result[8] != result[0]:
         headers.append("References: <%s@%s>" % (result[8], group_name))
     return ("\r\n".join(headers), strutil.format_body(result[5]))
 def get_XOVER(self, group_name, start_id, end_id="ggg"):
     self.update_newsgroup_meta()
     stmt = self.get_article_sql()
     stmt += " AND article_number >= %s" % (start_id,)
     if end_id != "ggg":
         stmt += " AND article_number <= %s" % (end_id,)
     self.cursor.execute(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         if html2text:
             body = html2text.html2text(row[6].encode("utf-8")).encode("utf-8")
         else:
             body = strutil.format_body(row[6].encode("utf-8"))
         if row[3] == "":
             author = row[2]
         else:
             author = "%s <%s>" % (row[2], row[3])
         formatted_time = strutil.get_formatted_time(time.localtime(row[5]))
         message_id = row[9]
         line_count = body.count("\n")
         xref = "Xref: %s %s:%s" % (settings.nntp_hostname, group_name, row[0])
         parent = []
         if row[7] != 0:
             parent.append(self.get_message_id(row[7], group_name, "posts"))
         if row[8] != 0:
             parent.append(self.get_message_id(row[8], group_name, "comments"))
         reference = ", ".join(parent)
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append(
             "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s"
             % (row[0], row[4], author, formatted_time, message_id, reference, len(body), line_count, xref)
         )
     return "\r\n".join(overviews)
Example #7
0
 def get_XHDR(self, group_name, header, style, range):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     nuke_prefix = settings.nuke_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 D.username,
                 D.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', C.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.post_username
             FROM
                 %sposts A,
                 %sposts_text B
             LEFT JOIN
                 %stopics C
             ON
                 A.topic_id = C.topic_id
             LEFT JOIN
                 %susers D
             ON
                 A.poster_id=D.user_id
             WHERE
                 A.forum_id=%s AND
                 A.post_id = B.post_id AND """ % (prefix, prefix, prefix, nuke_prefix, forum_id)
     if style == 'range':
         stmt = '%s A.post_id >= %s' % (stmt, range[0])
         if len(range) == 2:
             stmt = '%s AND A.post_id <= %s' % (stmt, range[1])
     else:
         stmt = '%s A.post_id = %s' % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4]))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s <%s>' % (row[0], row[2], row[3]))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #8
0
 def get_HEAD(self, group_name, id):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 C.username,
                 C.user_email,
                 CASE WHEN A.post_subject = '' THEN CONCAT('Re: ', E.topic_title) ELSE A.post_subject END,
                 A.post_time,
                 A.topic_id,
                 A.post_username,
                 MIN(D.post_id)
             FROM
                 %sposts A
             INNER JOIN
                 %stopics E
             ON
                 A.topic_id = E.topic_id
             INNER JOIN
                 %sposts D
             ON
                 D.topic_id=A.topic_id
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             WHERE
                 (A.forum_id=%s OR A.forum_id=0) AND
                 A.post_id=%s
             GROUP BY
                 D.topic_id""" % (prefix, prefix, prefix, prefix, forum_id, id)
     num_rows = self.query(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     # check if there is a registered user
     if len(result[6]) == 0 or result[6] == '':
         if len(result[2]) == 0:
             author = result[1]
         else:
             #author = "%s <%s>" % (result[1], result[2])
             author = result[1]
     else:
         author = result[6]
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
     # because topics are all related in forums we can only reference the first topic
     if result[7] != result[0]:
         headers.append("References: <%s@%s>" % (result[7], group_name))
         headers.append("In-Reply-To: <%s@%s>" % (result[7], group_name))
     return "\r\n".join(headers)
Example #9
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id='ggg'):
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 B.body
             FROM
                 %s A, 
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 %s LIKE '%s' AND
                 A.id = B.id AND
                 A.id >= %s""" % (table_name, table_name, header,
                                  strutil.format_wildcards_sql(pattern),
                                  start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4].strip()))
         elif header.upper() == 'FROM':
             # XXX: totally broken with empty values for the email address
             hdrs.append('%s %s <%s>' %
                         (row[0], row[2].strip(), row[3].strip()))
         elif header.upper() == 'DATE':
             hdrs.append(
                 '%s %s' %
                 (row[0],
                  strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append(
                 '%s %s %s:%s' %
                 (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #10
0
 def get_XOVER(self, group_name, start_id, end_id='ggg'):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     nuke_prefix = settings.nuke_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 C.username,
                 C.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', D.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.post_username
             FROM
                 %sposts A, 
                 %sposts_text B
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             LEFT JOIN
                 %stopics D
             ON
                 A.topic_id = D.topic_id
             WHERE
                 A.post_id=B.post_id AND
                 A.forum_id=%s AND
                 A.post_id >= %s""" % (prefix, prefix, nuke_prefix, prefix,
                                       forum_id, start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.post_id <= %s" % (stmt, end_id)
     self.cursor.execute(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         if row[7] == '':
             if row[3] == '':
                 author = row[2]
             else:
                 author = "%s <%s>" % (row[2], row[3])
         else:
             author = row[7]
         formatted_time = strutil.get_formatted_time(time.localtime(row[5]))
         message_id = "<%s@%s>" % (row[0], group_name)
         line_count = len(row[6].split('\n'))
         xref = 'Xref: %s %s:%s' % (settings.nntp_hostname, group_name,
                                    row[0])
         if row[1] != row[0]:
             reference = "<%s@%s>" % (row[1], group_name)
         else:
             reference = ""
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append(
             "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" %
             (row[0], row[4], author, formatted_time, message_id, reference,
              len(strutil.format_body(row[6])), line_count, xref))
     return "\r\n".join(overviews)
Example #11
0
 def get_XOVER(self, group_name, start_id, end_id='ggg'):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     #print "xover startid=%s endid=%s\r\n" % (start_id, end_id)
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 C.username,
                 C.user_email,
                 CASE WHEN A.post_subject = '' THEN CONCAT('Re: ', D.topic_title) ELSE A.post_subject END,
                 A.post_time,
                 A.post_text,
                 A.post_username,
                 E.MinPostID
             FROM
                 %sposts A
             LEFT JOIN
                 (select topic_id, MIN(post_id) as MinPostID from %sposts group by topic_id) E
             ON
                 E.topic_id=A.topic_id
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             LEFT JOIN
                 %stopics D
             ON
                 A.topic_id = D.topic_id
             WHERE
                 (A.forum_id=%s OR A.forum_id=0) AND
                 A.post_id >= %s""" % (prefix, prefix, prefix, prefix, forum_id, start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.post_id <= %s" % (stmt, end_id)
     self.query(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         if row[7] == '':
             if row[3] == '':
                 author = row[2]
             else:
                 #author = "%s <%s>" % (row[2], row[3])
                 author = row[2]
         else:
             author = row[7]
         formatted_time = strutil.get_formatted_time(time.localtime(row[5]))
         message_id = "<%s@%s>" % (row[0], group_name)
         line_count = len(row[6].split('\n'))
         xref = 'Xref: %s %s:%s' % (settings.nntp_hostname, group_name, row[0])
         if row[8] != row[0]:
             reference = "<%s@%s>" % (row[8], group_name)
         else:
             reference = ""
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (row[0], row[4], author, formatted_time, message_id, reference, len(strutil.format_body(row[6])), line_count, xref))
     return "\r\n".join(overviews)
 def get_XPAT(self, group_name, header, pattern, start_id, end_id="ggg"):
     return None  # TODO: really broken
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.ID,
                 post_parent,
                 display_name,
                 user_email,
                 post_title,
                 UNIX_TIMESTAMP(post_date_gmt) AS datestamp,
                 post_content
             FROM
                 %s A, 
                 wp_users
             WHERE
                 A.post_type='post' AND A.post_status='publish' AND
                 %s REGEXP '%s' AND
                 post_author = wp_users.ID AND
                 A.ID >= %s""" % (
         table_name,
         header,
         strutil.format_wildcards(pattern),
         start_id,
     )
     if end_id != "ggg":
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == "SUBJECT":
             hdrs.append("%s %s" % (row[0], row[4]))
         elif header.upper() == "FROM":
             # XXX: totally broken with empty values for the email address
             hdrs.append("%s %s <%s>" % (row[0], row[2], row[3]))
         elif header.upper() == "DATE":
             hdrs.append("%s %s" % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == "MESSAGE-ID":
             hdrs.append(row[0] + " " + self.get_message_id(row[0], group_name))
         elif (header.upper() == "REFERENCES") and (row[1] != 0):
             hdrs.append(row[0] + " " + self.message_id(row[1], group_name))
         elif header.upper() == "BYTES":
             hdrs.append("%s %s" % (row[0], len(row[6])))
         elif header.upper() == "LINES":
             hdrs.append("%s %s" % (row[0], len(row[6].split("\n"))))
         elif header.upper() == "XREF":
             hdrs.append("%s %s %s:%s" % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #13
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id="ggg"):
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 B.body
             FROM
                 %s A, 
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 %s REGEXP '%s' AND
                 A.id = B.id AND
                 A.id >= %s""" % (
         table_name,
         table_name,
         header,
         strutil.format_wildcards(pattern),
         start_id,
     )
     if end_id != "ggg":
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == "SUBJECT":
             hdrs.append("%s %s" % (row[0], row[4]))
         elif header.upper() == "FROM":
             # XXX: totally broken with empty values for the email address
             hdrs.append("%s %s <%s>" % (row[0], row[2], row[3]))
         elif header.upper() == "DATE":
             hdrs.append("%s %s" % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == "MESSAGE-ID":
             hdrs.append("%s <%s@%s>" % (row[0], row[0], group_name))
         elif (header.upper() == "REFERENCES") and (row[1] != 0):
             hdrs.append("%s <%s@%s>" % (row[0], row[1], group_name))
         elif header.upper() == "BYTES":
             hdrs.append("%s %s" % (row[0], len(row[6])))
         elif header.upper() == "LINES":
             hdrs.append("%s %s" % (row[0], len(row[6].split("\n"))))
         elif header.upper() == "XREF":
             hdrs.append("%s %s %s:%s" % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #14
0
 def get_XOVER(self, group_name, start_id, end_id="ggg"):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 B.body
             FROM
                 %s A, 
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id=B.id AND
                 A.id >= %s""" % (
         table_name,
         table_name,
         start_id,
     )
     if end_id != "ggg":
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     self.cursor.execute(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         if row[3] == "":
             author = row[2]
         else:
             author = "%s <%s>" % (row[2], row[3])
         formatted_time = strutil.get_formatted_time(time.localtime(row[5]))
         message_id = "<%s@%s>" % (row[0], group_name)
         line_count = len(row[6].split("\n"))
         xref = "Xref: %s %s:%s" % (settings.nntp_hostname, group_name, row[0])
         if row[1] != 0:
             reference = "<%s@%s>" % (row[1], group_name)
         else:
             reference = ""
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append(
             "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s"
             % (
                 row[0],
                 row[4],
                 author,
                 formatted_time,
                 message_id,
                 reference,
                 len(strutil.format_body(row[6])),
                 line_count,
                 xref,
             )
         )
     return "\r\n".join(overviews)
Example #15
0
 def get_XHDR(self, group_name, header, style, range):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 B.body
             FROM
                 %s A,
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id = B.id AND """ % (table_name, table_name)
     if style == 'range':
         stmt = '%s A.id >= %s' % (stmt, range[0])
         if len(range) == 2:
             stmt = '%s AND A.id <= %s' % (stmt, range[1])
     else:
         stmt = '%s A.id = %s' % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4].strip()))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s <%s>' %
                         (row[0], row[2].strip(), row[3].strip()))
         elif header.upper() == 'DATE':
             hdrs.append(
                 '%s %s' %
                 (row[0],
                  strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append(
                 '%s %s %s:%s' %
                 (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #16
0
 def get_XHDR(self, group_name, header, style, range):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 B.body
             FROM
                 %s A,
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id = B.id AND """ % (
         table_name,
         table_name,
     )
     if style == "range":
         stmt = "%s A.id >= %s" % (stmt, range[0])
         if len(range) == 2:
             stmt = "%s AND A.id <= %s" % (stmt, range[1])
     else:
         stmt = "%s A.id = %s" % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == "SUBJECT":
             hdrs.append("%s %s" % (row[0], row[4]))
         elif header.upper() == "FROM":
             hdrs.append("%s %s <%s>" % (row[0], row[2], row[3]))
         elif header.upper() == "DATE":
             hdrs.append("%s %s" % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == "MESSAGE-ID":
             hdrs.append("%s <%s@%s>" % (row[0], row[0], group_name))
         elif (header.upper() == "REFERENCES") and (row[1] != 0):
             hdrs.append("%s <%s@%s>" % (row[0], row[1], group_name))
         elif header.upper() == "BYTES":
             hdrs.append("%s %s" % (row[0], len(row[6])))
         elif header.upper() == "LINES":
             hdrs.append("%s %s" % (row[0], len(row[6].split("\n"))))
         elif header.upper() == "XREF":
             hdrs.append("%s %s %s:%s" % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #17
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id='ggg'):
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 B.body
             FROM
                 %s A, 
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 %s LIKE '%s' AND
                 A.id = B.id AND
                 A.id >= %s""" % (table_name, table_name, header, strutil.format_wildcards_sql(pattern), start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4].strip()))
         elif header.upper() == 'FROM':
             # XXX: totally broken with empty values for the email address
             hdrs.append('%s %s <%s>' % (row[0], row[2].strip(), row[3].strip()))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #18
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id='ggg'):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 parent,
                 author,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 bytes,
                 line_num
             FROM
                 %s
             WHERE
                 id >= %s AND""" % (table_name, header, strutil.format_wildcards(pattern), start_id)
     if header.upper() == 'SUBJECT':
         stmt = "%s AND subject REGEXP '%s'" % (stmt, strutil.format_wildcards(pattern))
     elif header.upper() == 'FROM':
         stmt = "%s AND (author REGEXP '%s' OR email REGEXP '%s')" % (stmt, strutil.format_wildcards(pattern), strutil.format_wildcards(pattern))
     elif header.upper() == 'DATE':
         stmt = "%s AND %s" % (stmt, pattern)
     if end_id != 'ggg':
         stmt = "%s AND id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[3]))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s' % (row[0], row[2]))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[4]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], row[5]))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], row[6]))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #19
0
 def get_XHDR(self, group_name, header, style, range):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 B.body
             FROM
                 %s A,
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id = B.id AND """ % (table_name, table_name)
     if style == 'range':
         stmt = '%s A.id >= %s' % (stmt, range[0])
         if len(range) == 2:
             stmt = '%s AND A.id <= %s' % (stmt, range[1])
     else:
         stmt = '%s A.id = %s' % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4].strip()))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s <%s>' % (row[0], row[2].strip(), row[3].strip()))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #20
0
 def get_XHDR(self, group_name, header, style, range):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 parent,
                 author,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 bytes,
                 line_num
             FROM
                 %s
             WHERE
                 """ % (table_name)
     if style == 'range':
         stmt = '%s id >= %s' % (stmt, range[0])
         if len(range) == 2:
             stmt = '%s AND id <= %s' % (stmt, range[1])
     else:
         stmt = '%s id = %s' % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[3]))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s' % (row[0], row[2]))
         elif header.upper() == 'DATE':
             hdrs.append('%s %s' % (row[0], strutil.get_formatted_time(time.localtime(result[4]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], row[6]))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], row[7]))
         elif header.upper() == 'XREF':
             hdrs.append('%s %s %s:%s' % (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
 def get_ARTICLE(self, group_name, id, headers_only=False, body_only=False):
     stmt = self.get_article_sql()
     if str(id).count("<") > 0 or str(id).count("@") > 0:
         id = self.quote_string(id)
         stmt += " AND message_id='%s'" % (id,)
     else:
         id = int(id)
         stmt += " AND article_number=%s" % (id,)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     if not body_only:
         if len(result[3]) == 0:
             author = result[2]
         else:
             author = "%s <%s>" % (result[2], result[3])
         formatted_time = strutil.get_formatted_time(time.localtime(result[5]))
         headers = []
         headers.append("Path: %s" % (settings.nntp_hostname))
         headers.append("From: %s" % (author))
         headers.append("Newsgroups: %s" % (group_name))
         headers.append("Date: %s" % (formatted_time))
         headers.append("Subject: %s" % (result[4]))
         headers.append("Message-ID: %s" % (result[9]))
         headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
         parent = []
         if result[7] != 0:
             parent.append(self.get_message_id(result[7], group_name, "posts"))
         if result[8] != 0:
             parent.append(self.get_message_id(result[8], group_name, "comments"))
         if len(parent) > 0:
             headers.append("References: " + ", ".join(parent))
             headers.append("In-Reply-To: " + parent.pop())
         headers.append("Content-Type: text/plain; charset=utf-8")
     if headers_only:
         return "\r\n".join(headers)
     if html2text:
         body = html2text.html2text(
             result[6].encode("utf-8").replace("\r\n", "\n").replace("\r", "\n").replace("\n\n", "</p><p>")
         ).encode("utf-8")
     else:
         body = strutil.format_body(result[6].encode("utf-8"))
     if body_only:
         return body
     return ("\r\n".join(headers).encode("utf-8"), body)
Example #22
0
 def get_XOVER(self, group_name, start_id, end_id='ggg'):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 parent,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 B.body
             FROM
                 %s A, 
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id=B.id AND
                 A.id >= %s""" % (table_name, table_name, start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.id <= %s" % (stmt, end_id)
     self.cursor.execute(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         if row[3] == '':
             author = row[2].strip()
         else:
             author = "%s <%s>" % (row[2].strip(), row[3].strip())
         formatted_time = strutil.get_formatted_time(time.localtime(row[5]))
         message_id = "<%s@%s>" % (row[0], group_name)
         line_count = len(row[6].split('\n'))
         xref = 'Xref: %s %s:%s' % (settings.nntp_hostname, group_name,
                                    row[0])
         if row[1] != 0:
             reference = "<%s@%s>" % (row[1], group_name)
         else:
             reference = ""
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append(
             "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" %
             (row[0], row[4].strip(), author, formatted_time, message_id,
              reference, len(strutil.format_body(
                  row[6])), line_count, xref))
     return "\r\n".join(overviews)
Example #23
0
 def get_ARTICLE(self, group_name, id):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 author,
                 email,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 body,
                 parent
             FROM
                 %s A,
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id=B.id AND
                 A.id=%s""" % (
         table_name,
         table_name,
         id,
     )
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     if len(result[2]) == 0:
         author = result[1]
     else:
         author = "%s <%s>" % (result[1], result[2])
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" % (settings.nntp_hostname, group_name, result[0]))
     if result[6] != 0:
         headers.append("References: <%s@%s>" % (result[6], group_name))
     return ("\r\n".join(headers), strutil.format_body(result[5]))
    def get_XHDR(self, group_name, header, style, range):
        self.update_newsgroup_meta()
        stmt = self.get_article_sql()

        if style == "range":
            stmt += " AND article_number >= %s" % (range[0],)
            if len(range) == 2:
                stmt += " AND article_number <= %s" % (range[1])
        else:
            stmt += " AND article_number = %s" % (range[0],)
        if self.cursor.execute(stmt) == 0:
            return None
        result = self.cursor.fetchall()
        hdrs = []
        for row in result:
            parent = []
            if row[7] != 0:
                parent.append(self.get_message_id(row[7], group_name, "posts"))
            if row[8] != 0:
                parent.append(self.get_message_id(row[8], group_name, "comments"))
            if header.upper() == "SUBJECT":
                hdrs.append("%s %s" % (row[0], row[4]))
            elif header.upper() == "FROM":
                hdrs.append("%s %s <%s>" % (row[0], row[2], row[3]))
            elif header.upper() == "DATE":
                hdrs.append("%s %s" % (row[0], strutil.get_formatted_time(time.localtime(result[5]))))
            elif header.upper() == "MESSAGE-ID":
                hdrs.append(row[0] + " " + row[9])
            elif (header.upper() == "REFERENCES") and len(parent) > 0:
                hdrs.append("%s %s" % (row[0], ", ".join(parent)))
            elif header.upper() == "BYTES":
                hdrs.append("%s %s" % (row[0], len(row[6])))
            elif header.upper() == "LINES":
                hdrs.append("%s %s" % (row[0], len(row[6].split("\n"))))
            elif header.upper() == "XREF":
                hdrs.append("%s %s %s:%s" % (row[0], settings.nntp_hostname, group_name, row[0]))
        if len(hdrs) == 0:
            return ""
        else:
            return "\r\n".join(hdrs)
Example #25
0
 def get_ARTICLE(self, group_name, id):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 A.id,
                 author,
                 email,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 body,
                 parent
             FROM
                 %s A,
                 %s_bodies B
             WHERE
                 A.approved='Y' AND
                 A.id=B.id AND
                 A.id=%s""" % (table_name, table_name, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     if len(result[2]) == 0:
         author = result[1]
     else:
         author = "%s <%s>" % (result[1], result[2])
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" %
                    (settings.nntp_hostname, group_name, result[0]))
     if result[6] != 0:
         headers.append("References: <%s@%s>" % (result[6], group_name))
     return ("\r\n".join(headers), strutil.format_body(result[5]))
Example #26
0
 def get_HEAD(self, group_name, id):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 author,
                 email,
                 subject,
                 DATE_PART('epoch', datestamp) AS datestamp,
                 parent
             FROM
                 %s
             WHERE
                 approved='Y' AND
                 id=%s""" % (table_name, id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     if len(result[2]) == 0:
         author = result[1].strip()
     else:
         author = "%s <%s>" % (result[1].strip(), result[2].strip())
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3].strip()))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" %
                    (settings.nntp_hostname, group_name, result[0]))
     if result[5] != 0:
         headers.append("References: <%s@%s>" % (result[5], group_name))
     return "\r\n".join(headers)
Example #27
0
 def get_XHDR(self, group_name, header, style, range):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     nuke_prefix = settings.nuke_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 D.username,
                 D.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', C.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.post_username
             FROM
                 %sposts A,
                 %sposts_text B
             LEFT JOIN
                 %stopics C
             ON
                 A.topic_id = C.topic_id
             LEFT JOIN
                 %susers D
             ON
                 A.poster_id=D.user_id
             WHERE
                 A.forum_id=%s AND
                 A.post_id = B.post_id AND """ % (prefix, prefix, prefix,
                                                  nuke_prefix, forum_id)
     if style == 'range':
         stmt = '%s A.post_id >= %s' % (stmt, range[0])
         if len(range) == 2:
             stmt = '%s AND A.post_id <= %s' % (stmt, range[1])
     else:
         stmt = '%s A.post_id = %s' % (stmt, range[0])
     if self.cursor.execute(stmt) == 0:
         return None
     result = self.cursor.fetchall()
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4]))
         elif header.upper() == 'FROM':
             hdrs.append('%s %s <%s>' % (row[0], row[2], row[3]))
         elif header.upper() == 'DATE':
             hdrs.append(
                 '%s %s' %
                 (row[0],
                  strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append(
                 '%s %s %s:%s' %
                 (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #28
0
 def get_XPAT(self, group_name, header, pattern, start_id, end_id='ggg'):
     # XXX: need to actually check for the header values being passed as
     # XXX: not all header names map to column names on the tables
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     nuke_prefix = settings.nuke_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 A.topic_id,
                 C.username,
                 C.user_email,
                 CASE WHEN B.post_subject = '' THEN CONCAT('Re: ', D.topic_title) ELSE B.post_subject END,
                 A.post_time,
                 B.post_text,
                 A.post_username
             FROM
                 %sposts A, 
                 %sposts_text B
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             LEFT JOIN
                 %stopics D
             ON
                 A.topic_id = D.topic_id
             WHERE
                 A.forum_id=%s AND
                 %s REGEXP '%s' AND
                 A.post_id = B.post_id AND
                 A.post_id >= %s""" % (
         prefix, prefix, nuke_prefix, prefix, forum_id, header,
         strutil.format_wildcards(pattern), start_id)
     if end_id != 'ggg':
         stmt = "%s AND A.post_id <= %s" % (stmt, end_id)
     num_rows = self.cursor.execute(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchall())
     hdrs = []
     for row in result:
         if header.upper() == 'SUBJECT':
             hdrs.append('%s %s' % (row[0], row[4]))
         elif header.upper() == 'FROM':
             # XXX: totally broken with empty values for the email address
             hdrs.append('%s %s <%s>' % (row[0], row[2], row[3]))
         elif header.upper() == 'DATE':
             hdrs.append(
                 '%s %s' %
                 (row[0],
                  strutil.get_formatted_time(time.localtime(result[5]))))
         elif header.upper() == 'MESSAGE-ID':
             hdrs.append('%s <%s@%s>' % (row[0], row[0], group_name))
         elif (header.upper() == 'REFERENCES') and (row[1] != 0):
             hdrs.append('%s <%s@%s>' % (row[0], row[1], group_name))
         elif header.upper() == 'BYTES':
             hdrs.append('%s %s' % (row[0], len(row[6])))
         elif header.upper() == 'LINES':
             hdrs.append('%s %s' % (row[0], len(row[6].split('\n'))))
         elif header.upper() == 'XREF':
             hdrs.append(
                 '%s %s %s:%s' %
                 (row[0], settings.nntp_hostname, group_name, row[0]))
     if len(hdrs) == 0:
         return ""
     else:
         return "\r\n".join(hdrs)
Example #29
0
 def get_XOVER(self, group_name, start_id, end_id='ggg'):
     table_name = self.get_table_name(group_name)
     stmt = """
             SELECT
                 id,
                 parent,
                 author,
                 subject,
                 UNIX_TIMESTAMP(datestamp) AS datestamp,
                 body,
                 line_num,
                 bytes
             FROM
                 %s
             WHERE
                 id >= %s""" % (table_name, start_id)
     if end_id != 'ggg':
         stmt = "%s AND id <= %s" % (stmt, end_id)
     self.cursor.execute(stmt)
     result = list(self.cursor.fetchall())
     overviews = []
     for row in result:
         message_id = "<%s@%s>" % (row[0], group_name)
         xref = 'Xref: %s %s:%s' % (settings.nntp_hostname, group_name, row[0])
         if row[1] != 0:
             reference = "<%s@%s>" % (row[1], group_name)
         else:
             reference = ""
         # message_number <tab> subject <tab> author <tab> date <tab> message_id <tab> reference <tab> bytes <tab> lines <tab> xref
         overviews.append("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (row[0], row[3], row[2], strutil.get_formatted_time(time.localtime(row[4])), message_id, reference, row[7], row[6], xref))
     return "\r\n".join(overviews)
Example #30
0
 def get_ARTICLE(self, group_name, id):
     forum_id = self.get_forum(group_name)
     prefix = settings.phpbb_table_prefix
     stmt = """
             SELECT
                 A.post_id,
                 C.username,
                 C.user_email,
                 CASE WHEN A.post_subject = '' THEN CONCAT('Re: ', E.topic_title) ELSE A.post_subject END,
                 A.post_time,
                 A.post_text,
                 A.topic_id,
                 A.post_username,
                 MIN(D.post_id),
                 A.poster_ip
             FROM
                 %sposts A
             INNER JOIN
                 %sposts D
             ON
                 D.topic_id=A.topic_id
             INNER JOIN
                 %stopics E
             ON
                 A.topic_id = E.topic_id
             LEFT JOIN
                 %susers C
             ON
                 A.poster_id=C.user_id
             WHERE
                 (A.forum_id=%s OR A.forum_id=0) AND
                 A.post_id=%s
             GROUP BY
                 D.topic_id""" % (prefix, prefix, prefix, prefix, forum_id,
                                  id)
     num_rows = self.query(stmt)
     if num_rows == 0:
         return None
     result = list(self.cursor.fetchone())
     # check if there is a registered user
     if result[7] == '':
         if len(result[2]) == 0:
             author = result[1]
         else:
             #author = "%s <%s>" % (result[1], result[2])
             author = result[1]
     else:
         author = result[7]
     formatted_time = strutil.get_formatted_time(time.localtime(result[4]))
     headers = []
     headers.append("Path: %s" % (settings.nntp_hostname))
     headers.append("From: %s" % (author))
     headers.append("Newsgroups: %s" % (group_name))
     headers.append("Date: %s" % (formatted_time))
     headers.append("Subject: %s" % (result[3]))
     headers.append("Message-ID: <%s@%s>" % (result[0], group_name))
     headers.append("Xref: %s %s:%s" %
                    (settings.nntp_hostname, group_name, result[0]))
     if result[9].strip() != '':
         headers.append("NNTP-Posting-Host: %s" % (result[9].strip()))
     if result[8] != result[0]:
         headers.append("References: <%s@%s>" % (result[8], group_name))
         headers.append("In-Reply-To: <%s@%s>" % (result[8], group_name))
     return ("\r\n".join(headers), strutil.format_body(result[5]))