1.1 --- a/MoinMessageSupport.py Sun Jun 02 01:34:19 2013 +0200
1.2 +++ b/MoinMessageSupport.py Sun Jun 02 16:17:37 2013 +0200
1.3 @@ -9,9 +9,11 @@
1.4 from MoinMoin.Page import Page
1.5 from MoinMoin.log import getLogger
1.6 from MoinMoin.user import User
1.7 +from MoinMoin import wikiutil
1.8 from MoinSupport import ItemStore, getHeader, getMetadata, getWikiDict, writeHeaders
1.9 -from MoinMessage import GPG, MoinMessageError
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 @@ -204,7 +206,37 @@
1.17
1.18 "Handle the given message 'content'."
1.19
1.20 - pass
1.21 + request = self.request
1.22 +
1.23 + # Interpret the content as one or more updates.
1.24 +
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 the message as an object.
1.50 +
1.51 + self.handle_message_object(message)
1.52
1.53 def get_homedir(self):
1.54
2.1 --- a/actions/PostMessage.py Sun Jun 02 01:34:19 2013 +0200
2.2 +++ b/actions/PostMessage.py Sun Jun 02 16:17:37 2013 +0200
2.3 @@ -8,11 +8,9 @@
2.4
2.5 from MoinMoin.Page import Page
2.6 from MoinMoin.PageEditor import PageEditor
2.7 -from MoinMoin import wikiutil
2.8 from MoinSupport import getMetadata, writeHeaders
2.9 -from MoinMessage import Message, is_collection, to_replace, to_store
2.10 +from MoinMessage import is_collection, to_replace, to_store
2.11 from MoinMessageSupport import MoinMessageAction
2.12 -import time
2.13
2.14 Dependencies = ['pages']
2.15
2.16 @@ -20,38 +18,12 @@
2.17
2.18 "A posted message handler."
2.19
2.20 - def handle_message_content(self, content):
2.21 + def handle_message_object(self, message):
2.22
2.23 - "Handle the given message 'content'."
2.24 + "Handle the given 'message' object."
2.25
2.26 request = self.request
2.27
2.28 - # Interpret the content as one or more updates.
2.29 -
2.30 - message = Message()
2.31 - message.handle_message(content)
2.32 -
2.33 - # Test any date against the page or message store.
2.34 -
2.35 - if message.date:
2.36 - store_date = time.gmtime(self.store.mtime())
2.37 - page_date = time.gmtime(wikiutil.version2timestamp(self.page.mtime_usecs()))
2.38 - last_date = max(store_date, page_date)
2.39 -
2.40 - # Reject messages older than the page date.
2.41 -
2.42 - if message.date < last_date:
2.43 - writeHeaders(request, "text/plain", getMetadata(self.page), "403 Forbidden")
2.44 - request.write("The message is too old: %s versus %s." % (message.date, last_date))
2.45 - return
2.46 -
2.47 - # Reject messages without dates if so configured.
2.48 -
2.49 - elif getattr(request.cfg, "moinmessage_reject_messages_without_dates", True):
2.50 - writeHeaders(request, "text/plain", getMetadata(self.page), "403 Forbidden")
2.51 - request.write("The message has no date information.")
2.52 - return
2.53 -
2.54 # Handle each update.
2.55
2.56 for update in message.updates: