#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# This file is part of GetTor, a Tor Browser distribution system.
#
# :authors: isra <ilv@torproject.org>
#           see also AUTHORS file
#
# :license: This is Free Software. See LICENSE for license information.

import sys
import os
from twisted.python import log
from twisted.internet import defer, reactor

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from gettor.parse.email import EmailParser, AddressError, DKIMError
from gettor.utils import options

@defer.inlineCallbacks
def process_email(message):
    settings = options.parse_settings()

    try:
        ep = EmailParser(settings, "gettor@torproject.org")
        yield defer.maybeDeferred(
            ep.parse, message
        ).addCallback(ep.parse_callback).addErrback(ep.parse_errback)

    except AddressError as e:
            log.err("Address error: {}".format(e), system="process email")
            reactor.stop()

    except DKIMError as e:
            log.err("DKIM error: {}".format(e), system="process email")
            reactor.stop()

    reactor.stop()

def main():
    log.msg("Reading new email.", system="process email")
    incoming_email = sys.stdin.read()
    reactor.callWhenRunning(process_email, incoming_email)
    reactor.run()


if __name__ == '__main__':
    settings = options.parse_settings()
    email_parser_logfile = settings.get("email_parser_logfile")
    log.startLogging(open(email_parser_logfile, 'a'))
    log.msg("New email request received.", system="process email")
    main()
    log.msg("Email request processed.", system="process email")
