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 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_delete_bad(self): ucount = User.select().count() runner = CliRunner() result = runner.invoke( delete_user, ['*****@*****.**']) self.assertIn('Deleted 0 users', result.output) self.assertEqual(User.select().count(), ucount)
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 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 test_delete(self): self.factory.create_user(email='*****@*****.**') ucount = User.select().count() runner = CliRunner() result = runner.invoke( delete_user, ['*****@*****.**']) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) self.assertEqual(User.select().where(User.email == "*****@*****.**").count(), 0) self.assertEqual(User.select().count(), ucount - 1)
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 test_valid_password(self): token = invite_token(self.factory.user) password = '******' response = post_request('/invite/{}'.format(token), data={'password': password}, org=self.factory.org) self.assertEqual(response.status_code, 302) user = User.get_by_id(self.factory.user.id) self.assertTrue(user.verify_password(password))
def post(self, object_type, object_id): model = get_model_from_type(object_type) obj = get_object_or_404(model.get_by_id_and_org, object_id, self.current_org) require_admin_or_owner(obj.user_id) req = request.get_json(True) access_type = req['access_type'] if access_type not in ACCESS_TYPES: abort(400, message='Unknown access type.') try: grantee = User.get_by_id_and_org(req['user_id'], self.current_org) except User.DoesNotExist: abort(400, message='User not found.') permission = AccessPermission.grant(obj, access_type, grantee, self.current_user) self.record_event({ 'action': 'grant_permission', 'object_id': object_id, 'object_type': object_type, 'access_type': access_type, 'grantee': grantee.id }) return permission.to_dict()
def test_finds_users(self): user = self.factory.create_user(email='*****@*****.**') user2 = self.factory.create_user(email='*****@*****.**', org=self.factory.create_org()) users = User.find_by_email(user.email) self.assertIn(user, users) self.assertIn(user2, users)
def post(self, object_type, object_id): model = get_model_from_type(object_type) obj = get_object_or_404(model.get_by_id_and_org, object_id, self.current_org) require_admin_or_owner(obj.user_id) req = request.get_json(True) access_type = req['access_type'] if access_type not in ACCESS_TYPES: abort(400, message='Unknown access type.') try: grantee = User.get_by_id_and_org(req['user_id'], self.current_org) except NoResultFound: abort(400, message='User not found.') permission = AccessPermission.grant(obj, access_type, grantee, self.current_user) db.session.commit() self.record_event({ 'action': 'grant_permission', 'object_id': object_id, 'object_type': object_type, 'grantee': grantee.id, 'access_type': access_type, }) return permission.to_dict()
def test_password(self): self.factory.create_user(email='*****@*****.**') runner = CliRunner() result = runner.invoke( password, ['*****@*****.**', 'xyzzy']) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) u = User.select().where(User.email == "*****@*****.**").first() self.assertTrue(u.verify_password('xyzzy'))
def test_create_googleauth(self): runner = CliRunner() result = runner.invoke( create_user, ['*****@*****.**', 'Fred Foobar', '--google']) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) u = User.select().where(User.email == "*****@*****.**").first() self.assertEqual(u.name, "Fred Foobar") self.assertIsNone(u.password_hash) self.assertEqual(u.groups, [self.factory.default_group.id])
def test_create_basic(self): runner = CliRunner() result = runner.invoke( create_user, ['*****@*****.**', 'Fred Foobar'], input="password1\npassword1\n") self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) u = User.select().where(User.email == "*****@*****.**").first() self.assertEqual(u.name, "Fred Foobar") self.assertTrue(u.verify_password('password1')) self.assertEqual(u.groups, [self.factory.default_group.id])
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 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 test_grant_admin(self): self.factory.create_user(name='Fred Foobar', email='*****@*****.**', org=self.factory.org, groups=[self.factory.default_group.id]) runner = CliRunner() result = runner.invoke( grant_admin, ['*****@*****.**']) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) u = User.select().order_by(User.id.desc()).first() self.assertEqual(u.groups, [self.factory.default_group.id, self.factory.admin_group.id])
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()
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) migrate(migrator.drop_column('users', 'old_groups')) db.close_db(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 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( org=org,
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) migrate(migrator.drop_column('users', 'old_groups')) db.close_db(None)
def test_get_user_by_email_and_org_case_insensitive(self): user = self.factory.create_user(email='*****@*****.**') found_user = User.get_by_email_and_org("*****@*****.**", user.org) self.assertEqual(user, found_user)
def test_get_user_by_email_and_org(self): user = self.factory.create_user(email='*****@*****.**') found_user = User.get_by_email_and_org(user.email, user.org) self.assertEqual(user, found_user)
def test_finds_users_case_insensitive(self): user = self.factory.create_user(email='*****@*****.**') users = User.find_by_email('*****@*****.**') self.assertIn(user, users)
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( org=org,
def test_non_unicode_search_string(self): user = self.factory.create_user(name=u'אריק') assert user in User.search(User.all(user.org), term=u'א')