Пример #1
0
 def _choose_state(self):
     from mailpile.plugins.setup_magic import Setup
     if mailpile.util.QUITTING:
         return self._state_shutting_down
     elif Setup.Next(self.config, 'anything') != 'anything':
         return self._state_need_setup
     elif not self.config.loaded_config:
         return self._state_please_log_in
     else:
         return self._state_logged_in
Пример #2
0
    def redirect_to_auth_or_setup(self, method, path, query_data, setup=True):
        """Redirect to the /auth/ or a /setup/* endpoint"""
        from mailpile.plugins.setup_magic import Setup

        if method.lower() == 'get':
            qd = [(k, v) for k, vl in query_data.iteritems() for v in vl]
            if '_path' not in query_data:
                qd.append(('_path', path))
        else:
            qd = []

        if setup:
            nxt = Setup.Next(self.session.config, mailpile.auth.Authenticate)
            if nxt.HTTP_AUTH_REQUIRED is True:
                nxt = mailpile.auth.Authenticate
            path = '/%s/' % nxt.SYNOPSIS[2]
        else:
            path = '/%s/' % mailpile.auth.Authenticate.SYNOPSIS[2]

        raise UrlRedirectException(self._url(path, qs=urlencode(qd)))
Пример #3
0
def Interact(session):
    global readline
    try:
        import readline as rl  # Unix-only
        readline = rl
    except ImportError:
        pass

    try:
        if readline:
            readline.read_history_file(session.config.history_file())
            readline.set_completer_delims(Completer.DELIMS)
            readline.set_completer(Completer(session).get_completer())
            for opt in ["tab: complete", "set show-all-if-ambiguous on"]:
                readline.parse_and_bind(opt)
    except IOError:
        pass

    # Negative history means no saving state to disk.
    history_length = session.config.sys.history_length
    if readline is None:
        pass  # history currently not supported under Windows / Mac
    elif history_length >= 0:
        readline.set_history_length(history_length)
    else:
        readline.set_history_length(-history_length)

    try:
        prompt = session.ui.term.color('mailpile> ',
                                       color=session.ui.term.BLACK,
                                       weight=session.ui.term.BOLD,
                                       readline=(readline is not None))
        while not mailpile.util.QUITTING:
            try:
                with session.ui.term:
                    if Setup.Next(session.config, 'anything') != 'anything':
                        session.ui.notify(
                            _('Mailpile is unconfigured, please run `setup`'
                              ' or visit the web UI.'))
                    session.ui.block()
                    opt = threaded_raw_input(prompt)
            except KeyboardInterrupt:
                session.ui.unblock(force=True)
                session.ui.notify(
                    _('Interrupted. '
                      'Press CTRL-D or type `quit` to quit.'))
                continue
            session.ui.term.check_max_width()
            session.ui.unblock(force=True)
            if opt:
                if ' ' in opt:
                    opt, arg = opt.split(' ', 1)
                else:
                    arg = ''
                try:
                    result = Action(session, opt, arg)
                    session.ui.block()
                    session.ui.display_result(result)
                except UsageError, e:
                    session.fatal_error(unicode(e))
                except UrlRedirectException, e:
                    session.fatal_error('Tried to redirect to: %s' % e.url)