from django.db import models
+# Reason a message was hidden.
+# We're intentionally putting the prefix text in the array here, since
+# we might need that flexibility in the future.
+hide_reasons = [
+ None, # placeholder for 0
+ 'This message has been hidden because a virus was found in the message.', # 1
+ 'This message has been hidden because the message violated policies.', # 2
+ 'This message has been hidden because for privacy reasons.', # 3
+ ]
+
+
class Message(models.Model):
threadid = models.IntegerField(null=False, blank=False)
mailfrom = models.TextField(null=False, db_column='_from')
# rawtxt is a bytea field, which django doesn't support (easily)
parentid = models.IntegerField(null=False, blank=False)
has_attachment = models.BooleanField(null=False, default=False)
+ hiddenstatus = models.IntegerField(null=True)
# fti is a tsvector field, which django doesn't support (easily)
class Meta:
self._attachments = self.attachment_set.extra(select={'len': 'length(attachment)'}).all()
return self._attachments
+ @property
+ def hiddenreason(self):
+ if not self.hiddenstatus: return None
+ try:
+ return hide_reasons[self.hiddenstatus]
+ except:
+ # Weird value
+ return 'This message has been hidden.'
+
class ListGroup(models.Model):
groupid = models.IntegerField(null=False, primary_key=True)
groupname = models.CharField(max_length=200, null=False, blank=False)
user, pwd = base64.b64decode(auth[1]).split(':')
if user == 'archives' and pwd == 'antispam':
curs = connection.cursor()
- curs.execute("SELECT threadid, rawtxt FROM messages WHERE messageid=%(messageid)s", {
+ curs.execute("SELECT threadid, hiddenstatus, rawtxt FROM messages WHERE messageid=%(messageid)s", {
'messageid': msgid,
})
row = curs.fetchall()
if len(row) != 1:
raise Http404('Message does not exist')
- r = HttpResponse(row[0][1], content_type='text/plain')
+ if row[0][1]:
+ r = HttpResponse('This message has been hidden.', content_type='text/plain')
+ else:
+ r = HttpResponse(row[0][2], content_type='text/plain')
r['X-pgthread'] = ":%s:" % row[0][0]
return r
# Invalid password falls through
subject text NOT NULL,
date timestamptz NOT NULL,
has_attachment boolean NOT NULL,
+ hiddenstatus int NULL,
messageid text NOT NULL,
bodytxt text NOT NULL,
rawtxt bytea NOT NULL,
CREATE UNIQUE INDEX idx_messages_msgid ON messages(messageid);
CREATE INDEX idx_messages_date ON messages(date);
+CREATE TABLE message_hide_reasons (
+ message int NOT NULL PRIMARY KEY REFERENCES messages,
+ dt timestamptz,
+ reason text,
+ by text
+);
+
CREATE SEQUENCE threadid_seq;
CREATE TABLE unresolved_messages(