1.1 --- a/actions/PostMessage.py Sat Oct 20 19:27:25 2012 +0200
1.2 +++ b/actions/PostMessage.py Sun Oct 21 00:43:40 2012 +0200
1.3 @@ -8,6 +8,7 @@
1.4
1.5 from MoinMoin.PageEditor import PageEditor
1.6 from MoinMoin.log import getLogger
1.7 +from MoinMoin.user import User
1.8 from MoinSupport import *
1.9 from MoinMessage import GPG, MoinMessageError
1.10 from email.parser import Parser
1.11 @@ -156,16 +157,41 @@
1.12 # Verify the message.
1.13
1.14 try:
1.15 - gpg.verifyMessage(signature.get_payload(), content.as_string())
1.16 + fingerprint, identity = gpg.verifyMessage(signature.get_payload(), content.as_string())
1.17 +
1.18 + # Map the fingerprint to a Wiki user.
1.19 +
1.20 + old_user = None
1.21 + request = self.request
1.22
1.23 - # Log non-fatal errors.
1.24 + try:
1.25 + if fingerprint:
1.26 + gpg_users = getWikiDict(
1.27 + getattr(request.cfg, "moinmessage_gpg_users_page", "MoinMessageUserDict"),
1.28 + request
1.29 + )
1.30 +
1.31 + # With a user mapping and a fingerprint corresponding to a known
1.32 + # user, temporarily switch user in order to make the edit.
1.33
1.34 - if gpg.errors:
1.35 - getLogger(__name__).warning(gpg.errors)
1.36 + if gpg_users and gpg_users.has_key(fingerprint):
1.37 + old_user = request.user
1.38 + request.user = User(request, auth_method="gpg", auth_username=gpg_users[fingerprint])
1.39 +
1.40 + # Log non-fatal errors.
1.41 +
1.42 + if gpg.errors:
1.43 + getLogger(__name__).warning(gpg.errors)
1.44
1.45 - # Handle the embedded message.
1.46 + # Handle the embedded message.
1.47 +
1.48 + self.handle_message_content(content)
1.49
1.50 - self.handle_message_content(content)
1.51 + # Restore any user identity.
1.52 +
1.53 + finally:
1.54 + if old_user:
1.55 + request.user = old_user
1.56
1.57 # Otherwise, reject the unverified message.
1.58
1.59 @@ -232,11 +258,15 @@
1.60 page_editor = PageEditor(self.request, self.pagename)
1.61 page_editor.saveText("\n\n".join(body), 0)
1.62
1.63 + # Refresh the page.
1.64 +
1.65 + self.page = Page(self.request, self.pagename)
1.66 +
1.67 def get_homedir(self):
1.68
1.69 "Locate the GPG home directory."
1.70
1.71 - homedir = getattr(self.request.cfg, "postmessage_gpg_homedir")
1.72 + homedir = getattr(self.request.cfg, "moinmessage_gpg_homedir")
1.73 if not homedir:
1.74 writeHeaders(request, "text/plain", getMetadata(self.page), "415 Unsupported Media Type")
1.75 request.write("Encoded data cannot currently be understood. Please notify the site administrator.")