Example #1
0
def create_org(org_name, user_name, email, password):
    # Se remueven caracteres especiales y espacios del nombre
    org_name_url = ''.join(e for e in org_name if e.isalnum())
    org_name_url = org_name_url.lower()

    default_org = Organization(name=org_name, slug=org_name_url, settings={})
    admin_group = Group(
        name="admin",
        permissions=["admin", "super_admin"],
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )
    default_group = Group(
        name=org_name_url,
        permissions=Group.DEFAULT_PERMISSIONS,
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )

    db.session.add_all([default_org, admin_group, default_group])
    db.session.commit()

    user = User(
        org=default_org,
        name=user_name,
        email=email,
        group_ids=[admin_group.id, default_group.id],
    )
    user.hash_password(password)

    db.session.add(user)
    db.session.commit()

    return default_org, user
Example #2
0
def create_org(org_name, user_name, email, password):
    ###############################创建组织和分组
    # default_org = Organization.create(name=org_name, slug='default', settings={})
    # admin_group = Group.create(name='admin', permissions=['admin', 'super_admin'], org=default_org, type=Group.BUILTIN_GROUP)
    # default_group = Group.create(name='default', permissions=Group.DEFAULT_PERMISSIONS, org=default_org, type=Group.BUILTIN_GROUP)

    default_org = Organization(name=org_name, slug='default', settings={})

    admin_group = Group(name='admin', permissions=['admin', 'super_admin'], org=default_org, type=Group.BUILTIN_GROUP)

    default_group = Group(name='default', permissions=Group.DEFAULT_PERMISSIONS, org=default_org,
                          type=Group.BUILTIN_GROUP)

    db.session.add_all([default_org, admin_group, default_group])
    db.session.commit()

    ###############################创建用户
    user = User(org=default_org, name=user_name, email=email, group_ids=[admin_group.id, default_group.id])
    ####  不保存密码,直接hash进去
    user.hash_password(password)
    ####
    db.session.add(user)
    db.session.commit()

    return default_org, user
Example #3
0
def create_org(org_name, user_name, email, password):
    default_org = Organization(name=org_name, slug="default", settings={})
    admin_group = Group(
        name="admin",
        permissions=["admin", "super_admin"],
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )
    default_group = Group(
        name="default",
        permissions=Group.DEFAULT_PERMISSIONS,
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )

    db.session.add_all([default_org, admin_group, default_group])
    db.session.commit()

    user = User(
        org=default_org,
        name=user_name,
        email=email,
        group_ids=[admin_group.id, default_group.id],
    )
    user.hash_password(password)

    db.session.add(user)
    db.session.commit()

    return default_org, user
Example #4
0
def setup():
    if current_org != None or settings.MULTI_ORG:
        return redirect('/')

    form = SetupForm(request.form)
    form.newsletter.data = True
    form.security_notifications.data = True

    if request.method == 'POST' and form.validate():
        default_org = Organization(name=form.org_name.data, slug='default', settings={})
        admin_group = Group(name='admin', permissions=['admin', 'super_admin'], org=default_org, type=Group.BUILTIN_GROUP)
        default_group = Group(name='default', permissions=Group.DEFAULT_PERMISSIONS, org=default_org, type=Group.BUILTIN_GROUP)

        db.session.add_all([default_org, admin_group, default_group])
        db.session.commit()

        user = User(org=default_org, name=form.name.data, email=form.email.data, group_ids=[admin_group.id, default_group.id])
        user.hash_password(form.password.data)

        db.session.add(user)
        db.session.commit()

        g.org = default_org
        login_user(user)

        # signup to newsletter if needed
        if form.newsletter.data or form.security_notifications:
            subscribe.delay(form.data)

        return redirect(url_for('redash.index', org_slug=None))

    return render_template('setup.html', form=form)
Example #5
0
    def test_post(self):
        admin = self.factory.create_admin()
        rv = self.make_request(
            "post",
            "/api/settings/organization",
            data={"auth_password_login_enabled": False},
            user=admin,
        )
        self.assertEqual(rv.json["settings"]["auth_password_login_enabled"],
                         False)
        self.assertEqual(
            self.factory.org.settings["settings"]
            ["auth_password_login_enabled"], False)

        rv = self.make_request(
            "post",
            "/api/settings/organization",
            data={"auth_password_login_enabled": True},
            user=admin,
        )
        updated_org = Organization.get_by_slug(self.factory.org.slug)
        self.assertEqual(rv.json["settings"]["auth_password_login_enabled"],
                         True)
        self.assertEqual(
            updated_org.settings["settings"]["auth_password_login_enabled"],
            True)
Example #6
0
def _get_current_org():
    if 'org' in g:
        return g.org

    slug = request.view_args.get('org_slug', g.get('org_slug', 'default'))
    g.org = Organization.get_by_slug(slug)
    logging.debug("Current organization: %s (slug: %s)", g.org, slug)
    return g.org
Example #7
0
def _get_current_org():
    if 'org' in g:
        return g.org

    slug = request.view_args.get('org_slug', g.get('org_slug', 'default'))
    g.org = Organization.get_by_slug(slug)
    logging.debug("Current organization: %s (slug: %s)", g.org, slug)
    return g.org
Example #8
0
 def test_set_google_apps_domains(self):
     domains = ['example.org', 'example.com']
     runner = CliRunner()
     result = runner.invoke(set_google_apps_domains, [','.join(domains)])
     self.assertFalse(result.exception)
     self.assertEqual(result.exit_code, 0)
     o = Organization.select().where(
         Organization.id == self.factory.org.id).first()
     self.assertEqual(o.google_apps_domains, domains)
Example #9
0
def _get_current_org():
    if 'org' in g and g.org is not None:
        return g.org

    slug = "default"

    g.org = Organization.get_by_slug(slug)
    logging.debug("Current organization: %s (slug: %s)", g.org, slug)
    return g.org
Example #10
0
 def test_updates_google_apps_domains(self):
     admin = self.factory.create_admin()
     domains = ['example.com']
     rv = self.make_request('post',
                            '/api/settings/organization',
                            data={'auth_google_apps_domains': domains},
                            user=admin)
     updated_org = Organization.get_by_slug(self.factory.org.slug)
     self.assertEqual(updated_org.google_apps_domains, domains)
Example #11
0
    def test_post(self):
        admin = self.factory.create_admin()
        rv = self.make_request('post', '/api/settings/organization', data={'auth_password_login_enabled': False}, user=admin)
        self.assertEqual(rv.json['settings']['auth_password_login_enabled'], False)
        self.assertEqual(self.factory.org.settings['settings']['auth_password_login_enabled'], False)

        rv = self.make_request('post', '/api/settings/organization', data={'auth_password_login_enabled': True}, user=admin)
        updated_org = Organization.get_by_slug(self.factory.org.slug)
        self.assertEqual(rv.json['settings']['auth_password_login_enabled'], True)
        self.assertEqual(updated_org.settings['settings']['auth_password_login_enabled'], True)
Example #12
0
 def test_updates_microsoft_apps_domains(self):
     admin = self.factory.create_admin()
     domains = ["example.com"]
     rv = self.make_request(
         "post",
         "/api/settings/organization",
         data={"auth_microsoft_apps_domains": domains},
         user=admin,
     )
     updated_org = Organization.get_by_slug(self.factory.org.slug)
     self.assertEqual(updated_org.microsoft_apps_domains, domains)
Example #13
0
def _get_current_org():
    if 'org' in g:
        return g.org

    slug = request.view_args.get('org_slug', g.get('org_slug', 'default'))

    # slug 翻译过来就是:标称, 单位的意思。在 django 中,slug 指有效 URL 的一部分,能使 URL 更加清晰易懂。比如有这样一篇文章,标题是 "13岁的孩子",
    # 它的 URL 地址是 "/posts/13-sui-de-hai-zi",后面这一部分便是 slug。

    g.org = Organization.get_by_slug(slug)
    logging.debug("Current organization: %s (slug: %s)", g.org, slug)
    return g.org
Example #14
0
def _get_current_org():
    if "org" in g:
        return g.org

    if request.view_args is None:
        slug = g.get("org_slug", "default")
    else:
        slug = request.view_args.get("org_slug", g.get("org_slug", "default"))

    g.org = Organization.get_by_slug(slug)
    logging.debug("Current organization: %s (slug: %s)", g.org, slug)
    return g.org
Example #15
0
def create_org(org_name, user_name, email, password):
    default_org = Organization(name=org_name, slug='default', settings={})
    admin_group = Group(name='admin',
                        permissions=Group.ADMIN_PERMISSIONS,
                        org=default_org,
                        type=Group.BUILTIN_GROUP)

    db.session.add_all([default_org, admin_group])
    db.session.commit()

    user = User(org=default_org,
                name=user_name,
                email=email,
                is_super=True,
                group_ids=[admin_group.id])
    user.hash_password(password)

    db.session.add(user)
    db.session.commit()

    return default_org, user
Example #16
0
    def test_post(self):
        admin = self.factory.create_admin()
        rv = self.make_request('post',
                               '/api/settings/organization',
                               data={'auth_password_login_enabled': False},
                               user=admin)
        self.assertEqual(rv.json['settings']['auth_password_login_enabled'],
                         False)
        self.assertEqual(
            self.factory.org.settings['settings']
            ['auth_password_login_enabled'], False)

        rv = self.make_request('post',
                               '/api/settings/organization',
                               data={'auth_password_login_enabled': True},
                               user=admin)
        updated_org = Organization.get_by_slug(self.factory.org.slug)
        self.assertEqual(rv.json['settings']['auth_password_login_enabled'],
                         True)
        self.assertEqual(
            updated_org.settings['settings']['auth_password_login_enabled'],
            True)
Example #17
0
def setup_test_admin():
    from redash.models import Group, Organization, User, db

    _wait_for_db_connection(db)

    user_name = "test1"
    email = "*****@*****.**"
    password = "******"

    default_org = Organization.get_by_id(1)
    admin_group = Group.get_by_id(1)
    default_group = Group.get_by_id(2)

    user = User(
        org=default_org,
        name=user_name,
        email=email,
        group_ids=[admin_group.id, default_group.id],
    )
    user.hash_password(password)
    db.session.add(user)
    db.session.commit()
Example #18
0
def setup_admin():
    from redash.models import Group, Organization, User, db

    _wait_for_db_connection(db)

    org_name = "PlayBlock"
    user_name = "admin"
    email = "*****@*****.**"
    password = "******"

    default_org = Organization(name=org_name, slug="default", settings={})
    admin_group = Group(
        name="admin",
        permissions=["admin", "super_admin"],
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )
    default_group = Group(
        name="default",
        permissions=Group.DEFAULT_PERMISSIONS,
        org=default_org,
        type=Group.BUILTIN_GROUP,
    )

    db.session.add_all([default_org, admin_group, default_group])
    db.session.commit()

    user = User(
        org=default_org,
        name=user_name,
        email=email,
        group_ids=[admin_group.id, default_group.id],
    )
    user.hash_password(password)

    db.session.add(user)
    db.session.commit()
Example #19
0
 def test_updates_google_apps_domains(self):
     admin = self.factory.create_admin()
     domains = ['example.com']
     rv = self.make_request('post', '/api/settings/organization', data={'auth_google_apps_domains': domains}, user=admin)
     updated_org = Organization.get_by_slug(self.factory.org.slug)
     self.assertEqual(updated_org.google_apps_domains, domains)
from playhouse.migrate import PostgresqlMigrator, migrate

if __name__ == '__main__':
    migrator = PostgresqlMigrator(db.database)
    with db.database.transaction():

        if not NotificationDestination.table_exists():
            NotificationDestination.create_table()
            
            # Update alert subscription fields
            migrate(
                migrator.add_column('alert_subscriptions', 'destination_id', AlertSubscription.destination)
            )

            try:
                org = Organization.get_by_slug('default')
                user = User.select().where(User.org==org, peewee.SQL("%s = ANY(groups)", org.admin_group.id)).get()
            except Exception:
                print "!!! Warning: failed finding default organization or admin user, won't migrate Webhook/HipChat alert subscriptions."
                exit()

            if settings.WEBHOOK_ENDPOINT:
                # Have all existing alerts send to webhook if already configured
                schema = get_configuration_schema_for_destination_type('webhook')
                conf = {'url': settings.WEBHOOK_ENDPOINT}
                if settings.WEBHOOK_USERNAME:
                    conf['username'] = settings.WEBHOOK_USERNAME
                    conf['password'] = settings.WEBHOOK_PASSWORD
                options = ConfigurationContainer(conf, schema)

                webhook = NotificationDestination.create(
Example #21
0
WEBHOOK_PASSWORD = os.environ.get('REDASH_WEBHOOK_PASSWORD', None)

if __name__ == '__main__':
    migrator = PostgresqlMigrator(db.database)
    with db.database.transaction():

        if not NotificationDestination.table_exists():
            NotificationDestination.create_table()
            
            # Update alert subscription fields
            migrate(
                migrator.add_column('alert_subscriptions', 'destination_id', AlertSubscription.destination)
            )

            try:
                org = Organization.get_by_slug('default')
                user = User.select().where(User.org==org, peewee.SQL("%s = ANY(groups)", org.admin_group.id)).get()
            except Exception:
                print("!!! Warning: failed finding default organization or admin user, won't migrate Webhook/HipChat alert subscriptions.")
                exit()

            if WEBHOOK_ENDPOINT:
                # Have all existing alerts send to webhook if already configured
                schema = get_configuration_schema_for_destination_type('webhook')
                conf = {'url': WEBHOOK_ENDPOINT}
                if WEBHOOK_USERNAME:
                    conf['username'] = WEBHOOK_USERNAME
                    conf['password'] = WEBHOOK_PASSWORD
                options = ConfigurationContainer(conf, schema)

                webhook = NotificationDestination.create(
import os
from redash.models import db, Organization, Group
from redash import settings
from playhouse.migrate import PostgresqlMigrator, migrate

# The following is deprecated and should be defined with the Organization object
GOOGLE_APPS_DOMAIN = settings.set_from_string(
    os.environ.get("REDASH_GOOGLE_APPS_DOMAIN", ""))

if __name__ == '__main__':
    migrator = PostgresqlMigrator(db.database)

    with db.database.transaction():
        Organization.create_table()

        default_org = Organization.create(
            name="Default",
            slug='default',
            settings={
                Organization.SETTING_GOOGLE_APPS_DOMAINS:
                list(GOOGLE_APPS_DOMAIN)
            })

        column = Group.org
        column.default = default_org

        migrate(
            migrator.add_column('groups', 'org_id', column),
            migrator.add_column('events', 'org_id', column),
            migrator.add_column('data_sources', 'org_id', column),
            migrator.add_column('users', 'org_id', column),
Example #23
0
from redash.models import db, Organization, Group
from redash import settings
from playhouse.migrate import PostgresqlMigrator, migrate

if __name__ == '__main__':
    migrator = PostgresqlMigrator(db.database)

    with db.database.transaction():
        Organization.create_table()

        default_org = Organization.create(name="Default", slug='default', settings={
            Organization.SETTING_GOOGLE_APPS_DOMAINS: list(settings.GOOGLE_APPS_DOMAIN)
        })

        column = Group.org
        column.default = default_org

        migrate(
            migrator.add_column('groups', 'org_id', column),
            migrator.add_column('events', 'org_id', column),
            migrator.add_column('data_sources', 'org_id', column),
            migrator.add_column('users', 'org_id', column),
            migrator.add_column('dashboards', 'org_id', column),
            migrator.add_column('queries', 'org_id', column),
            migrator.add_column('query_results', 'org_id', column),
        )

        # Change the uniqueness constraint on user email to be (org, email):
        migrate(
            migrator.drop_index('users', 'users_email'),
            migrator.add_index('users', ('org_id', 'email'), unique=True)
Example #24
0
    migrator = PostgresqlMigrator(db.database)

    with db.database.transaction():
        # Add type to groups
        migrate(migrator.add_column('groups', 'type', Group.type))

        for name in ['default', 'admin']:
            group = Group.get(Group.name == name)
            group.type = Group.BUILTIN_GROUP
            group.save()

        # Create association table between data sources and groups
        DataSourceGroup.create_table()

        # add default to existing data source:
        default_org = Organization.get_by_id(1)
        default_group = Group.get(Group.name == "default")
        for ds in DataSource.all(default_org):
            DataSourceGroup.create(data_source=ds, group=default_group)

        # change the groups list on a user object to be an ids list
        migrate(migrator.rename_column('users', 'groups', 'old_groups'), )

        migrate(migrator.add_column('users', 'groups', User.groups))

        group_map = dict(map(lambda g: (g.name, g.id), Group.select()))
        user_map = defaultdict(list)
        for user in User.select(User, peewee.SQL('old_groups')):
            group_ids = [group_map[group] for group in user.old_groups]
            user.update_instance(groups=group_ids)
Example #25
0
    with db.database.transaction():
        # Add type to groups
        migrate(
            migrator.add_column('groups', 'type', Group.type)
        )

        for name in ['default', 'admin']:
            group = Group.get(Group.name==name)
            group.type = Group.BUILTIN_GROUP
            group.save()

        # Create association table between data sources and groups
        DataSourceGroup.create_table()

        # add default to existing data source:
        default_org = Organization.get_by_id(1)
        default_group = Group.get(Group.name=="default")
        for ds in DataSource.all(default_org):
            DataSourceGroup.create(data_source=ds, group=default_group)

        # change the groups list on a user object to be an ids list
        migrate(
            migrator.rename_column('users', 'groups', 'old_groups'),
        )

        migrate(migrator.add_column('users', 'groups', User.groups))

        group_map = dict(map(lambda g: (g.name, g.id), Group.select()))
        user_map = defaultdict(list)
        for user in User.select(User, peewee.SQL('old_groups')):
            group_ids = [group_map[group] for group in user.old_groups]