Example #1
0
class Server(object):
    def __init__(self):
        self.__theme = Theme()
        self.__key_words_manager = KeyWordsManager()
        self.__email_manager = EmailManager()
        self.__email = None
        self.__pass = None
        self.__account = None

        self.__index_html = None

        self.__error_description = ""

    def prepate_loop(self):
        while True:
            self.prepate()
            time.sleep(REFRESH_TIME_SECONDS)

    def codify(self, name):
        if not isinstance(name, str):
            return name
        new = ""
        for letter in name[: name.index("@")]:
            new += chr(int(ord(letter) + time.time()) % 122)
        return new + name[name.index("@") :]

    def prepate(self):
        try:
            # f = open("debug.txt", "a")
            # f.write("----Prepare-----\n")
            emails = self.__account.get_emails()
            # f.write("emails count:%s\n" % emails.__len__())
            remaining = self.__account.emails_to_fetch_count()
            # f.write("remaining count:%s\n" % remaining)
            self.__email_manager.add_emails(emails)
            timeline = self.__email_manager.emails_timeline
            # for year in timeline:
            #    f.write("%s:\n" % year)
            #    for month in timeline[year]:
            #        f.write("\t%s:\n" % month)
            #        for type in timeline[year][month]:
            #            f.write("\t\t%s:\n" % type)
            #            for contact in timeline[year][month][type]:
            #                f.write("\t\t\t%s:%s\n" % (self.codify(contact), timeline[year][month][type][contact].__len__()))
            contacts_mapping = self.__account.get_contacts_mapping()
            # f.write("contacts mapping count:%s\n" % str(contacts_mapping.keys().__len__()))
            contacts_list = self.__account.get_contacts_list()
            # f.write("contacts list count:%s\n" % contacts_list.__len__())
            self.__index_html = self.__theme.get_index_html(
                remaining, self.__email_manager, timeline, contacts_mapping, contacts_list, self.__key_words_manager
            )
            # f.write("----------------\n\n")
            # f.close()
        except Exception as e:
            if DEBUG_FLAG:
                f = open("debug.txt", "a")
                import traceback

                traceback.print_exc(None, f)
                f.write("----------------\n\n")
                f.close()
            return

    @cherrypy.expose
    def index(self):
        if self.__email is None or self.__pass is None:
            return self.__theme.get_login_html()
        else:
            if self.__account == None:
                self.__account = GmailAccount(self.__key_words_manager)
                try:
                    self.__account.login(self.__email, self.__pass)
                except LanguageNotSupported as e:
                    return self.__theme.get_language_not_supported_html(e.available_boxes)
                except WrongUsernameAndOrPasswordException:
                    self.__account = None
                    return self.__theme.get_login_html(wrong_credentials=True)
                except LoginException as e:
                    self.__account = None
                    return self.__theme.get_login_html(login_exception_message=e.message)
                except SearchException as e:
                    self.__account = None
                    self.raiseOops(e)
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.__account = None
                    self.raiseOops(e)

                try:
                    self.__account.start_fetch_all(asynchronous=True)

                    import threading

                    th = threading.Thread(target=self.prepate_loop)
                    th.start()
                except LanguageNotSupported as e:
                    return self.__theme.get_language_not_supported_html(e.available_boxes)
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.raiseOops(e)

            if self.__index_html is None or self.__index_html.__len__() == 0:
                time.sleep(1)
                raise cherrypy.HTTPRedirect("./index")
            else:
                try:
                    return self.__index_html
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.raiseOops(e)

    @cherrypy.expose
    def choose_label_action(self, allLabel, sentLabel):
        try:
            self.__account.SUPORTED_ALL_MAIL_LABELS.append(allLabel)
            self.__account.SUPORTED_SENT_MAIL_LABELS.append(sentLabel)
            self.__account = None
        except Exception as e:
            self.raiseOops(e)

        raise cherrypy.HTTPRedirect("./index")

    @cherrypy.expose
    def login_action(self, mail, password):
        try:
            self.__email = mail
            self.__pass = password
        except Exception as e:
            if DEBUG_FLAG:
                f = open("debug.txt", "a")
                import traceback

                traceback.print_exc(None, f)
                f.write("----------------\n\n")
                f.close()
            self.raiseOops(e)
        raise cherrypy.HTTPRedirect("./index")

    @cherrypy.expose
    def logout_action(self):
        try:
            self.__email = None
            self.__pass = None
        except Exception as e:
            self.raiseOops(e)
        raise cherrypy.HTTPRedirect("./index")

    def raiseOops(self, exception):
        msg = str(exception)
        if msg.__len__() == 0:
            msg = "no description"
        encrypte_msg = bz2.compress(msg)
        self.__error_description = encrypte_msg
        raise cherrypy.HTTPRedirect("./oops")

    @cherrypy.expose
    def oops(self):
        return self.__theme.get_oops_html(self.__error_description)
Example #2
0
from services import htmlGenerator, cookiesManager

# log to stderr
logging.basicConfig(level=logging.DEBUG)


print "Content-Type: text/html\n"

print """<!DOCTYPE html>
<html lang="en">
"""
htmlGenerator.print_header()


loginCookies = cookiesManager.get_login_cookies()
if loginCookies != None:
    g = GmailAccount()
    try:
        resp = g.login(loginCookies.mail,loginCookies.password) 
        htmlGenerator.print_main_page()
        
    except Exception, e:
        #nothing so far
        print "Wrong username and/or password."
        htmlGenerator.print_page("login.html")
else:
    htmlGenerator.print_page("login.html")


print "</html>"
Example #3
0
    def index(self):
        if self.__email is None or self.__pass is None:
            return self.__theme.get_login_html()
        else:
            if self.__account == None:
                self.__account = GmailAccount(self.__key_words_manager)
                try:
                    self.__account.login(self.__email, self.__pass)
                except LanguageNotSupported as e:
                    return self.__theme.get_language_not_supported_html(e.available_boxes)
                except WrongUsernameAndOrPasswordException:
                    self.__account = None
                    return self.__theme.get_login_html(wrong_credentials=True)
                except LoginException as e:
                    self.__account = None
                    return self.__theme.get_login_html(login_exception_message=e.message)
                except SearchException as e:
                    self.__account = None
                    self.raiseOops(e)
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.__account = None
                    self.raiseOops(e)

                try:
                    self.__account.start_fetch_all(asynchronous=True)

                    import threading

                    th = threading.Thread(target=self.prepate_loop)
                    th.start()
                except LanguageNotSupported as e:
                    return self.__theme.get_language_not_supported_html(e.available_boxes)
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.raiseOops(e)

            if self.__index_html is None or self.__index_html.__len__() == 0:
                time.sleep(1)
                raise cherrypy.HTTPRedirect("./index")
            else:
                try:
                    return self.__index_html
                except Exception as e:
                    if DEBUG_FLAG:
                        f = open("debug.txt", "a")
                        import traceback

                        traceback.print_exc(None, f)
                        f.write("----------------\n\n")
                        f.close()
                    self.raiseOops(e)