1.1 --- a/actions/PostMessage.py Sun Mar 10 01:19:48 2013 +0100
1.2 +++ b/actions/PostMessage.py Fri Apr 19 15:15:40 2013 +0200
1.3 @@ -10,9 +10,11 @@
1.4 from MoinMoin.PageEditor import PageEditor
1.5 from MoinMoin.log import getLogger
1.6 from MoinMoin.user import User
1.7 -from MoinSupport import ItemStore
1.8 +from MoinMoin import wikiutil
1.9 +from MoinSupport import ItemStore, getHeader, getMetadata, getWikiDict, writeHeaders
1.10 from MoinMessage import GPG, Message, MoinMessageError
1.11 from email.parser import Parser
1.12 +import time
1.13
1.14 try:
1.15 from cStringIO import StringIO
1.16 @@ -35,6 +37,7 @@
1.17 self.pagename = pagename
1.18 self.request = request
1.19 self.page = Page(request, pagename)
1.20 + self.store = ItemStore(self.page, "messages", "message-locks")
1.21
1.22 def do_action(self):
1.23 request = self.request
1.24 @@ -211,6 +214,29 @@
1.25 message = Message()
1.26 message.handle_message(content)
1.27
1.28 + # Test any date against the page or message store.
1.29 +
1.30 + if message.date:
1.31 + store_date = time.gmtime(self.store.mtime())
1.32 + page_date = time.gmtime(wikiutil.version2timestamp(self.page.mtime_usecs()))
1.33 + last_date = max(store_date, page_date)
1.34 +
1.35 + # Reject messages older than the page date.
1.36 +
1.37 + if message.date < last_date:
1.38 + writeHeaders(request, "text/plain", getMetadata(self.page), "403 Forbidden")
1.39 + request.write("The message is too old: %s versus %s." % (message.date, last_date))
1.40 + return
1.41 +
1.42 + # Reject messages without dates if so configured.
1.43 +
1.44 + elif getattr(request.cfg, "moinmessage_reject_messages_without_dates", True):
1.45 + writeHeaders(request, "text/plain", getMetadata(self.page), "403 Forbidden")
1.46 + request.write("The message has no date information.")
1.47 + return
1.48 +
1.49 + # Handle each update.
1.50 +
1.51 for update in message.updates:
1.52
1.53 # Handle a single part.
1.54 @@ -240,8 +266,7 @@
1.55 # Update a message store for the page.
1.56
1.57 if to_store(update):
1.58 - store = ItemStore(self.page, "messages", "message-locks")
1.59 - store.append(update.as_string())
1.60 + self.store.append(update.as_string())
1.61
1.62 # Update the page.
1.63