Rush has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/236205

Change subject: phab: use permissions for files on bot upload
......................................................................

phab: use permissions for files on bot upload

When processing direct to task comment things for
in-house use case permission attachments as the bot.

Change-Id: If4c0f4fcb82f7a8a14e3308ccbe8ad62f5f0da8e
---
M modules/phabricator/files/phab_epipe.py
1 file changed, 42 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/05/236205/1

diff --git a/modules/phabricator/files/phab_epipe.py 
b/modules/phabricator/files/phab_epipe.py
index 1e0e23b..5a549fc 100644
--- a/modules/phabricator/files/phab_epipe.py
+++ b/modules/phabricator/files/phab_epipe.py
@@ -33,18 +33,20 @@
     <project_name> = <comma_separated_list_of_allowed_email_domains>
 
     [phab_bot]
+    # Notice attachments to direct tasks will be permissioned as the
+    # phab_bot user
     root_dir = <path_on_disk_to_phabricator
     username    = <phab_user>
     certificate = <phab_user_cert>
     host        = <phab_host>
 
 """
+import base64
 import os
 import re
-import sys
 import subprocess
+import sys
 import syslog
-import base64
 from email.parser import Parser
 from email.utils import parseaddr
 import ConfigParser
@@ -91,7 +93,8 @@
     parser = ConfigParser.SafeConfigParser()
     parser_mode = 'phab_bot'
     parser.read('/etc/phab_epipe.conf')
-    phab = Phabricator(username=parser.get(parser_mode, 'username'),
+    username = parser.get(parser_mode, 'username')
+    phab = Phabricator(username=username,
                        certificate=parser.get(parser_mode, 'certificate'),
                        host=parser.get(parser_mode, 'host'))
 
@@ -149,12 +152,21 @@
         :returns: json
         """
         block = "**`%s`** replied via email on `%s`\n\n" % (name, date)
-        block += "__Subject__: %s\n\n" % (subject)
-        block += '\n'.join(['> ' + s for s in body.splitlines()])
+        block += "`%s`\n\n" % (subject)
+
+        sane_body = []
+        for l in body.splitlines():
+            if l.strip() == '--':
+                sane_body.append('> ~~')
+            else:
+                sane_body.append('> %s' % (l.strip(),))
+
+        block += '\n'.join(sane_body)
+
         if uploads:
-            block += '\n\n\n--------------------------\n'
+            block += '\n\n--------------------------\n'
             for ref in uploads:
-                block += "\n    {%s}" % (ref,)
+                block += "\n{%s}" % (ref,)
         return external_user_comment(task, block)
 
     def mail2task(sender, src_addy, date, subject, body, project, security):
@@ -190,11 +202,18 @@
             name = addy.split('@')[0]
         return name, addy
 
-    def upload_file(name, data):
-        upload = phab.file.upload(name=name, data_base64=data)
+    def upload_file(name, data, policy):
+        """ upload a base64 image hash
+        :param name: str
+        :param data: base64 encoded str
+        :param policy: valid policy str
+        """
+        upload = phab.file.upload(name=name,
+                                  data_base64=data,
+                                  viewPolicy=policy)
         return phab.file.info(phid=upload.response).response
 
-    def extract_payload_and_upload(payload):
+    def extract_payload_and_upload(payload, policy='public'):
         """ extract content and upload from MIME object
         :param payload: MIME payload object
         :return: str of created phab oject
@@ -214,7 +233,7 @@
 
         if name:
             data = payload.get_payload()
-            upload = upload_file(name, data)
+            upload = upload_file(name, data, policy=policy)
             return upload['objectName']
 
     def phab_handoff(email):
@@ -225,6 +244,9 @@
 
     def extract_body_and_attached(msg):
         """ get body and payload objects
+
+        NOTE: there has to be a better way
+
         :param msg: email msg type
         :return: str and list
         """
@@ -309,9 +331,17 @@
     if dtask:
         log('found direct task: %s' % (dtask,))
         body, attached = extract_body_and_attached(msg)
+        userinfo = phab.user.query(usernames=[username])[0]
+
+        if 'phid' in userinfo and userinfo['phid'].startswith('PHID'):
+            policy = userinfo['phid']
+        else:
+            raise EmailParsingError('unknown user')
+
         uploads = []
         for payload in attached:
-            uploads.append(extract_payload_and_upload(payload))
+            uploads.append(extract_payload_and_upload(payload,
+                                                      policy=policy))
 
         # extra check for address validity for this process
         if src_address.count('@') > 1:

-- 
To view, visit https://gerrit.wikimedia.org/r/236205
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If4c0f4fcb82f7a8a14e3308ccbe8ad62f5f0da8e
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Rush <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to