summaryrefslogtreecommitdiff
path: root/src/leap/mail/imap/service/imap-server.tac
diff options
context:
space:
mode:
authorKali Kaneko <kali@leap.se>2013-05-22 03:31:59 +0900
committerKali Kaneko <kali@leap.se>2013-05-23 05:15:05 +0900
commitefed933415a2f6dead78dd6deca0f2383c889f3f (patch)
tree6569fff23c2c553b55f624e9db1744b6cf943330 /src/leap/mail/imap/service/imap-server.tac
parente5fa0790f5231c333aba4bc5f6766556e062aa6c (diff)
provide a initialization entrypoint for client use
Diffstat (limited to 'src/leap/mail/imap/service/imap-server.tac')
-rw-r--r--src/leap/mail/imap/service/imap-server.tac132
1 files changed, 12 insertions, 120 deletions
diff --git a/src/leap/mail/imap/service/imap-server.tac b/src/leap/mail/imap/service/imap-server.tac
index 1a4661b..16d04bb 100644
--- a/src/leap/mail/imap/service/imap-server.tac
+++ b/src/leap/mail/imap/service/imap-server.tac
@@ -3,99 +3,21 @@ import os
from xdg import BaseDirectory
-from twisted.application import internet, service
-from twisted.internet.protocol import ServerFactory
-from twisted.mail import imap4
-from twisted.python import log
-
-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.mail.imap.service import imap
-# Some constants
-# XXX Should be passed to initializer too.
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-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)
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-class LeapIMAPServer(imap4.IMAP4Server):
- """
- An IMAP4 Server with mailboxes backed by soledad
- """
- def __init__(self, *args, **kwargs):
- # pop extraneous arguments
- soledad = kwargs.pop('soledad', None)
- user = kwargs.pop('user', 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!
- imap4.IMAP4Server.__init__(self, *args, **kwargs)
-
- # we should initialize the account here,
- # but we move it to the factory so we can
- # populate the test account properly (and only once
- # per session)
-
- # theAccount = SoledadBackedAccount(
- # user, soledad=soledad)
-
- # ---------------------------------
- # XXX pre-populate acct for tests!!
- # populate_test_account(theAccount)
- # ---------------------------------
- #self.theAccount = theAccount
-
- def lineReceived(self, line):
- log.msg('rcv: %s' % line)
- imap4.IMAP4Server.lineReceived(self, line)
-
- def authenticateLogin(self, username, password):
- # all is allowed so far. use realm instead
- return imap4.IAccount, self.theAccount, lambda: None
-
-
-class IMAPAuthRealm(object):
- """
- Dummy authentication realm. Do not use in production!
- """
- theAccount = None
-
- def requestAvatar(self, avatarId, mind, *interfaces):
- return imap4.IAccount, self.theAccount, lambda: None
-
-
-class LeapIMAPFactory(ServerFactory):
- """
- Factory for a IMAP4 server with soledad remote sync and gpg-decryption
- capabilities.
- """
+config = ConfigParser.ConfigParser()
+config.read([os.path.expanduser('~/.config/leap/mail/mail.conf')])
- def __init__(self, user, soledad):
- self._user = user
- self._soledad = soledad
+userID = config.get('mail', 'address')
+privkey = open(os.path.expanduser('~/.config/leap/mail/privkey')).read()
+nickserver_url = ""
- theAccount = SoledadBackedAccount(
- user, soledad=soledad)
- self.theAccount = theAccount
+d = {}
- def buildProtocol(self, addr):
- "Return a protocol suitable for the job."
- imapProtocol = LeapIMAPServer(
- user=self._user,
- soledad=self._soledad)
- imapProtocol.theAccount = self.theAccount
- imapProtocol.factory = self
- return imapProtocol
+for key in ('uid', 'passphrase', 'server', 'pemfile', 'token'):
+ d[key] = config.get('mail', key)
def initialize_soledad_mailbox(user_uuid, soledad_pass, server_url,
@@ -113,6 +35,7 @@ def initialize_soledad_mailbox(user_uuid, soledad_pass, server_url,
"""
base_config = BaseDirectory.xdg_config_home
+
secret_path = os.path.join(
base_config, "leap", "soledad", "%s.secret" % user_uuid)
soledad_path = os.path.join(
@@ -129,22 +52,6 @@ def initialize_soledad_mailbox(user_uuid, soledad_pass, server_url,
return _soledad
-
-#######################################################################
-# XXX STUBBED! We need to get this in the instantiation from the client
-
-config = ConfigParser.ConfigParser()
-config.read([os.path.expanduser('~/.config/leap/mail/mail.conf')])
-
-userID = config.get('mail', 'address')
-privkey = open(os.path.expanduser('~/.config/leap/mail/privkey')).read()
-nickserver_url = ""
-
-d = {}
-
-for key in ('uid', 'passphrase', 'server', 'pemfile', 'token'):
- d[key] = config.get('mail', key)
-
soledad = initialize_soledad_mailbox(
d['uid'],
d['passphrase'],
@@ -158,21 +65,6 @@ opgp = OpenPGPScheme(soledad)
opgp.put_ascii_key(privkey)
from leap.common.keymanager import KeyManager
-keym = KeyManager(userID, nickserver_url, soledad, d['token'])
-
-
-factory = LeapIMAPFactory(userID, soledad)
-
-application = service.Application("LEAP IMAP4 Local Service")
-imapService = internet.TCPServer(IMAP_PORT, factory)
-imapService.setServiceParent(application)
-
-fetcher = LeapIncomingMail(
- keym,
- soledad,
- factory.theAccount)
-
+keymanager = KeyManager(userID, nickserver_url, soledad, d['token'])
-internet.TimerService(
- INCOMING_CHECK_PERIOD,
- fetcher.fetch).setServiceParent(application)
+imap.run_service(soledad, keymanager)