def library_import(args, l, config): import json from ambry.library.config import LibraryConfigSyncProxy from ambry.orm import Account from simplecrypt import encrypt, decrypt, DecryptionException try: jsn = decrypt(args.password, args.config_file.read().decode('base64')) except DecryptionException as e: fatal(e) finally: args.config_file.close() args.config_file.close() d = json.loads(jsn) for k, v in d['accounts'].items(): if v.get('major_type') != 'user' and 'encrypted_secret' in v: v['secret'] = Account.sym_decrypt(args.password, v['encrypted_secret']) if args.list: prt_no_format(json.dumps(d, indent=4)) else: lcsp = LibraryConfigSyncProxy(l) lcsp.sync_remotes(d['remotes'], cb=l.logger.info) lcsp.sync_accounts(d['accounts'], cb=l.logger.info) for vid, v in d['bundles'].items(): l.logger.info("Check in remote bundle {}, {}".format(vid, v['vname'])) l.checkin_remote_bundle(vid)
def admin_accounts(): import yaml from ambry.library.config import LibraryConfigSyncProxy if not current_user.is_admin: abort(403) if request.method == "POST": if request.form['config']: try: d = yaml.load(request.form['config']) if 'accounts' in d: d = d['accounts'] lcsp = LibraryConfigSyncProxy(aac.library) lcsp.sync_accounts(d) flash('Loaded {} accounts'.format(len(d)), 'success') except Exception as e: flash(str(e), 'error') if request.form.get('delete'): aac.library.delete_account(request.form['delete']) cxt = dict( accounts=[ a for a in aac.library.accounts.values() if a['major_type'] != 'user'], **aac.cc ) return aac.render('admin/accounts.html', **cxt)
def admin_accounts(): import yaml from ambry.library.config import LibraryConfigSyncProxy if not current_user.is_admin: abort(403) if request.method == "POST": if request.form['config']: try: d = yaml.load(request.form['config']) if 'accounts' in d: d = d['accounts'] lcsp = LibraryConfigSyncProxy(aac.library) lcsp.sync_accounts(d) flash('Loaded {} accounts'.format(len(d)), 'success') except Exception as e: flash(str(e), 'error') if request.form.get('delete'): aac.library.delete_account(request.form['delete']) cxt = dict(accounts=[ a for a in aac.library.accounts.values() if a['major_type'] != 'user' ], **aac.cc) return aac.render('admin/accounts.html', **cxt)
def admin_remotes(): import yaml from ambry.library.config import LibraryConfigSyncProxy if not current_user.is_admin: abort(403) if request.method == "POST": if request.form['config']: try: d = yaml.load(request.form['config']) if 'remotes' in d: d = d['remotes'] lcsp = LibraryConfigSyncProxy(aac.library) lcsp.sync_remotes(d) flash('Loaded {} remotes'.format(len(d)), 'success') except Exception as e: flash(str(e), 'error') if request.form.get('delete'): aac.library.delete_remote(request.form['delete']) if request.form.get('update'): from ambry.orm.remote import RemoteAccessError if request.form['update'] == 'all': for r in aac.library.remotes: try: r.update() aac.library.commit() except RemoteAccessError as e: flash("Update Error: {}".format(e), 'error') else: r = aac.library.remote(request.form['update']) try: r.update() aac.library.commit() except RemoteAccessError as e: flash("Update Error: {}".format(e), 'error') if request.form.get('install'): aac.library.checkin_remote_bundle(request.form['install']) b = aac.library.bundle(request.form['install']) flash("Installed bundle {}".format(b.identity.vname), 'success') cxt = dict( remotes=[r for r in aac.library.remotes], **aac.cc ) return aac.render('admin/remotes.html', **cxt)
def admin_remotes(): import yaml from ambry.library.config import LibraryConfigSyncProxy if not current_user.is_admin: abort(403) if request.method == "POST": if request.form['config']: try: d = yaml.load(request.form['config']) if 'remotes' in d: d = d['remotes'] lcsp = LibraryConfigSyncProxy(aac.library) lcsp.sync_remotes(d) flash('Loaded {} remotes'.format(len(d)), 'success') except Exception as e: flash(str(e), 'error') if request.form.get('delete'): aac.library.delete_remote(request.form['delete']) if request.form.get('update'): from ambry.orm.remote import RemoteAccessError if request.form['update'] == 'all': for r in aac.library.remotes: try: r.update() aac.library.commit() except RemoteAccessError as e: flash("Update Error: {}".format(e), 'error') else: r = aac.library.remote(request.form['update']) try: r.update() aac.library.commit() except RemoteAccessError as e: flash("Update Error: {}".format(e), 'error') if request.form.get('install'): aac.library.checkin_remote_bundle(request.form['install']) b = aac.library.bundle(request.form['install']) flash("Installed bundle {}".format(b.identity.vname), 'success') cxt = dict(remotes=[r for r in aac.library.remotes], **aac.cc) return aac.render('admin/remotes.html', **cxt)
def test_accounts(self): """ Tests library, database and environment accounts. """ l = self.library() l.drop() l.create() lcsp = LibraryConfigSyncProxy(l) lcsp.sync() # db = self.library().database # for v in l.database.root_dataset.config.library: # print v l.filesystem.downloads('foo', 'bar') l.filesystem.build('foo', 'bar') for k, v in l.accounts.items(): act = l.account(k) if k in ( 'ambry', 'google_spreadsheets', ): continue if act.major_type != 'ambry': self.assertTrue(bool(act.decrypt_secret())) self.assertTrue(bool(act.account_id)) for remote in l.remotes: self.assertTrue(bool(remote.url)) os.environ['AMBRY_DB'] = l.database.dsn = 'sqlite://' os.environ['AMBRY_ACCOUNT_PASSWORD'] = l._account_password self.assertEqual(l.database.dsn, os.getenv('AMBRY_DB')) l = new_library() try: for k, v in l.accounts.items(): act = l.account(k) if k in ( 'ambry', 'google_spreadsheets', ): continue if act.major_type != 'ambry': self.assertTrue(bool(act.decrypt_secret())) self.assertTrue(bool(act.account_id)) for remote in l.remotes: self.assertTrue(bool(remote.url)) finally: l.close()
def test_accounts(self): """ Tests library, database and environment accounts. """ l = self.library() l.drop() l.create() lcsp = LibraryConfigSyncProxy(l) lcsp.sync() # db = self.library().database # for v in l.database.root_dataset.config.library: # print v l.filesystem.downloads('foo', 'bar') l.filesystem.build('foo', 'bar') for k, v in l.accounts.items(): act = l.account(k) if k in ('ambry', 'google_spreadsheets',): continue if act.major_type != 'ambry': self.assertTrue(bool(act.decrypt_secret())) self.assertTrue(bool(act.account_id)) for remote in l.remotes: self.assertTrue(bool(remote.url)) os.environ['AMBRY_DB'] = l.database.dsn = 'sqlite://' os.environ['AMBRY_ACCOUNT_PASSWORD'] = l._account_password self.assertEqual(l.database.dsn, os.getenv('AMBRY_DB')) l = new_library() try: for k, v in l.accounts.items(): act = l.account(k) if k in ('ambry', 'google_spreadsheets',): continue if act.major_type != 'ambry': self.assertTrue(bool(act.decrypt_secret())) self.assertTrue(bool(act.account_id)) for remote in l.remotes: self.assertTrue(bool(remote.url)) finally: l.close()
def library_import(args, l, config): import json from ambry.library.config import LibraryConfigSyncProxy from ambry.orm import Account from simplecrypt import encrypt, decrypt, DecryptionException try: jsn = decrypt(args.password, args.config_file.read().decode('base64')) except DecryptionException as e: fatal(e) finally: args.config_file.close() args.config_file.close() d = json.loads(jsn) for k, v in d['accounts'].items(): if v.get('major_type') != 'user' and 'encrypted_secret' in v: v['secret'] = Account.sym_decrypt(args.password, v['encrypted_secret']) if args.list: prt_no_format(json.dumps(d, indent=4)) else: lcsp = LibraryConfigSyncProxy(l) lcsp.sync_remotes(d['remotes'], cb=l.logger.info) lcsp.sync_accounts(d['accounts'], cb=l.logger.info) for vid, v in d['bundles'].items(): l.logger.info("Check in remote bundle {}, {}".format( vid, v['vname'])) l.checkin_remote_bundle(vid)
def config_accounts_put(): from ambry.orm.account import AccountDecryptionError, MissingPasswordError from ambry.library.config import LibraryConfigSyncProxy l = aac.library lsp = LibraryConfigSyncProxy(aac.library) try: lsp.sync_accounts(request.get_json()) except MissingPasswordError: print 'Missing Password' abort(400) except AccountDecryptionError: print "Decryption Failed" abort(400) return aac.json( accounts={k: proc_account(a) for k, a in aac.library.accounts.items()})
def config_accounts_put(): from ambry.orm.account import AccountDecryptionError, MissingPasswordError from ambry.library.config import LibraryConfigSyncProxy l = aac.library lsp = LibraryConfigSyncProxy(aac.library) try: lsp.sync_accounts(request.get_json()) except MissingPasswordError: print 'Missing Password' abort(400) except AccountDecryptionError: print "Decryption Failed" abort(400) return aac.json( accounts={k: proc_account(a) for k, a in aac.library.accounts.items()} )
def create(self): from config import LibraryConfigSyncProxy self.database.create() lcsp = LibraryConfigSyncProxy(self) lcsp.sync()
def sync_config(self, force=False): """Sync the file config into the library proxy data in the root dataset """ from ambry.library.config import LibraryConfigSyncProxy lcsp = LibraryConfigSyncProxy(self) lcsp.sync(force=force)