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
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)))
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)