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
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
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
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)
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)
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
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)
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
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)
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)
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)
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
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
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
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)
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()
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()
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(
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),
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)
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)
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]