summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/core
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2017-07-24 19:21:40 +0200
committerKali Kaneko <kali@leap.se>2017-08-24 17:15:20 -0400
commit3f620e20f0b18246a26aa8e0ec4c3719719700ce (patch)
tree27e64a1e7be68045eca497cab63397c419206b9c /src/leap/bitmask/core
parent00a9de84771b27e62515ce6d878d182c8f053de5 (diff)
[feat] add mail.add_msg API call
- Resolves: #8973
Diffstat (limited to 'src/leap/bitmask/core')
-rw-r--r--src/leap/bitmask/core/dispatcher.py12
-rw-r--r--src/leap/bitmask/core/mail_services.py17
2 files changed, 27 insertions, 2 deletions
diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py
index 1e364ec1..508a925d 100644
--- a/src/leap/bitmask/core/dispatcher.py
+++ b/src/leap/bitmask/core/dispatcher.py
@@ -282,6 +282,18 @@ class MailCmd(SubCommand):
d = mail.do_mixnet_status(userid, address)
return d
+ @register_method('dict')
+ def do_ADD_MSG(self, mail, *parts, **kw):
+ try:
+ userid = parts[2]
+ mailbox = parts[3]
+ msg = parts[4]
+ except IndexError:
+ raise DispatchError(
+ 'wrong number of arguments: expected 3, got none')
+ d = mail.do_add_msg(userid, msg, mailbox)
+ return d
+
class WebUICmd(SubCommand):
diff --git a/src/leap/bitmask/core/mail_services.py b/src/leap/bitmask/core/mail_services.py
index 043f8487..584aa8b6 100644
--- a/src/leap/bitmask/core/mail_services.py
+++ b/src/leap/bitmask/core/mail_services.py
@@ -614,6 +614,16 @@ class StandardMailService(service.MultiService, HookableService):
token = self._service_tokens.get(userid)
return {'user': userid, 'token': token}
+ def do_add_msg(self, userid, raw_msg, mailbox=None):
+ if not mailbox:
+ mailbox = INBOX_NAME
+
+ account = self._get_account(userid)
+ d = account.get_collection_by_mailbox(mailbox)
+ d.addCallback(lambda collection: collection.add_msg(raw_msg))
+ d.addCallback(lambda _: {'added': True})
+ return d
+
# access to containers
def get_soledad_session(self, userid):
@@ -642,13 +652,16 @@ class StandardMailService(service.MultiService, HookableService):
json.dump(token_dict, ftokens)
def _maybe_start_pixelated(self, passthrough, userid, soledad, keymanager):
- incoming = self.getServiceNamed('incoming_mail')
- account = incoming.getServiceNamed(userid).account
+ account = self._get_account(userid)
if HAS_MUA and pixelizer.HAS_PIXELATED:
pixelizer.start_pixelated_user_agent(
userid, soledad, keymanager, account)
return passthrough
+ def _get_account(self, userid):
+ incoming = self.getServiceNamed('incoming_mail')
+ return incoming.getServiceNamed(userid).account
+
class IMAPService(service.Service):