diff --git a/app/config.py b/app/config.py index 70fefdb9..a70eae08 100644 --- a/app/config.py +++ b/app/config.py @@ -414,3 +414,4 @@ PHONE_PROVIDER_2_HEADER = os.environ.get("PHONE_PROVIDER_2_HEADER") PHONE_PROVIDER_2_SECRET = os.environ.get("PHONE_PROVIDER_2_SECRET") ZENDESK_HOST = os.environ.get("ZENDESK_HOST") +ZENDESK_API_TOKEN = os.environ.get("ZENDESK_API_TOKEN") diff --git a/app/dashboard/views/support.py b/app/dashboard/views/support.py index 8bdf40e1..cb4fbd3a 100644 --- a/app/dashboard/views/support.py +++ b/app/dashboard/views/support.py @@ -11,7 +11,7 @@ from app.dashboard.base import dashboard_bp from app.extensions import limiter from app.log import LOG from app.models import Mailbox -from app.config import ZENDESK_HOST +from app.config import ZENDESK_HOST, ZENDESK_API_TOKEN VALID_MIME_TYPES = ["text/plain", "message/rfc822"] @@ -35,7 +35,9 @@ def check_zendesk_response_status(response_code: int) -> bool: return True -def upload_file_to_zendesk_and_get_upload_token(file: FileStorage) -> Union[None, str]: +def upload_file_to_zendesk_and_get_upload_token( + email: str, file: FileStorage +) -> Union[None, str]: if file.mimetype not in VALID_MIME_TYPES and not file.mimetype.startswith("image/"): flash( "File {} is not an image, text or an email".format(file.filename), "warning" @@ -44,7 +46,8 @@ def upload_file_to_zendesk_and_get_upload_token(file: FileStorage) -> Union[None escaped_filename = urllib.parse.urlencode({"filename": file.filename}) url = "https://{}/api/v2/uploads?{}".format(ZENDESK_HOST, escaped_filename) headers = {"content-type": file.mimetype} - response = requests.post(url, headers=headers, data=file.stream) + auth = ("{}/token".format(email), ZENDESK_API_TOKEN) + response = requests.post(url, headers=headers, data=file.stream, auth=auth) if not check_zendesk_response_status(response.status_code): return data = response.json() @@ -56,7 +59,7 @@ def create_zendesk_request(email: str, content: str, files: [FileStorage]) -> bo for file in files: if not file.filename: continue - token = upload_file_to_zendesk_and_get_upload_token(file) + token = upload_file_to_zendesk_and_get_upload_token(email, file) if token is None: return False tokens.append(token) @@ -72,7 +75,8 @@ def create_zendesk_request(email: str, content: str, files: [FileStorage]) -> bo } url = "https://{}/api/v2/requests.json".format(ZENDESK_HOST) headers = {"content-type": "application/json"} - response = requests.post(url, data=json.dumps(data), headers=headers) + auth = ("{}/token".format(email), ZENDESK_API_TOKEN) + response = requests.post(url, data=json.dumps(data), headers=headers, auth=auth) if not check_zendesk_response_status(response.status_code): return False LOG.debug("Ticket created")