diff options
author | Kali Kaneko <kali@leap.se> | 2016-05-03 12:18:25 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2016-05-03 12:59:23 -0400 |
commit | 54560623ac5c325bebbe627582b3895c3354368a (patch) | |
tree | 03e653f6853ec169ec676c5fe53fc565dda6098a | |
parent | 2a802378a6ffd1c1c677e4fa035ee3b8f932dfbe (diff) |
[feature] enable to download attachments from within webkit
- Resolves: #8069
- Releases: 0.9.2
-rw-r--r-- | src/leap/bitmask/gui/qt_browser.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/leap/bitmask/gui/qt_browser.py b/src/leap/bitmask/gui/qt_browser.py index c62e7770..2f7e6086 100644 --- a/src/leap/bitmask/gui/qt_browser.py +++ b/src/leap/bitmask/gui/qt_browser.py @@ -17,8 +17,10 @@ """ QtWebKit-based browser to display Pixelated User Agent """ +import os +import urlparse -from PySide import QtCore, QtWebKit, QtGui +from PySide import QtCore, QtWebKit, QtGui, QtNetwork PIXELATED_URI = 'http://localhost:9090' @@ -37,3 +39,29 @@ class PixelatedWindow(QtGui.QDialog): def load_app(self): self.view.load(QtCore.QUrl(PIXELATED_URI)) + self.view.page().setForwardUnsupportedContent(True) + self.view.page().unsupportedContent.connect(self.download) + + self.manager = QtNetwork.QNetworkAccessManager() + self.manager.finished.connect(self.finished) + + def download(self, reply): + self.request = QtNetwork.QNetworkRequest(reply.url()) + self.reply = self.manager.get(self.request) + + def finished(self): + url = self.reply.url().toString() + + filename = urlparse.parse_qs(url).get('filename', None) + if filename: + filename = filename[0] + name = filename or url + + path = os.path.expanduser(os.path.join( + '~', unicode(name).split('/')[-1])) + destination = QtGui.QFileDialog.getSaveFileName(self, "Save", path) + if destination: + filename = destination[0] + with open(filename, 'wb') as f: + f.write(str(self.reply.readAll())) + f.close() |