def Main(args): DisableUnbrokeredConnections() # Bootstrap translations until we've loaded everything else mailpile.i18n.ActivateTranslation(None, ConfigManager, None) try: # Create our global config manager and the default (CLI) session config = ConfigManager(rules=mailpile.config.defaults.CONFIG_RULES) session = Session(config) cli_ui = session.ui = UserInteraction(config) session.main = True try: CatchUnixSignals(session) config.clean_tempfile_dir() config.load(session) except IOError: if config.sys.debug: session.ui.error( _('Failed to decrypt configuration, ' 'please log in!')) HealthCheck(session, None, []).run() config.prepare_workers(session) except AccessError, e: session.ui.error('Access denied: %s\n' % e) sys.exit(1)
def _load_public_config(self): self.pub_config = ConfigManager(rules=CONFIG_RULES) try: self.pub_config.load(None, public_only=True) self.secret = GetUserSecret(self.pub_config) self.base_url = 'http://%s:%s%s/' % (self.pub_config.sys.http_host, self.pub_config.sys.http_port, self.pub_config.sys.http_path) except: self.pub_config = None
def Main(args): try: mailpile.platforms.DetectBinaries(_raise=OSError) except OSError as e: binary = str(e).split()[0] sys.stderr.write(""" Required binary missing or unusable: %s If you know where it is, or would like to skip this test and run Mailpile anyway, you can set one of the following environment variables: MAILPILE_%s="/path/to/binary" or MAILPILE_SKIP_BINARIES="%s" Note that skipping a binary check may cause the app to become unstable or fail in unexpected ways. If it breaks you get to keep both pieces! """ % (e, binary.upper(), binary)) sys.exit(1) # Enable our connection broker, try to prevent badly behaved plugins from # bypassing it. DisableUnbrokeredConnections() # Bootstrap translations until we've loaded everything else mailpile.i18n.ActivateTranslation(None, ConfigManager, None) try: # Create our global config manager and the default (CLI) session config = ConfigManager(rules=mailpile.config.defaults.CONFIG_RULES) session = Session(config) cli_ui = session.ui = UserInteraction(config) session.main = True try: CatchUnixSignals(session) config.clean_tempfile_dir() config.load(session) except IOError: if config.sys.debug: session.ui.error( _('Failed to decrypt configuration, ' 'please log in!')) HealthCheck(session, None, []).run() config.prepare_workers(session) except AccessError, e: session.ui.error('Access denied: %s\n' % e) sys.exit(1)
def Main(args): try: mailpile.platforms.DetectBinaries(_raise=OSError) except OSError as e: binary = str(e).split()[0] sys.stderr.write(""" Required binary missing or unusable: %s If you know where it is, or would like to skip this test and run Mailpile anyway, you can set one of the following environment variables: MAILPILE_%s="/path/to/binary" or MAILPILE_IGNORE_BINARIES="%s" Note that skipping a binary check may cause the app to become unstable or fail in unexpected ways. If it breaks you get to keep both pieces! """ % (e, binary.upper(), binary)) sys.exit(1) # Enable our connection broker, try to prevent badly behaved plugins from # bypassing it. DisableUnbrokeredConnections() # Bootstrap translations until we've loaded everything else mailpile.i18n.ActivateTranslation(None, ConfigManager, None) try: # Create our global config manager and the default (CLI) session config = ConfigManager(rules=mailpile.config.defaults.CONFIG_RULES) session = Session(config) cli_ui = session.ui = UserInteraction(config) session.main = True try: CatchUnixSignals(session) config.clean_tempfile_dir() config.load(session) except IOError: if config.sys.debug: session.ui.error( _('Failed to decrypt configuration, ' 'please log in!')) HealthCheck(session, None, []).run() config.prepare_workers(session) except AccessError as e: session.ui.error('Access denied: %s\n' % e) sys.exit(1) try: try: if '--login' in args: a1 = args[:args.index('--login') + 1] a2 = args[len(a1):] else: a1, a2 = args, [] allopts = [] for argset in (a1, a2): shorta, longa = '', [] for cls in COMMANDS: shortn, longn, urlpath, arglist = cls.SYNOPSIS[:4] if arglist: if shortn: shortn += ':' if longn: longn += '=' if shortn: shorta += shortn if longn: longa.append(longn.replace(' ', '_')) opts, args = getopt.getopt(argset, shorta, longa) allopts.extend(opts) for opt, arg in opts: session.ui.display_result( Action(session, opt.replace('-', ''), arg.decode('utf-8'))) if args: session.ui.display_result( Action(session, args[0], ' '.join(args[1:]).decode('utf-8'))) except (getopt.GetoptError, UsageError) as e: session.fatal_error(unicode(e)) if (not allopts) and (not a1) and (not a2): InteractCommand(session).run() except KeyboardInterrupt: pass except: traceback.print_exc() finally: write_readline_history(session) # Make everything in the background quit ASAP... mailpile.util.LAST_USER_ACTIVITY = 0 mailpile.util.QUITTING = mailpile.util.QUITTING or True if config.plugins: config.plugins.process_shutdown_hooks() config.stop_workers() if config.index: config.index.save_changes() if config.event_log: config.event_log.close() session.ui.display_result(Action(session, 'cleanup', '')) if session.interactive and config.sys.debug: session.ui.display_result(Action(session, 'ps', '')) # Remove anything that we couldn't remove before safe_remove() # Restart the app if that's what was requested if mailpile.util.QUITTING == 'restart': os.execv(sys.argv[0], sys.argv)
# Check our arguments infiles = outfiles = [] try: infiles = sys.argv[1:-1] outpath = sys.argv[-1] except: pass if ((not infiles or not outpath) or (os.path.exists(outpath) and not os.path.isdir(outpath)) or (len(infiles) > 1 and not os.path.isdir(outpath))): sys.stderr.write(__doc__) sys.exit(1) # Basic app bootstrapping config = ConfigManager(rules=CONFIG_RULES) session = Session(config) session.ui = UserInteraction(config) # Get the password, verify it, decrypt config fails = 0 for tries in range(1, 4): try: VerifyAndStorePassphrase(config, passphrase=session.ui.get_password( _('Your password: '******'Incorrect, try again?') fails = tries
from mailpile.conn_brokers import DisableUnbrokeredConnections from mailpile.i18n import gettext as _ from mailpile.i18n import ngettext as _n from mailpile.plugins import PluginManager from mailpile.plugins.core import Help, HelpSplash, Load, Rescan, Quit from mailpile.plugins.motd import MessageOfTheDay from mailpile.ui import ANSIColors, Session, UserInteraction, Completer from mailpile.util import * _plugins = PluginManager(builtin=__file__) # This makes sure mailbox "plugins" get loaded... has to go somewhere? from mailpile.mailboxes import * mailpile.i18n.ActivateTranslation(None, ConfigManager, None) config = ConfigManager(rules=mailpile.config.defaults.CONFIG_RULES) cfg = config with open('/tmp/pass', 'rb') as fort1f3: p1 = fort1f3.read() pass2 = SecurePassphraseStorage(p1) cfg.load_master_key(pass2) session = Session(config) cli_ui = session.ui = UserInteraction(config) session.main = True config.clean_tempfile_dir() config.load(session) session.config = cfg vcard = MailpileVCard() vcard.kind = 'profile'