diff options
-rw-r--r-- | src/leap/bitmask/mail/incoming/service.py | 86 |
1 files changed, 42 insertions, 44 deletions
diff --git a/src/leap/bitmask/mail/incoming/service.py b/src/leap/bitmask/mail/incoming/service.py index e2baadbe..9ed76a09 100644 --- a/src/leap/bitmask/mail/incoming/service.py +++ b/src/leap/bitmask/mail/incoming/service.py @@ -50,8 +50,6 @@ from leap.soledad.common.crypto import ENC_SCHEME_KEY, ENC_JSON_KEY from leap.soledad.common.errors import InvalidAuthTokenError -logger = Logger() - MULTIPART_ENCRYPTED = "multipart/encrypted" MULTIPART_SIGNED = "multipart/signed" PGP_BEGIN = "-----BEGIN PGP MESSAGE-----" @@ -103,6 +101,8 @@ class IncomingMail(Service): LEAP_ENCRYPTION_DECRYPTED = 'decrypted' + log = Logger() + def __init__(self, keymanager, soledad, inbox, userid, check_period=INCOMING_CHECK_PERIOD): @@ -164,7 +164,7 @@ class IncomingMail(Service): Calls a deferred that will execute the fetch callback. """ def _sync_errback(failure): - logger.error(failure) + self.log.failure('Error while fetching incoming mail') def syncSoledadCallback(_): # XXX this should be moved to adaptors @@ -174,7 +174,7 @@ class IncomingMail(Service): d.addErrback(_sync_errback) return d - logger.debug("fetching mail for: %s %s" % ( + self.log.debug("fetching mail for: %s %s" % ( self._soledad.uuid, self._userid)) d = self._sync_soledad() d.addCallbacks(syncSoledadCallback, self._errback) @@ -219,7 +219,7 @@ class IncomingMail(Service): # synchronize incoming mail def _errback(self, failure): - logger.error(failure) + self.log.failure('Error while processing incoming mail') def _sync_soledad(self): """ @@ -229,16 +229,16 @@ class IncomingMail(Service): :rtype: iterable or None """ def _log_synced(result): - logger.info('sync finished') + self.log.info('sync finished') return result def _handle_invalid_auth_token_error(failure): failure.trap(InvalidAuthTokenError) - logger.warn('sync failed because token is invalid: %r' % failure) + self.log.warn('sync failed because token is invalid: %r' % failure) self.stopService() emit_async(catalog.SOLEDAD_INVALID_AUTH_TOKEN, self._userid) - logger.info('starting sync...') + self.log.info('starting sync...') d = self._soledad.sync() d.addCallbacks(_log_synced, _handle_invalid_auth_token_error) return d @@ -256,7 +256,7 @@ class IncomingMail(Service): fetched_ts = time.mktime(time.gmtime()) num_mails = len(doclist) if doclist is not None else 0 if num_mails != 0: - logger.info("there are %s mails" % (num_mails,)) + self.log.info("there are %s mails" % (num_mails,)) emit_async(catalog.MAIL_FETCHED_INCOMING, self._userid, str(num_mails), str(fetched_ts)) return doclist @@ -271,15 +271,15 @@ class IncomingMail(Service): :type doclist: iterable. :returns: a list of deferreds for individual messages. """ - logger.info('processing incoming mail') + self.log.info('Processing incoming mail') if not doclist: - logger.debug("no incoming messages found") + self.log.debug("no incoming messages found") return num_mails = len(doclist) deferreds = [] for index, doc in enumerate(doclist): - logger.debug("processing incoming message: %d of %d" + self.log.debug("processing incoming message: %d of %d" % (index + 1, num_mails)) emit_async(catalog.MAIL_MSG_PROCESSING, self._userid, str(index), str(num_mails)) @@ -297,7 +297,7 @@ class IncomingMail(Service): DeprecationWarning) if has_errors: - logger.debug("skipping message with decrypting errors...") + self.log.debug("Skipping message with decrypting errors...") elif self._is_msg(keys): # TODO this pipeline is a bit obscure! d = self._decrypt_doc(doc) @@ -323,7 +323,7 @@ class IncomingMail(Service): decrypted message. :rtype: SoledadDocument, str """ - logger.info('decrypting msg') + self.log.info('decrypting msg: %s' % doc.doc_id) def process_decrypted(res): if isinstance(res, tuple): @@ -338,10 +338,9 @@ class IncomingMail(Service): return self._process_decrypted_doc(doc, decrdata) def log_doc_id_and_call_errback(failure): - logger.error( + self.log.failure( '_decrypt_doc: Error decrypting document with ' 'ID %s' % doc.doc_id) - self._errback(failure) d = self._keymanager.decrypt(doc.content[ENC_JSON_KEY], self._userid) d.addErrback(log_doc_id_and_call_errback) @@ -363,15 +362,14 @@ class IncomingMail(Service): data. :rtype: Deferred """ - logger.info('processing decrypted doc') + self.log.info('Processing decrypted doc') # XXX turn this into an errBack for each one of # the deferreds that would process an individual document try: msg = json_loads(data) - except (UnicodeError, ValueError) as exc: - logger.error("Error while decrypting %s" % (doc.doc_id,)) - logger.error(str(exc)) + except (UnicodeError, ValueError): + self.log.failure("Error while decrypting %s" % (doc.doc_id,)) # we flag the message as "with decrypting errors", # to avoid further decryption attempts during sync @@ -408,7 +406,7 @@ class IncomingMail(Service): :param doc: the SoledadDocument to update :type doc: SoledadDocument """ - logger.info("Updating Incoming MSG: SoledadDoc %s" % (doc.doc_id)) + self.log.info("Updating Incoming MSG: SoledadDoc %s" % (doc.doc_id)) return self._soledad.put_doc(doc) def _delete_incoming_message(self, doc): @@ -418,7 +416,7 @@ class IncomingMail(Service): :param doc: the SoledadDocument to delete :type doc: SoledadDocument """ - logger.info("Deleting Incoming message: %s" % (doc.doc_id,)) + self.log.info("Deleting Incoming message: %s" % (doc.doc_id,)) return self._soledad.delete_doc(doc) def _maybe_decrypt_msg(self, data): @@ -433,7 +431,7 @@ class IncomingMail(Service): :rtype: Deferred """ leap_assert_type(data, str) - logger.info('maybe decrypting doc') + self.log.info('Maybe decrypting doc') # parse the original message encoding = get_email_charset(data) @@ -504,7 +502,7 @@ class IncomingMail(Service): is valid or InvalidSignature or KeyNotFound. :rtype: Deferred """ - logger.info('decrypting multipart encrypted msg') + self.log.debug('Decrypting multipart encrypted msg') msg = copy.deepcopy(msg) self._msg_multipart_sanity_check(msg) @@ -563,7 +561,7 @@ class IncomingMail(Service): is valid or InvalidSignature or KeyNotFound. :rtype: Deferred """ - logger.info('maybe decrypting inline encrypted msg') + self.log.debug('Maybe decrypting inline encrypted msg') data = self._serialize_msg(origmsg) @@ -637,14 +635,14 @@ class IncomingMail(Service): Check for known decryption errors """ if failure.check(keymanager_errors.DecryptError): - logger.warn('Failed to decrypt encrypted message (%s). ' - 'Storing message without modifications.' - % str(failure.value)) + self.log.warn('Failed to decrypt encrypted message (%s). ' + 'Storing message without modifications.' + % str(failure.value)) return (msg, None) elif failure.check(keymanager_errors.KeyNotFound): - logger.error('Failed to find private key for decryption (%s). ' - 'Storing message without modifications.' - % str(failure.value)) + self.log.error('Failed to find private key for decryption (%s). ' + 'Storing message without modifications.' + % str(failure.value)) return (msg, None) else: return failure @@ -727,7 +725,7 @@ class IncomingMail(Service): isinstance(signkey, keymanager_errors.InvalidSignature)) if previous_verify_failed() and key_imported: - logger.info('Decrypting again to verify with new key') + self.log.info('Decrypting again to verify with new key') data_signkey = yield self._decrypt_by_content_type( origmsg, senderAddress, encoding) @@ -756,20 +754,20 @@ class IncomingMail(Service): urlparts.hostname == addressHostname ): def log_key_added(ignored): - logger.debug("Imported key from OpenPGP header %s" - % (url,)) + self.log.debug("Imported key from OpenPGP header %s" + % (url,)) return True def fetch_error(failure): if failure.check(keymanager_errors.KeyNotFound): - logger.warn("Url from OpenPGP header %s failed" - % (url,)) + self.log.warn("Url from OpenPGP header %s failed" + % (url,)) elif failure.check(keymanager_errors.KeyAttributesDiffer): - logger.warn("Key from OpenPGP header url %s didn't " + self.log.warn("Key from OpenPGP header url %s didn't " "match the from address %s" % (url, address)) else: - logger.warn("An error has ocurred adding key from " + self.log.warn("An error has ocurred adding key from " "OpenPGP header url %s for %s: %s" % (url, address, failure.getErrorMessage())) return False @@ -778,10 +776,10 @@ class IncomingMail(Service): d.addCallbacks(log_key_added, fetch_error) return d else: - logger.debug("No valid url on OpenPGP header %s" % (url,)) + self.log.debug("No valid url on OpenPGP header %s" % (url,)) else: - logger.debug("There is no url on the OpenPGP header: %s" - % (header,)) + self.log.debug("There is no url on the OpenPGP header: %s" + % (header,)) return False def _maybe_extract_attached_key(self, attachments, address): @@ -801,11 +799,11 @@ class IncomingMail(Service): MIME_KEY = "application/pgp-keys" def log_key_added(ignored): - logger.debug('Added key found in attachment for %s' % address) + self.log.debug('Added key found in attachment for %s' % address) return True def failed_put_key(failure): - logger.info("An error has ocurred adding attached key for %s: %s" + self.log.info("An error has ocurred adding attached key for %s: %s" % (address, failure.getErrorMessage())) return False @@ -836,7 +834,7 @@ class IncomingMail(Service): """ doc, raw_data = msgtuple insertion_date = formatdate(time.time()) - logger.info('adding message %s to local db' % (doc.doc_id,)) + self.log.info('Adding message %s to local db' % (doc.doc_id,)) def msgSavedCallback(result): if empty(result): |