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