summaryrefslogtreecommitdiff
path: root/src/leap/mail/imap/service
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2013-05-21 05:53:07 +0900
committerKali Kaneko <kali@leap.se>2013-05-21 05:53:07 +0900
commitffedb3b8e32c062604cc2f178213c82d90843788 (patch)
tree0bdc59d19c6fa59c0d2e456e594a29f9e7adf5e0 /src/leap/mail/imap/service
parent01a0bc796e0e12c0c4d9afd02a2c4e7ade166d11 (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.tac79
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)