diff options
Diffstat (limited to 'service/pixelated/config')
-rw-r--r-- | service/pixelated/config/arguments.py | 1 | ||||
-rw-r--r-- | service/pixelated/config/leap.py | 60 | ||||
-rw-r--r-- | service/pixelated/config/logger.py | 3 | ||||
-rw-r--r-- | service/pixelated/config/services.py | 78 | ||||
-rw-r--r-- | service/pixelated/config/site.py | 15 |
5 files changed, 108 insertions, 49 deletions
diff --git a/service/pixelated/config/arguments.py b/service/pixelated/config/arguments.py index fa7fdae4..7a7abe49 100644 --- a/service/pixelated/config/arguments.py +++ b/service/pixelated/config/arguments.py @@ -43,6 +43,7 @@ def parse_maintenance_args(): subparsers.add_parser('dump-soledad', help='dump the soledad database') subparsers.add_parser('sync', help='sync the soledad database') + subparsers.add_parser('repair', help='repair database if possible') return parser.parse_args() diff --git a/service/pixelated/config/leap.py b/service/pixelated/config/leap.py index 52cd4c8f..0409e54f 100644 --- a/service/pixelated/config/leap.py +++ b/service/pixelated/config/leap.py @@ -1,37 +1,69 @@ from __future__ import absolute_import -import random +from leap.common.events import (server as events_server, + register, catalog as events) +from email import message_from_file from pixelated.config import credentials -from leap.common.events import server as events_server from pixelated.bitmask_libraries.config import LeapConfig from pixelated.bitmask_libraries.certs import LeapCertificate from pixelated.bitmask_libraries.provider import LeapProvider from pixelated.bitmask_libraries.session import LeapSessionFactory +from pixelated.adapter.model.mail import InputMail +from twisted.internet import defer +import os +import logging +fresh_account = False + + +@defer.inlineCallbacks def initialize_leap(leap_provider_cert, leap_provider_cert_fingerprint, credentials_file, organization_mode, - leap_home): + leap_home, + initial_sync=True): init_monkeypatches() - events_server.ensure_server(random.randrange(8000, 11999)) - provider, username, password = credentials.read(organization_mode, credentials_file) - LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, leap_provider_cert_fingerprint) + events_server.ensure_server() + register(events.KEYMANAGER_FINISHED_KEY_GENERATION, + set_fresh_account) + provider, username, password = credentials.read(organization_mode, + credentials_file) + LeapCertificate.set_cert_and_fingerprint(leap_provider_cert, + leap_provider_cert_fingerprint) config = LeapConfig(leap_home=leap_home, start_background_jobs=True) provider = LeapProvider(provider, config) LeapCertificate(provider).setup_ca_bundle() leap_session = LeapSessionFactory(provider).create(username, password) - return leap_session + if initial_sync: + leap_session = yield leap_session.initial_sync() + + global fresh_account + if fresh_account: + add_welcome_mail(leap_session.mail_store) + + defer.returnValue(leap_session) + + +def add_welcome_mail(mail_store): + current_path = os.path.dirname(os.path.abspath(__file__)) + with open(os.path.join(current_path, + '..', + 'assets', + 'welcome.mail')) as mail_template_file: + mail_template = message_from_file(mail_template_file) + + input_mail = InputMail.from_python_mail(mail_template) + logging.getLogger('pixelated.config.leap').info('Adding the welcome mail') + mail_store.add_mail('INBOX', input_mail.raw) 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 + + +def set_fresh_account(_, x): + global fresh_account + fresh_account = True diff --git a/service/pixelated/config/logger.py b/service/pixelated/config/logger.py index 52f3f3a5..5c711981 100644 --- a/service/pixelated/config/logger.py +++ b/service/pixelated/config/logger.py @@ -21,7 +21,7 @@ from twisted.python import log def init(debug=False): debug_enabled = debug or os.environ.get('DEBUG', False) - logging_level = logging.DEBUG if debug_enabled else logging.INFO + logging_level = logging.DEBUG if debug_enabled else logging.WARN log_format = "%(asctime)s [%(name)s] %(levelname)s %(message)s" date_format = '%Y-%m-%d %H:%M:%S' @@ -31,4 +31,5 @@ def init(debug=False): filemode='a') observer = log.PythonLoggingObserver() + logging.getLogger('gnupg').setLevel(logging.WARN) observer.start() diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index f1c7a540..41a357dc 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -1,65 +1,75 @@ +from pixelated.adapter.mailstore.searchable_mailstore import SearchableMailStore from pixelated.adapter.services.mail_service import MailService from pixelated.adapter.model.mail import InputMail from pixelated.adapter.services.mail_sender import MailSender -from pixelated.adapter.services.mailboxes import Mailboxes -from pixelated.adapter.soledad.soledad_querier import SoledadQuerier from pixelated.adapter.search import SearchEngine from pixelated.adapter.services.draft_service import DraftService -from pixelated.adapter.listeners.mailbox_indexer_listener import MailboxIndexerListener +from pixelated.adapter.listeners.mailbox_indexer_listener import listen_all_mailboxes +from twisted.internet import defer +from pixelated.adapter.search.index_storage_key import SearchIndexStorageKey +from pixelated.adapter.services.feedback_service import FeedbackService class Services(object): def __init__(self, leap_home, leap_session): + pass - soledad_querier = SoledadQuerier(soledad=leap_session.soledad_session.soledad) + @defer.inlineCallbacks + def setup(self, leap_home, leap_session): + InputMail.FROM_EMAIL_ADDRESS = leap_session.account_email() - self.search_engine = self.setup_search_engine( + search_index_storage_key = self.setup_search_index_storage_key(leap_session.soledad_session.soledad) + yield self.setup_search_engine( leap_home, - soledad_querier) + search_index_storage_key) - pixelated_mailboxes = Mailboxes( - leap_session.account, - soledad_querier, - self.search_engine) + self.wrap_mail_store_with_indexing_mail_store(leap_session) + + yield listen_all_mailboxes(leap_session.account, self.search_engine, leap_session.mail_store) self.mail_service = self.setup_mail_service( leap_session, - soledad_querier, - self.search_engine, - pixelated_mailboxes) + self.search_engine) - self.keymanager = self.setup_keymanager(leap_session) - self.draft_service = self.setup_draft_service(pixelated_mailboxes) + self.keymanager = leap_session.nicknym + self.draft_service = self.setup_draft_service(leap_session.mail_store) + self.feedback_service = self.setup_feedback_service(leap_session) - self.post_setup(soledad_querier, leap_session) + yield self.index_all_mails() - def post_setup(self, soledad_querier, leap_session): - self.search_engine.index_mails( - mails=self.mail_service.all_mails(), - callback=soledad_querier.mark_all_as_not_recent) - soledad_querier.remove_duplicates() - InputMail.FROM_EMAIL_ADDRESS = leap_session.account_email() + def wrap_mail_store_with_indexing_mail_store(self, leap_session): + leap_session.mail_store = SearchableMailStore(leap_session.mail_store, self.search_engine) - def setup_keymanager(self, leap_session): - return leap_session.nicknym.keymanager + @defer.inlineCallbacks + def index_all_mails(self): + all_mails = yield self.mail_service.all_mails() + self.search_engine.index_mails(all_mails) - def setup_search_engine(self, leap_home, soledad_querier): - key = soledad_querier.get_index_masterkey() + @defer.inlineCallbacks + def setup_search_engine(self, leap_home, search_index_storage_key): + key_unicode = yield search_index_storage_key.get_or_create_key() + key = str(key_unicode) + print 'The key len is: %s' % len(key) search_engine = SearchEngine(key, agent_home=leap_home) - MailboxIndexerListener.SEARCH_ENGINE = search_engine - return search_engine + self.search_engine = search_engine - def setup_mail_service(self, leap_session, soledad_querier, search_engine, pixelated_mailboxes): - pixelated_mailboxes.add_welcome_mail_for_fresh_user() + def setup_mail_service(self, leap_session, search_engine): + # if False: FIXME + # yield pixelated_mailboxes.add_welcome_mail_for_fresh_user() pixelated_mail_sender = MailSender( leap_session.account_email(), leap_session.smtp) return MailService( - pixelated_mailboxes, pixelated_mail_sender, - soledad_querier, + leap_session.mail_store, search_engine) - def setup_draft_service(self, pixelated_mailboxes): - return DraftService(pixelated_mailboxes) + def setup_draft_service(self, mail_store): + return DraftService(mail_store) + + def setup_search_index_storage_key(self, soledad): + return SearchIndexStorageKey(soledad) + + def setup_feedback_service(self, leap_session): + return FeedbackService(leap_session) diff --git a/service/pixelated/config/site.py b/service/pixelated/config/site.py new file mode 100644 index 00000000..bd149914 --- /dev/null +++ b/service/pixelated/config/site.py @@ -0,0 +1,15 @@ +from twisted.web.server import Site, Request + + +class AddCSPHeaderRequest(Request): + HEADER_VALUES = "default-src 'self'; style-src 'self' 'unsafe-inline'" + + def process(self): + self.setHeader("Content-Security-Policy", self.HEADER_VALUES) + self.setHeader("X-Content-Security-Policy", self.HEADER_VALUES) + self.setHeader("X-Webkit-CSP", self.HEADER_VALUES) + Request.process(self) + + +class PixelatedSite(Site): + requestFactory = AddCSPHeaderRequest |