# HG changeset patch # User Paul Boddie # Date 1391194610 -3600 # Node ID 89736cca0a7ab448b5d7bbd3b32207e7c2e39d22 # Parent 925c386242f6050fb93f2c297e44df05bc710c2d Moved user switching into the action, avoiding interference with user/sender identification. diff -r 925c386242f6 -r 89736cca0a7a MoinMessageSupport.py --- a/MoinMessageSupport.py Fri Jan 31 19:00:21 2014 +0100 +++ b/MoinMessageSupport.py Fri Jan 31 19:56:50 2014 +0100 @@ -44,10 +44,31 @@ self.pagename = pagename self.request = request self.page = Page(request, pagename) + self.new_user = None def init_store(self): self.store = ItemStore(self.page, "messages", "message-locks") + def do_as_user(self, new_user, fn, args): + + "As 'new_user', perform 'fn' using the given 'args'." + + request = self.request + + # Switch to the relaying user if necessary. + + if new_user: + user = request.user + request.user = get_user(request, new_user) or user + + # Handle the content. + + try: + fn(*args) + finally: + if new_user: + request.user = user + def do_action(self): request = self.request content_length = getHeader(request, "Content-Length", "HTTP") @@ -114,21 +135,12 @@ # NOTE: An action should be able to process stored messages, # NOTE: by invoking code that is also used asynchronously. - # Switch to the relaying user if necessary. - - if new_user: - user = request.user - request.user = get_user(request, new_user) or user - request.user.auth_method = "pgp-overridden" + self.new_user = new_user # Handle the parsed message. - try: - self.init_store() - self.handle_message(message) - finally: - if new_user: - request.user = user + self.init_store() + self.handle_message(message) def handle_message(self, message): @@ -213,7 +225,7 @@ # Accept any message whose sender was authenticated by the PGP method. - if request.user and request.user.valid and request.user.auth_method in ("pgp", "pgp-overridden"): + if request.user and request.user.valid and request.user.auth_method == "pgp": # Handle the embedded message. diff -r 925c386242f6 -r 89736cca0a7a actions/PostMessage.py --- a/actions/PostMessage.py Fri Jan 31 19:00:21 2014 +0100 +++ b/actions/PostMessage.py Fri Jan 31 19:56:50 2014 +0100 @@ -20,6 +20,9 @@ "A posted message handler." def handle_message_object(self, message): + self.do_as_user(self.new_user, self._handle_message_object, [message]) + + def _handle_message_object(self, message): "Handle the given 'message' object."