From 939fefc012213d3aa433caec47e2e0b19d64901e Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Wed, 30 Mar 2016 13:51:01 +0200 Subject: [feat] Write service tokens to a file The thunderbird plugin will read the tokens from there. - Related: #6041 --- changes/next-changelog.rst | 1 + src/leap/bitmask/backend/components.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/changes/next-changelog.rst b/changes/next-changelog.rst index b20efdc8..3240d2bb 100644 --- a/changes/next-changelog.rst +++ b/changes/next-changelog.rst @@ -13,6 +13,7 @@ Features - `#7552 `_: Improve UI message and add some margin above the msg box. - `#7656 `_: Adapt to multi-user aware events. - `#4469 `_: Display randomly generated service token on the Help Window. +- `#6041 `_: Write service tokens to a file to allow email clients to read them from there. - Use cred-based authentication on SMTP. - Experimental support for the Pixelated WebMail. diff --git a/src/leap/bitmask/backend/components.py b/src/leap/bitmask/backend/components.py index f9ad1480..bc34c84c 100644 --- a/src/leap/bitmask/backend/components.py +++ b/src/leap/bitmask/backend/components.py @@ -20,8 +20,11 @@ Backend components # TODO [ ] Get rid of all this deferToThread mess, or at least contain # all of it into its own threadpool. +import json import os +import shutil import socket +import tempfile import time from functools import partial @@ -789,6 +792,8 @@ class Soledad(object): download_if_needed=True) self._soledad_defer.addCallback(self._set_proxies_cb) self._soledad_defer.addCallback(self._set_service_tokens_cb) + self._soledad_defer.addCallback(self._write_tokens_file, + username, domain) else: if self._signaler is not None: self._signaler.signal(self._signaler.soledad_bootstrap_failed) @@ -811,6 +816,23 @@ class Soledad(object): d.addCallback(lambda _: result) return d + def _write_tokens_file(self, result, username, domain): + tokens_folder = os.path.join(tempfile.gettempdir(), "bitmask_tokens") + if os.path.exists(tokens_folder): + try: + shutil.rmtree(tokens_folder) + except OSError as e: + logger.error("Can't remove tokens folder %s: %s" + % (tokens_folder, e)) + return + os.mkdir(tokens_folder, 0700) + + tokens_path = os.path.join(tokens_folder, + "%s@%s.json" % (username, domain)) + with open(tokens_path, 'w') as ftokens: + json.dump(self._service_tokens, ftokens) + return result + def _set_proxies_cb(self, _): """ Update the soledad and keymanager proxies to reference the ones created -- cgit v1.2.3