Beispiel #1
0
    def list(self):
        """
        fetch user list or one user

        :return:
        """
        page = int(request.args.get('page', 0))
        page = page - 1 if page else 0
        size = int(request.args.get('size', 10))
        space_id = int(request.args.get('space_id', 0))
        kw = request.values.get('kw', '')

        user_ids = []
        if current_user.role != SUPER and space_id:
            members = MemberModel(group_id=current_user.last_space).members()
            user_ids = members['user_ids']

        user_model = UserModel()
        user_list, count = user_model.list(uids=user_ids, page=page, size=size, space_id=space_id, kw=kw)
        filters = {
            'username': ['线上', '线下'],
            'status': ['正常', '禁用']
        }
        return self.list_json(list=user_list, count=count, table=self.table(filters),
                              enable_create=permission.role_upper_master())
Beispiel #2
0
    def item(self, group_id):
        """
        获取某个用户组
        /group/<int:group_id>

        :param group_id:
        :return:
        """
        ## sqlalchemy版本
        group_model = MemberModel()
        group = group_model.members(group_id=group_id)
        if group:
            return self.render_json(data=group)
        return self.render_json(code=-1)

        ## mixin 版本
        group_model = TagModel().get_by_id(group_id)
        if not group_model:
            return self.render_json(code=-1)

        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=group_model.users)

        group_info = group_model.to_dict()
        group_info['members'] = user_info
        group_info['users'] = len(user_info)
        group_info['group_name'] = group_info['name']
        group_info['group_id'] = group_info['id']
        return self.render_json(data=group_info)
Beispiel #3
0
    def list(self):
        """
        fetch user list or one user

        :return:
        """
        page = int(request.args.get('page', 0))
        page = page - 1 if page else 0
        size = int(request.args.get('size', 10))
        space_id = int(request.args.get('space_id', 0))
        kw = request.values.get('kw', '')

        user_ids = []
        if current_user.role != SUPER and space_id:
            members = MemberModel(group_id=current_user.last_space).members()
            user_ids = members['user_ids']

        user_model = UserModel()
        user_list, count = user_model.list(uids=user_ids,
                                           page=page,
                                           size=size,
                                           space_id=space_id,
                                           kw=kw)
        filters = {'username': ['线上', '线下'], 'status': ['正常', '禁用']}
        return self.list_json(list=user_list,
                              count=count,
                              table=self.table(filters),
                              enable_create=permission.role_upper_master())
Beispiel #4
0
    def item(self, group_id):
        """
        获取某个用户组
        /group/<int:group_id>

        :param group_id:
        :return:
        """
        ## sqlalchemy版本
        group_model = MemberModel()
        group = group_model.members(group_id=group_id)
        if group:
            return self.render_json(data=group)
        return self.render_json(code=-1)

        ## mixin 版本
        group_model = TagModel().get_by_id(group_id)
        if not group_model:
            return self.render_json(code=-1)

        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=group_model.users)

        group_info = group_model.to_dict()
        group_info['members'] = user_info
        group_info['users'] = len(user_info)
        group_info['group_name'] = group_info['name']
        group_info['group_id'] = group_info['id']
        return self.render_json(data=group_info)
Beispiel #5
0
    def switch(self, space_id):
        session['space_id'] = space_id

        # TODO
        current_user.last_space = space_id
        current_user.save()
        UserModel.fresh_session()
        return self.render_json()
Beispiel #6
0
    def switch(self, space_id):
        session['space_id'] = space_id

        # TODO
        current_user.last_space = space_id
        current_user.save()
        UserModel.fresh_session()
        return self.render_json()
Beispiel #7
0
    def members(self,
                group_id=None,
                project_id=None,
                page=1,
                size=10,
                kw=None):
        """
        获取单条记录
        :param role_id:
        :return:
        """
        group_id = group_id if group_id else self.group_id
        project_id = project_id if project_id else self.project_id
        source_id = group_id if group_id else project_id
        source_type = self.source_type_group if group_id else self.source_type_project
        filters = {
            'status': {
                'nin': [self.status_remove]
            },
            'source_id': {
                '=': source_id
            },
            'source_type': {
                '=': source_type
            },
        }
        # if kw:
        #     filters['email'] = {'like': kw}

        # TODO
        groups, count = MemberModel.query_paginate(page=page,
                                                   limit=size,
                                                   filter_name_dict=filters)

        user_ids = []
        user_role = members = {}
        current_app.logger.info(groups)

        for group_info in groups:
            user_ids.append(group_info.user_id)
            # TODO
            user_role[group_info.user_id] = group_info.access_level

        current_app.logger.info(user_ids)
        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=set(user_ids))
        if user_info:
            for user in user_info:
                if user_role.has_key(user['id']):
                    user['role'] = user_role[user['id']]

        members['user_ids'] = user_ids
        members['members'] = user_info
        members['count'] = count
        return members
Beispiel #8
0
    def members_new(self, group_id=None, project_id=None, page=1, size=10, kw=None):
        """
        获取单条记录
        :param role_id:
        :return:
        """
        group_id = group_id if group_id else self.group_id
        project_id = project_id if project_id else self.project_id
        source_id = group_id if group_id else project_id
        source_type = self.source_type_group if group_id else self.source_type_project
        query = self.query.filter(MemberModel.source_id == source_id).filter(MemberModel.source_type == source_type)
        query = query.join(UserModel, UserModel.id == MemberModel.user_id)
        if kw:
            query = query.filter(or_(UserModel.username.like('%' + kw + '%'), UserModel.email.like('%' + kw + '%')))

        query = query.add_columns(UserModel.username)

        count = query.count()
        data = query.order_by(MemberModel.id.asc()).offset(int(size) * int(page)).limit(size).all()

        list = []
        for p in data:
            item = p[0].to_json()
            item['username'] = p[1]
            list.append(item)

        return list, count

        # TODO
        groups, count = MemberModel.query_paginate(page=page, limit=size, filter_name_dict=filters)

        user_ids = []
        user_role = members = {}
        current_app.logger.info(groups)

        for group_info in groups:
            user_ids.append(group_info.user_id)
            # TODO
            user_role[group_info.user_id] = group_info.access_level

        current_app.logger.info(user_ids)
        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=set(user_ids))
        if user_info:
            for user in user_info:
                if user_role.has_key(user['id']):
                    user['role'] = user_role[user['id']]

        members['user_ids'] = user_ids
        members['members'] = user_info
        members['count'] = count
        return members
Beispiel #9
0
    def create_user(self):
        form = RegistrationForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            user_info = form.form2dict()
            # add user
            user = UserModel().add(user_info)
            # send an email
            message = u"""Hi, %s
                    <br> <br>Welcome to walle, it cost a lot of time and lock to meet you, enjoy it : )
                    <br><br>name: %s<br>password: %s""" \
                              % (user.username, user.email, form.password.data)
            emails.send_email(user.email, 'Welcome to walle', message, '')

            return self.render_json(data=user.item(user_id=user.id))
        return self.render_error(code=Code.form_error, message=form.errors)
Beispiel #10
0
    def create_user(self):
        form = RegistrationForm(request.form, csrf=False)
        if form.validate_on_submit():
            user_info = form.form2dict()
            # add user
            user = UserModel().add(user_info)
            # send an email
            message = """Hi, %s
                    <br> <br>Welcome to walle, it cost a lot of time and lock to meet you, enjoy it : )
                    <br><br>name: %s<br>password: %s""" \
                              % (user.username, user.email, form.password.data)
            emails.send_email(user.email, 'Welcome to walle', message, '')

            return self.render_json(data=user.item(user_id=user.id))
        return self.render_error(code=Code.form_error, message=form.errors)
Beispiel #11
0
 def to_json(self):
     item = {
         'id': self.id,
         'user_id': self.user_id,
         'name': self.name,
         'environment_id': self.environment_id,
         'space_id': self.space_id,
         'status': self.status,
         'master': UserModel.fetch_by_uid(self.master.split(',')) if self.master else '',
         'version': self.version,
         'excludes': self.excludes,
         'target_user': self.target_user,
         'target_port': self.target_port,
         'target_root': self.target_root,
         'target_releases': self.target_releases,
         'server_ids': self.server_ids,
         'task_vars': self.task_vars,
         'prev_deploy': self.prev_deploy,
         'post_deploy': self.post_deploy,
         'prev_release': self.prev_release,
         'post_release': self.post_release,
         'keep_version_num': self.keep_version_num,
         'repo_url': self.repo_url,
         'repo_username': self.repo_username,
         'repo_password': self.repo_password,
         'repo_mode': self.repo_mode,
         'repo_type': self.repo_type,
         'notice_type': self.notice_type,
         'notice_hook': self.notice_hook,
         'enable_audit': self.enable_audit,
         'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
         'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
     }
     item.update(self.enable())
     return item
Beispiel #12
0
 def to_json(self):
     item = {
         'id': self.id,
         'user_id': self.user_id,
         'name': self.name,
         'environment_id': self.environment_id,
         'space_id': self.space_id,
         'status': self.status,
         'master': UserModel.fetch_by_uid(self.master.split(',')) if self.master else '',
         'version': self.version,
         'excludes': self.excludes,
         'is_include': self.is_include,
         'target_root': self.target_root,
         'target_releases': self.target_releases,
         'server_ids': self.server_ids,
         'task_vars': self.task_vars,
         'prev_deploy': self.prev_deploy,
         'post_deploy': self.post_deploy,
         'prev_release': self.prev_release,
         'post_release': self.post_release,
         'keep_version_num': self.keep_version_num,
         'repo_url': self.repo_url,
         'repo_username': self.repo_username,
         'repo_password': self.repo_password,
         'repo_mode': self.repo_mode,
         'repo_type': self.repo_type,
         'notice_type': self.notice_type,
         'notice_hook': self.notice_hook,
         'task_audit': self.task_audit,
         'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
         'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
     }
     item.update(self.enable())
     return item
Beispiel #13
0
    def post(self, user_id=None, action=None):
        """
        create user
        /user/

        :return:
        """
        super(UserAPI, self).post()

        if action and action == 'avatar':
            return self.avatar(user_id)

        form = RegistrationForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            user = UserModel().add(form.form2dict())
            return self.render_json(data=user.item(user_id=user.id))
        return self.render_json(code=-1, message=form.errors)
Beispiel #14
0
    def post(self, user_id=None, action=None):
        """
        create user
        /user/

        :return:
        """
        super(UserAPI, self).post()

        if action and action == 'avatar':
            return self.avatar(user_id)

        form = RegistrationForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            user = UserModel().add(form.form2dict())
            return self.render_json(data=user.item(user_id=user.id))
        return self.render_json(code=-1, message=form.errors)
Beispiel #15
0
    def members(self, group_id=None, project_id=None, page=1, size=10, kw=None):
        """
        获取单条记录
        :param role_id:
        :return:
        """
        group_id = group_id if group_id else self.group_id
        project_id = project_id if project_id else self.project_id
        source_id = group_id if group_id else project_id
        source_type = self.source_type_group if group_id else self.source_type_project
        filters = {
            'status': {'nin': [self.status_remove]},
            'source_id': {'=': source_id},
            'source_type': {'=': source_type},
        }
        # if kw:
        #     filters['email'] = {'like': kw}

        # TODO
        groups, count = MemberModel.query_paginate(page=page, limit=size, filter_name_dict=filters)

        user_ids = []
        user_role = members = {}
        current_app.logger.info(groups)

        for group_info in groups:
            user_ids.append(group_info.user_id)
            # TODO
            user_role[group_info.user_id] = group_info.access_level

        current_app.logger.info(user_ids)
        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=set(user_ids))
        if user_info:
            for user in user_info:
                if user_role.has_key(user['id']):
                    user['role'] = user_role[user['id']]

        members['user_ids'] = user_ids
        members['members'] = user_info
        members['count'] = count
        return members
Beispiel #16
0
    def create_user(self):
        form = RegistrationForm(request.form, csrf=False)
        if form.validate_on_submit():
            user_info = form.form2dict()
            # add user
            user = UserModel().add(user_info)
            # send an email
            message = """Hi, %s
                    <br> <br>Welcome to walle, it cost a lot of time and lock to meet you, enjoy it : )
                    <br><br>name: %s<br>password: %s""" \
                              % (user.username, user.email, form.password.data)

            try:
                emails.send_email(user.email, 'Welcome to walle', message, '')
            except Exception as e:
                # todo, response error message to the front.
                current_app.logger.warning(e)

            return self.render_json(data=user.item(user_id=user.id))
        return self.render_error(code=Code.form_error, message=form.errors)
Beispiel #17
0
    def item(self, user_id):
        """
        获取某个用户

        :param user_id:
        :return:
        """

        user_info = UserModel(id=user_id).item()
        if not user_info:
            return self.render_json(code=-1)
        return self.render_json(data=user_info)
Beispiel #18
0
    def delete(self, user_id):
        """
        remove a user with his group relation
        /user/<int:user_id>

        :param user_id:
        :return:
        """
        super(UserAPI, self).delete()

        UserModel(id=user_id).remove()
        MemberModel().remove(user_id=user_id)
        return self.render_json(message='')
Beispiel #19
0
 def menu(self):
     role = SUPER if current_user.role == SUPER else ROLE_ACCESS[session['space_info']['role']]
     user = UserModel(id=current_user.id).item()
     menu = MenuModel().menu(role=role)
     space = {
         'current': '',
         'available': '',
     }
     UserModel.fresh_session()
     # TODO
     # 超管不需要展示空间列表
     if current_user.role != SUPER:
         space = {
             'current': session['space_info'],
             'available': session['space_list'],
         }
     data = {
         'user': user,
         'menu': menu,
         'space': space,
     }
     return self.render_json(data=data)
Beispiel #20
0
    def put(self, user_id, action=None):
        """
        edit user
        /user/<int:user_id>

        :return:
        """
        super(UserAPI, self).put()

        if action:
            if action in self.actions:
                self_action = getattr(self, action.lower(), None)
                return self_action(user_id=user_id)
            else:
                abort(404)

        form = UserUpdateForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            user = UserModel(id=user_id)
            user.update_name_pwd(username=form.username.data, password=form.password.data)
            return self.render_json(data=user.item())

        return self.render_json(code=-1, message=form.errors)
Beispiel #21
0
 def menu(self):
     role = SUPER if current_user.role == SUPER else ROLE_ACCESS[
         session['space_info']['role']]
     user = UserModel(id=current_user.id).item()
     menu = MenuModel().menu(role=role)
     space = {
         'current': '',
         'available': '',
     }
     UserModel.fresh_session()
     # TODO
     # 超管不需要展示空间列表
     if current_user.role != SUPER:
         space = {
             'current': session['space_info'],
             'available': session['space_list'],
         }
     data = {
         'user': user,
         'menu': menu,
         'space': space,
     }
     return self.render_json(data=data)
Beispiel #22
0
    def put(self, user_id, action=None):
        """
        edit user
        /user/<int:user_id>

        :return:
        """
        super(UserAPI, self).put()

        if action:
            if action in self.actions:
                self_action = getattr(self, action.lower(), None)
                return self_action(user_id=user_id)
            else:
                abort(404)

        form = UserUpdateForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            user = UserModel(id=user_id)
            user.update_name_pwd(username=form.username.data, password=form.password.data)
            return self.render_json(data=user.item())

        return self.render_json(code=-1, message=form.errors)
Beispiel #23
0
    def avatar(self, user_id):
        random = generate_password_hash(str(user_id))
        fname = random[-10:] + '.jpg'
        current_app.logger.info(fname)

        f = request.files['avatar']
        # todo rename to uid relation
        # fname = secure_filename(f.filename)
        # TODO try
        ret = f.save(os.path.join(current_app.config['UPLOAD_AVATAR'], fname))
        user = UserModel.query.get(user_id)
        user.avatar = fname
        user.save()
        return self.render_json(data={
            'avatar': UserModel.avatar_url(user.avatar),
        })
Beispiel #24
0
    def list(self, page=0, size=10, kw=None):
        """
        获取分页列表
        :param page:
        :param size:
        :return:
        """
        query = self.query.filter(SpaceModel.status.notin_([self.status_remove]))
        if kw:
            query = query.filter(SpaceModel.name.like('%' + kw + '%'))

        # TODO 如果是超管,可以全量,否则需要过滤自己有权限的空间列表
        if current_user.role != SUPER:
            query = query.filter_by(user_id=current_user.id)
        count = query.count()
        data = query.order_by(SpaceModel.id.desc()).offset(int(size) * int(page)).limit(size).all()

        uid2name = UserModel.uid2name(data=data)
        list = [p.to_json(uid2name) for p in data]
        return list, count
Beispiel #25
0
 def menu(self):
     role = 10
     user = UserModel(id=current_user.id).item()
     menu = MenuModel().menu(role=role)
     space = {
         'current': '',
         'available': '',
     }
     # TODO
     # 超管不需要展示空间列表
     if current_user.role <> SUPER:
         space = {
             'current': session['space_info'],
             'available': session['space_list'],
         }
     data = {
         'user': user,
         'menu': menu,
         'space': space,
     }
     return self.render_json(data=data)
Beispiel #26
0
 def test_base_fetch(self):
     u = UserModel.get_by_id(1)
Beispiel #27
0
 def test_base_fetch(self):
     u = UserModel.get_by_id(1)
Beispiel #28
0
 def active(self, user_id):
     user = UserModel(id=user_id)
     user.block_active(UserModel.status_active)
     return self.render_json(data=user.item())
Beispiel #29
0
 def test_add(self):
     self.user_super_login['role'] = SUPER
     self.user_super_login['password'] = generate_password_hash(self.user_super_login['password'])
     user = UserModel(**self.user_super_login)
     user.save()
Beispiel #30
0
 def test_fetch(self):
     u = UserModel.get_by_id(2)
Beispiel #31
0
 def active(self, user_id):
     user = UserModel(id=user_id)
     user.block_active(UserModel.status_active)
     return self.render_json(data=user.item())
 def test_fetch(self):
     u = UserModel.get_by_id(2)
Beispiel #33
0
 def test_add_owner(self):
     self.user_owner_login['role'] = OWNER
     self.user_owner_login['password'] = generate_password_hash(self.user_owner_login['password'])
     user = UserModel(**self.user_owner_login)
     user.save()
Beispiel #34
0
    def login(self):
        """
        user login
        /passport/

        :return:
        """
        form = LoginForm(request.form, csrf=False)
        if form.validate_on_submit():

            if current_app.config['LDAP']:
                ldap = LDAP(current_app)
                if form.password.data == '':
                    userbind = None
                else:
                    userbind = ldap.bind_user(form.email.data,
                                              form.password.data)
            else:
                ldap = current_app.config['LDAP']
                userbind = None

            if form.email.data in current_app.config['LDAP_PRIVILEGE']:
                ldap = False

            if ldap:
                if userbind:
                    user = UserModel.query.filter_by(
                        email=form.email.data).first()
                    if user is not None:
                        login_user(user)
                        user.fresh_session()
                        return self.render_json(data=current_user.to_json())
                    else:
                        # ldap验证成功,取信息入库
                        ldap_user = ldap.get_object_details(form.email.data)
                        user_info = {
                            'username': ldap_user['displayName'][0].decode(),
                            'password':
                            generate_password_hash(form.password.data),
                            'email': form.email.data,
                            'role': '',
                            'last_space': 1,
                            'created_at': datetime.now(),
                            'updated_at': datetime.now(),
                        }
                        user = UserModel().add(user_info)

                        member_info = {
                            'user_id': user.id,
                            'source_id': 1,
                            'source_type': 'group',
                            'access_level': 'DEVELOPER',
                            'status': MemberModel.status_available
                        }
                        m = MemberModel(**member_info)
                        db.session.add(m)
                        db.session.commit()

                        login_user(user)
                        user.fresh_session()
                        return self.render_json(data=current_user.to_json())
                else:
                    return self.render_json(code=Code.error_pwd,
                                            data=form.errors)
            else:
                user = UserModel.query.filter_by(email=form.email.data).first()
                if user is not None and user.verify_password(
                        form.password.data):
                    login_user(user)
                    user.fresh_session()
                    return self.render_json(data=current_user.to_json())

        return self.render_json(code=Code.error_pwd, data=form.errors)
Beispiel #35
0
 def test_add_owner(self):
     self.user_owner_login['role'] = OWNER
     self.user_owner_login['password'] = generate_password_hash(
         self.user_owner_login['password'])
     user = UserModel(**self.user_owner_login)
     user.save()
Beispiel #36
0
    def test_add(self):

        self.user_data_login['password'] = generate_password_hash(
            user_data_login['password'])
        user = UserModel(**self.user_data_login)
        user.save()
Beispiel #37
0
    def members_new(self,
                    group_id=None,
                    project_id=None,
                    page=1,
                    size=10,
                    kw=None):
        """
        获取单条记录
        :param role_id:
        :return:
        """
        group_id = group_id if group_id else self.group_id
        project_id = project_id if project_id else self.project_id
        source_id = group_id if group_id else project_id
        source_type = self.source_type_group if group_id else self.source_type_project
        query = self.query.filter(MemberModel.source_id == source_id).filter(
            MemberModel.source_type == source_type)
        query = query.join(UserModel, UserModel.id == MemberModel.user_id)
        if kw:
            query = query.filter(
                or_(UserModel.username.like('%' + kw + '%'),
                    UserModel.email.like('%' + kw + '%')))

        query = query.add_columns(UserModel.username)

        count = query.count()
        data = query.order_by(MemberModel.id.asc()).offset(
            int(size) * int(page)).limit(size).all()

        list = []
        for p in data:
            item = p[0].to_json()
            item['username'] = p[1]
            list.append(item)

        return list, count

        # TODO
        groups, count = MemberModel.query_paginate(page=page,
                                                   limit=size,
                                                   filter_name_dict=filters)

        user_ids = []
        user_role = members = {}
        current_app.logger.info(groups)

        for group_info in groups:
            user_ids.append(group_info.user_id)
            # TODO
            user_role[group_info.user_id] = group_info.access_level

        current_app.logger.info(user_ids)
        user_model = UserModel()
        user_info = user_model.fetch_by_uid(uids=set(user_ids))
        if user_info:
            for user in user_info:
                if user_role.has_key(user['id']):
                    user['role'] = user_role[user['id']]

        members['user_ids'] = user_ids
        members['members'] = user_info
        members['count'] = count
        return members