From aa88011679ae9267e108f46a789501ac4f050f61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= <philipp@hoerist.com> Date: Thu, 8 Sep 2016 00:09:16 +0200 Subject: [PATCH] Add encrypted file upload for windows --- httpupload/httpupload.py | 35 +++++++++++++++++++++-------------- httpupload/manifest.ini | 2 +- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/httpupload/httpupload.py b/httpupload/httpupload.py index ab9c7028..e845e3dc 100644 --- a/httpupload/httpupload.py +++ b/httpupload/httpupload.py @@ -35,9 +35,8 @@ try: except: pil_available = False from io import BytesIO -import base64 -import binascii +import binascii from common import gajim from common import ged import chat_control @@ -49,19 +48,21 @@ import nbxmpp log = logging.getLogger('gajim.plugin_system.httpupload') -if os.name != 'nt': - try: +try: + if os.name == 'nt': + from cryptography.hazmat.backends.openssl import backend + else: from cryptography.hazmat.backends import default_backend - from cryptography.hazmat.primitives.ciphers import Cipher - from cryptography.hazmat.primitives.ciphers import algorithms - from cryptography.hazmat.primitives.ciphers.modes import GCM - encryption_available = True - except Exception as e: - log.debug(e) - encryption_available = False -else: + from cryptography.hazmat.primitives.ciphers import Cipher + from cryptography.hazmat.primitives.ciphers import algorithms + from cryptography.hazmat.primitives.ciphers.modes import GCM + encryption_available = True +except Exception as e: + DEP_MSG = 'For encryption of files, ' \ + 'please install python-cryptography!' + log.debug('Cryptography Import Error: ' + str(e)) + log.info('Decryption/Encryption disabled due to errors') encryption_available = False - log.info('Cryptography not available on Windows for now') # XEP-0363 (http://xmpp.org/extensions/xep-0363.html) NS_HTTPUPLOAD = 'urn:xmpp:http:upload' @@ -78,6 +79,8 @@ class HttpuploadPlugin(GajimPlugin): @log_calls('HttpuploadPlugin') def init(self): + if not encryption_available: + self.available_text = DEP_MSG self.config_dialog = None # HttpuploadPluginConfigDialog(self) self.controls = [] self.events_handlers = {} @@ -571,10 +574,14 @@ class StreamFileWithProgress(file): self.encrypted_upload = encrypted_upload self.seek(0, os.SEEK_END) if self.encrypted_upload: + if os.name == 'nt': + self.backend = backend + else: + self.backend = default_backend() self.encryptor = Cipher( algorithms.AES(key), GCM(iv), - backend=default_backend()).encryptor() + backend=self.backend).encryptor() self._total = self.tell() + TAGSIZE else: self._total = self.tell() diff --git a/httpupload/manifest.ini b/httpupload/manifest.ini index 38c85f4f..8b93cb40 100644 --- a/httpupload/manifest.ini +++ b/httpupload/manifest.ini @@ -1,7 +1,7 @@ [info] name: HttpUpload short_name: httpupload -version: 0.4.0 +version: 0.4.1 description: This plugin is designed to send a file to a contact or muc by using httpupload.<br/> Your server must support <a href="http://xmpp.org/extensions/xep-0363.html">XEP-0363: HTTP Upload</a>.<br/> Conversations supported this.<br/> -- GitLab