Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
    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()
Esempio n. 7
0
    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()
Esempio n. 8
0
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)
Esempio n. 9
0
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()})
Esempio n. 10
0
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()}
    )
Esempio n. 11
0
    def create(self):
        from config import LibraryConfigSyncProxy
        self.database.create()

        lcsp = LibraryConfigSyncProxy(self)
        lcsp.sync()
Esempio n. 12
0
 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)
Esempio n. 13
0
    def create(self):
        from config import LibraryConfigSyncProxy
        self.database.create()

        lcsp = LibraryConfigSyncProxy(self)
        lcsp.sync()
Esempio n. 14
0
 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)