summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/adapter/model/mail.py18
-rw-r--r--service/pixelated/bitmask_libraries/session.py27
-rw-r--r--service/pixelated/bitmask_libraries/soledad.py14
-rw-r--r--service/pixelated/config/leap.py9
-rw-r--r--service/pixelated/maintenance.py8
-rw-r--r--service/pixelated/resources/mails_resource.py4
-rw-r--r--service/pixelated/support/encrypted_file_storage.py2
-rw-r--r--service/setup.py6
-rw-r--r--service/test/unit/adapter/test_mail.py2
-rw-r--r--service/test/unit/bitmask_libraries/test_session.py2
-rw-r--r--service/test/unit/maintenance/test_commands.py10
11 files changed, 41 insertions, 61 deletions
diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py
index 464e0343..084b41ed 100644
--- a/service/pixelated/adapter/model/mail.py
+++ b/service/pixelated/adapter/model/mail.py
@@ -24,7 +24,7 @@ from email.mime.text import MIMEText
from email.header import decode_header
from email.MIMEMultipart import MIMEMultipart
from pycryptopp.hash import sha256
-from leap.mail.imap.fields import fields
+from leap.mail.adaptors import soledad_indexes as fields
import leap.mail.walk as walk
from pixelated.adapter.model.status import Status
from pixelated.support import date
@@ -128,14 +128,14 @@ class InputMail(Mail):
return self._fd
fd = {}
- fd[fields.MBOX_KEY] = mailbox
- fd[fields.UID_KEY] = next_uid
- fd[fields.CONTENT_HASH_KEY] = self._get_chash()
- fd[fields.SIZE_KEY] = len(self.raw)
- fd[fields.MULTIPART_KEY] = True
- fd[fields.RECENT_KEY] = True
- fd[fields.TYPE_KEY] = fields.TYPE_FLAGS_VAL
- fd[fields.FLAGS_KEY] = Status.to_flags(self._status)
+ fd[fields.MBOX] = mailbox
+ fd[fields.MBOX_UUID] = next_uid
+ fd[fields.CONTENT_HASH] = self._get_chash()
+ # fd[fields.SIZE_KEY] = len(self.raw)
+ # fd[fields.MULTIPART_KEY] = True
+ fd[fields.RECENT] = True
+ fd[fields.TYPE] = fields.TYPE_FLAGS_VAL
+ fd[fields.FLAGS] = Status.to_flags(self._status)
self._fd = fd
return fd
diff --git a/service/pixelated/bitmask_libraries/session.py b/service/pixelated/bitmask_libraries/session.py
index a9cb15f2..19ded34c 100644
--- a/service/pixelated/bitmask_libraries/session.py
+++ b/service/pixelated/bitmask_libraries/session.py
@@ -18,10 +18,7 @@ import traceback
import sys
import os
-from leap.mail.imap.fetch import LeapIncomingMail
-from leap.mail.imap.account import SoledadBackedAccount
-from leap.mail.imap.memorystore import MemoryStore
-from leap.mail.imap.soledadstore import SoledadStore
+from leap.mail.incoming.service import IncomingMail
from twisted.internet import reactor
from .nicknym import NickNym
from leap.auth import SRPAuth
@@ -51,19 +48,16 @@ class LeapSession(object):
- ``nicknym`` the nicknym instance. See https://leap.se/nicknym (NickNym)
- - ``account`` the actual leap mail account. Implements Twisted imap4.IAccount and imap4.INamespacePresenter (SoledadBackedAccount)
-
- ``incoming_mail_fetcher`` Background job for fetching incoming mails from LEAP server (LeapIncomingMail)
"""
- def __init__(self, provider, user_auth, soledad_session, nicknym, soledad_account, incoming_mail_fetcher, smtp):
+ def __init__(self, provider, user_auth, soledad_session, nicknym, incoming_mail_fetcher, smtp):
self.smtp = smtp
self.config = provider.config
self.provider = provider
self.user_auth = user_auth
self.soledad_session = soledad_session
self.nicknym = nicknym
- self.account = soledad_account
self.incoming_mail_fetcher = incoming_mail_fetcher
self.soledad_session.soledad.sync(defer_decryption=False)
self.nicknym.generate_openpgp_key()
@@ -119,12 +113,11 @@ class LeapSessionFactory(object):
soledad = SoledadSessionFactory.create(self._provider, auth.token, auth.uuid, password)
nicknym = self._create_nicknym(account_email, auth.token, auth.uuid, soledad)
- account = self._create_account(auth.uuid, soledad)
- incoming_mail_fetcher = self._create_incoming_mail_fetcher(nicknym, soledad, account, account_email)
+ incoming_mail_fetcher = self._create_incoming_mail_fetcher(nicknym, soledad, account_email)
smtp = LeapSmtp(self._provider, auth, nicknym.keymanager)
- return LeapSession(self._provider, auth, soledad, nicknym, account, incoming_mail_fetcher, smtp)
+ return LeapSession(self._provider, auth, soledad, nicknym, incoming_mail_fetcher, smtp)
def _lookup_session(self, key):
global SESSIONS
@@ -152,10 +145,8 @@ class LeapSessionFactory(object):
def _create_nicknym(self, email_address, token, uuid, soledad_session):
return NickNym(self._provider, self._config, soledad_session, email_address, token, uuid)
- def _create_account(self, uuid, soledad_session):
- memstore = MemoryStore(permanent_store=SoledadStore(soledad_session.soledad))
- return SoledadBackedAccount(uuid, soledad_session.soledad, memstore)
-
- def _create_incoming_mail_fetcher(self, nicknym, soledad_session, account, email_address):
- return LeapIncomingMail(nicknym.keymanager, soledad_session.soledad, account,
- self._config.fetch_interval_in_s, email_address)
+ def _create_incoming_mail_fetcher(self, nicknym, soledad_session, auth, username):
+ return IncomingMail(nicknym.keymanager,
+ soledad_session.soledad,
+ auth.uuid,
+ self._config.fetch_interval_in_s)
diff --git a/service/pixelated/bitmask_libraries/soledad.py b/service/pixelated/bitmask_libraries/soledad.py
index f0cd9f2f..e8e81ffa 100644
--- a/service/pixelated/bitmask_libraries/soledad.py
+++ b/service/pixelated/bitmask_libraries/soledad.py
@@ -17,7 +17,7 @@ import errno
import os
from leap.soledad.client import Soledad
-from leap.soledad.common.crypto import WrongMac, UnknownMacMethod
+from leap.soledad.common.crypto import WrongMacError, UnknownMacMethodError
from pixelated.bitmask_libraries.certs import LeapCertificate
SOLEDAD_TIMEOUT = 120
@@ -57,10 +57,16 @@ class SoledadSession(object):
secrets = self._secrets_path()
local_db = self._local_db_path()
- return Soledad(self.user_uuid, unicode(encryption_passphrase), secrets,
- local_db, server_url, LeapCertificate(self.provider).provider_api_cert, self.user_token, defer_encryption=False)
+ return Soledad(self.user_uuid,
+ unicode(encryption_passphrase),
+ secrets,
+ local_db, server_url,
+ LeapCertificate(self.provider).provider_api_cert,
+ shared_db=None,
+ auth_token=self.user_token,
+ defer_encryption=False)
- except (WrongMac, UnknownMacMethod), e:
+ except (WrongMacError, UnknownMacMethodError), e:
raise SoledadWrongPassphraseException(e)
def _leap_path(self):
diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py
index 52cd4c8f..c28c371b 100644
--- a/service/pixelated/config/leap.py
+++ b/service/pixelated/config/leap.py
@@ -14,7 +14,7 @@ def initialize_leap(leap_provider_cert,
organization_mode,
leap_home):
init_monkeypatches()
- events_server.ensure_server(random.randrange(8000, 11999))
+ events_server.ensure_server()
provider, username, password = credentials.read(organization_mode, credentials_file)
LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, leap_provider_cert_fingerprint)
@@ -27,11 +27,4 @@ def initialize_leap(leap_provider_cert,
def init_monkeypatches():
- import pixelated.extensions.protobuf_socket
- import pixelated.extensions.sqlcipher_wal
- import pixelated.extensions.esmtp_sender_factory
- import pixelated.extensions.incoming_decrypt_header
- import pixelated.extensions.soledad_sync_exception
- import pixelated.extensions.keymanager_fetch_key
import pixelated.extensions.requests_urllib3
- import pixelated.extensions.shared_db
diff --git a/service/pixelated/maintenance.py b/service/pixelated/maintenance.py
index 7170055c..69cd674b 100644
--- a/service/pixelated/maintenance.py
+++ b/service/pixelated/maintenance.py
@@ -20,7 +20,7 @@ from twisted.internet.threads import deferToThread
from pixelated.config.leap import initialize_leap
from pixelated.config import logger, arguments
-from leap.mail.imap.fields import WithMsgFields
+from leap.mail.constants import MessageFlags
import time
@@ -118,11 +118,11 @@ def add_mail_folder(account, maildir, folder_name, deferreds):
if is_keep_file(mail):
continue
- flags = (WithMsgFields.RECENT_FLAG,) if mail.get_subdir() == 'new' else ()
+ flags = (MessageFlags.RECENT_FLAG,) if mail.get_subdir() == 'new' else ()
if 'S' in mail.get_flags():
- flags = (WithMsgFields.SEEN_FLAG,) + flags
+ flags = (MessageFlags.SEEN_FLAG,) + flags
if 'R' in mail.get_flags():
- flags = (WithMsgFields.ANSWERED_FLAG,) + flags
+ flags = (MessageFlags.ANSWERED_FLAG,) + flags
deferreds.append(mbx.addMessage(mail.as_string(), flags=flags, notify_on_disk=False))
diff --git a/service/pixelated/resources/mails_resource.py b/service/pixelated/resources/mails_resource.py
index c4b578ba..cddaa0ec 100644
--- a/service/pixelated/resources/mails_resource.py
+++ b/service/pixelated/resources/mails_resource.py
@@ -6,7 +6,7 @@ from twisted.web.resource import Resource
from twisted.web import server
from leap.common.events import (
register,
- events_pb2 as proto
+ catalog as events
)
@@ -75,7 +75,7 @@ class MailsResource(Resource):
delivery_error_mail = InputMail.delivery_error_template(delivery_address=event.content)
self._mail_service.mailboxes.inbox.add(delivery_error_mail)
- register(signal=proto.SMTP_SEND_MESSAGE_ERROR, callback=on_error)
+ register(events.SMTP_SEND_MESSAGE_ERROR, callback=on_error)
def __init__(self, mail_service, draft_service):
Resource.__init__(self)
diff --git a/service/pixelated/support/encrypted_file_storage.py b/service/pixelated/support/encrypted_file_storage.py
index 67036054..3f3e47d6 100644
--- a/service/pixelated/support/encrypted_file_storage.py
+++ b/service/pixelated/support/encrypted_file_storage.py
@@ -23,7 +23,7 @@ from whoosh.filedb.filestore import FileStorage
from whoosh.filedb.structfile import StructFile, BufferFile
from leap.soledad.client.crypto import encrypt_sym
from leap.soledad.client.crypto import decrypt_sym
-from leap.soledad.client.crypto import EncryptionMethods
+from leap.soledad.common.crypto import EncryptionMethods
from whoosh.util import random_name
diff --git a/service/setup.py b/service/setup.py
index d0cb967f..184c3aa6 100644
--- a/service/setup.py
+++ b/service/setup.py
@@ -48,17 +48,11 @@ setup(name='pixelated-user-agent',
],
install_requires=[
'pyasn1==0.1.3',
- 'gnupg==1.2.5',
- 'Twisted==13.2.0',
'requests==2.0.0',
'srp==1.0.4',
'dirspec==4.2.0',
'u1db==13.09',
'leap.auth==0.1.2',
- 'leap.keymanager==0.3.8',
- 'leap.soledad.common==0.6.3',
- 'leap.soledad.client==0.6.3',
- 'leap.mail==0.3.9-1-gc1f9c92',
'whoosh==2.5.7'
],
entry_points={
diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py
index 1a9280ff..92b1e905 100644
--- a/service/test/unit/adapter/test_mail.py
+++ b/service/test/unit/adapter/test_mail.py
@@ -22,7 +22,7 @@ from mockito import mock, unstub, when
from test.support import test_helper
import dateutil.parser as dateparser
import base64
-from leap.mail.imap.fields import fields
+from leap.mail.adaptors import soledad_indexes as fields
from datetime import datetime
import os
import json
diff --git a/service/test/unit/bitmask_libraries/test_session.py b/service/test/unit/bitmask_libraries/test_session.py
index 0c662ecb..93f32445 100644
--- a/service/test/unit/bitmask_libraries/test_session.py
+++ b/service/test/unit/bitmask_libraries/test_session.py
@@ -61,7 +61,7 @@ class SessionTest(AbstractLeapTest):
self.soledad_session.sync.assert_called_once_with()
def _create_session(self):
- return LeapSession(self.provider, self.auth, self.soledad_session, self.nicknym, self.soledad_account,
+ return LeapSession(self.provider, self.auth, self.soledad_session, self.nicknym,
self.mail_fetcher_mock, self.smtp_mock)
diff --git a/service/test/unit/maintenance/test_commands.py b/service/test/unit/maintenance/test_commands.py
index f1bf6e45..7279f7a6 100644
--- a/service/test/unit/maintenance/test_commands.py
+++ b/service/test/unit/maintenance/test_commands.py
@@ -18,8 +18,7 @@ import email
from pixelated.maintenance import delete_all_mails, load_mails
from pixelated.bitmask_libraries.session import LeapSession
-from leap.mail.imap.account import SoledadBackedAccount
-from leap.mail.imap.fields import WithMsgFields
+from leap.mail.constants import MessageFlags
from leap.soledad.client import Soledad
from leap.soledad.common.document import SoledadDocument
from mock import MagicMock
@@ -32,10 +31,7 @@ class TestCommands(unittest.TestCase):
def setUp(self):
self.leap_session = MagicMock(spec=LeapSession)
self.soledad = MagicMock(spec=Soledad)
- self.account = MagicMock(spec=SoledadBackedAccount)
self.mailbox = MagicMock()
- self.leap_session.account = self.account
- self.account.getMailbox.return_value = self.mailbox
self.args = (self.leap_session, self.soledad)
@@ -92,8 +88,8 @@ class TestCommands(unittest.TestCase):
# then
def assert_mails_added(_):
self.assertTrue(self.mailbox.addMessage.called)
- self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000000')), flags=(WithMsgFields.RECENT_FLAG,), notify_on_disk=False)
- self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000001')), flags=(WithMsgFields.RECENT_FLAG,), notify_on_disk=False)
+ self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000000')), flags=(MessageFlags.RECENT_FLAG,), notify_on_disk=False)
+ self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000001')), flags=(MessageFlags.RECENT_FLAG,), notify_on_disk=False)
def error_callack(err):
print err