From eebfd5ea79348b19fdd0c3010735580991c3cdd1 Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Mon, 12 Sep 2016 22:30:50 +0200 Subject: [feat] Write service tokens to a file for email clients to read. - Resolves: #8435 --- docs/next-changelog.rst | 3 ++- src/leap/bitmask/core/mail_services.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/next-changelog.rst b/docs/next-changelog.rst index a0f048b4..bac463b6 100644 --- a/docs/next-changelog.rst +++ b/docs/next-changelog.rst @@ -12,7 +12,8 @@ Features ~~~~~~~~ - `#7965 `_: Add basic keymanagement to the cli. - `#8265 `_: Add a REST API and bitmask.js library for it. -- `#8400 `_: Add manual provider registration. +- `#8400 `_: Add manual provider registration. +- `#8435 `_: Write service tokens to a file for email clients to read. - Use mail_auth token in the core instead of imap/smtp tokens. - `#1234 `_: Description of the new feature corresponding with issue #1234. diff --git a/src/leap/bitmask/core/mail_services.py b/src/leap/bitmask/core/mail_services.py index 79c1495e..ea53ee07 100644 --- a/src/leap/bitmask/core/mail_services.py +++ b/src/leap/bitmask/core/mail_services.py @@ -22,6 +22,8 @@ This should be moved to the different packages when it stabilizes. """ import json import os +import shutil +import tempfile from collections import defaultdict from collections import namedtuple @@ -440,9 +442,11 @@ class StandardMailService(service.MultiService, HookableService): def registerToken(token): self._service_tokens[userid] = token self._active_user = userid + return token d = soledad.get_or_create_service_token('mail_auth') d.addCallback(registerToken) + d.addCallback(self._write_tokens_file, userid) return d def stopInstance(self): @@ -485,6 +489,22 @@ class StandardMailService(service.MultiService, HookableService): def get_keymanager_session(self, userid): return self._keymanager_sessions.get(userid) + def _write_tokens_file(self, token, userid): + tokens_folder = os.path.join(tempfile.gettempdir(), "bitmask_tokens") + if os.path.exists(tokens_folder): + try: + shutil.rmtree(tokens_folder) + except OSError as e: + log.msg("Can't remove tokens folder %s: %s" + % (tokens_folder, e)) + return + os.mkdir(tokens_folder, 0700) + + tokens_path = os.path.join(tokens_folder, + "%s.json" % (userid,)) + with open(tokens_path, 'w') as ftokens: + json.dump(self._service_tokens, ftokens) + class IMAPService(service.Service): -- cgit v1.2.3