diff options
author | Kali Kaneko <kali@leap.se> | 2013-05-21 05:53:07 +0900 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2013-05-21 05:53:07 +0900 |
commit | ffedb3b8e32c062604cc2f178213c82d90843788 (patch) | |
tree | 0bdc59d19c6fa59c0d2e456e594a29f9e7adf5e0 /src/leap/mail/imap/service | |
parent | 01a0bc796e0e12c0c4d9afd02a2c4e7ade166d11 (diff) |
use the same soledad instance
for incoming and mailbox
Diffstat (limited to 'src/leap/mail/imap/service')
-rw-r--r-- | src/leap/mail/imap/service/imap-server.tac | 79 |
1 files changed, 14 insertions, 65 deletions
diff --git a/src/leap/mail/imap/service/imap-server.tac b/src/leap/mail/imap/service/imap-server.tac index 362b536..1a4661b 100644 --- a/src/leap/mail/imap/service/imap-server.tac +++ b/src/leap/mail/imap/service/imap-server.tac @@ -1,7 +1,5 @@ import ConfigParser -import datetime import os -from functools import partial from xdg import BaseDirectory @@ -10,20 +8,21 @@ from twisted.internet.protocol import ServerFactory from twisted.mail import imap4 from twisted.python import log -from leap.common.check import leap_assert +from leap.common.check import leap_assert, leap_assert_type from leap.mail.imap.server import SoledadBackedAccount from leap.mail.imap.fetch import LeapIncomingMail from leap.soledad import Soledad -#from leap.soledad import SoledadCrypto # Some constants +# XXX Should be passed to initializer too. + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# The port in which imap service will run IMAP_PORT = 9930 +# The port in which imap service will run +INCOMING_CHECK_PERIOD = 10 # The period between succesive checks of the incoming mail # queue (in seconds) -INCOMING_CHECK_PERIOD = 10 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -35,8 +34,8 @@ class LeapIMAPServer(imap4.IMAP4Server): # pop extraneous arguments soledad = kwargs.pop('soledad', None) user = kwargs.pop('user', None) - gpg = kwargs.pop('gpg', None) leap_assert(soledad, "need a soledad instance") + leap_assert_type(soledad, Soledad) leap_assert(user, "need a user in the initialization") # initialize imap server! @@ -67,7 +66,7 @@ class LeapIMAPServer(imap4.IMAP4Server): class IMAPAuthRealm(object): """ - dummy authentication realm + Dummy authentication realm. Do not use in production! """ theAccount = None @@ -81,42 +80,25 @@ class LeapIMAPFactory(ServerFactory): capabilities. """ - def __init__(self, user, soledad, gpg=None): + def __init__(self, user, soledad): self._user = user self._soledad = soledad - self._gpg = gpg theAccount = SoledadBackedAccount( user, soledad=soledad) - - # --------------------------------- - # XXX pre-populate acct for tests!! - # populate_test_account(theAccount) - # --------------------------------- self.theAccount = theAccount def buildProtocol(self, addr): "Return a protocol suitable for the job." imapProtocol = LeapIMAPServer( user=self._user, - soledad=self._soledad, - gpg=self._gpg) + soledad=self._soledad) imapProtocol.theAccount = self.theAccount imapProtocol.factory = self return imapProtocol -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Let's rock... -# -# XXX initialize gpg - -#from leap.mail.imap.tests import PUBLIC_KEY -#from leap.mail.imap.tests import PRIVATE_KEY -#from leap.soledad.util import GPGWrapper - -def initialize_mailbox_soledad(user_uuid, soledad_pass, server_url, +def initialize_soledad_mailbox(user_uuid, soledad_pass, server_url, server_pemfile, token): """ Initializes soledad by hand @@ -129,7 +111,6 @@ def initialize_mailbox_soledad(user_uuid, soledad_pass, server_url, :rtype: Soledad instance """ - #XXX do we need a separate instance for the mailbox db? base_config = BaseDirectory.xdg_config_home secret_path = os.path.join( @@ -145,33 +126,9 @@ def initialize_mailbox_soledad(user_uuid, soledad_pass, server_url, server_url, server_pemfile, token) - #_soledad._init_dirs() - #_soledad._crypto = SoledadCrypto(_soledad) - #_soledad._shared_db = None - #_soledad._init_keys() - #_soledad._init_db() return _soledad -''' -mail_sample = open('rfc822.message').read() -def populate_test_account(acct): - """ - Populates inbox for testing purposes - """ - print "populating test account!" - inbox = acct.getMailbox('inbox') - inbox.addMessage(mail_sample, ("\\Foo", "\\Recent",), date="Right now2") -''' - - -def incoming_check(fetcher): - """ - Check incoming queue. To be called periodically. - """ - #log.msg("checking incoming queue...") - fetcher.fetch() - ####################################################################### # XXX STUBBED! We need to get this in the instantiation from the client @@ -188,13 +145,12 @@ d = {} for key in ('uid', 'passphrase', 'server', 'pemfile', 'token'): d[key] = config.get('mail', key) -soledad = initialize_mailbox_soledad( +soledad = initialize_soledad_mailbox( d['uid'], d['passphrase'], d['server'], d['pemfile'], d['token']) -gpg = None # import the private key ---- should sync it from remote! from leap.common.keymanager.openpgp import OpenPGPScheme @@ -204,10 +160,8 @@ opgp.put_ascii_key(privkey) from leap.common.keymanager import KeyManager keym = KeyManager(userID, nickserver_url, soledad, d['token']) -#import ipdb; ipdb.set_trace() - -factory = LeapIMAPFactory(userID, soledad, gpg) +factory = LeapIMAPFactory(userID, soledad) application = service.Application("LEAP IMAP4 Local Service") imapService = internet.TCPServer(IMAP_PORT, factory) @@ -215,15 +169,10 @@ imapService.setServiceParent(application) fetcher = LeapIncomingMail( keym, - d['uid'], - d['passphrase'], - d['server'], - d['pemfile'], - d['token'], + soledad, factory.theAccount) -incoming_check_for_acct = partial(incoming_check, fetcher) internet.TimerService( INCOMING_CHECK_PERIOD, - incoming_check_for_acct).setServiceParent(application) + fetcher.fetch).setServiceParent(application) |