예제 #1
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
예제 #2
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)
예제 #3
0
 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)
예제 #4
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
예제 #5
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
예제 #6
0
 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)
예제 #7
0
파일: setup.py 프로젝트: 13768324554/redash
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
예제 #8
0
 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))
예제 #9
0
    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()
예제 #10
0
    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)
예제 #11
0
    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()
예제 #12
0
 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))
예제 #13
0
 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'))
예제 #14
0
 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])
예제 #15
0
 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])
예제 #16
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
예제 #17
0
파일: database.py 프로젝트: CFHH/redash
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()
예제 #18
0
 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])
예제 #19
0
파일: database.py 프로젝트: CFHH/redash
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()
예제 #20
0
            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,
예제 #22
0
        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)
예제 #23
0
    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)
예제 #24
0
    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)
예제 #25
0
    def test_finds_users_case_insensitive(self):
        user = self.factory.create_user(email='*****@*****.**')

        users = User.find_by_email('*****@*****.**')
        self.assertIn(user, users)
예제 #26
0
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,
예제 #27
0
    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'א')