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())
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)
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())
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()
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
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
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)
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)
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
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
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)
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
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)
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)
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='')
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)
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)
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)
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), })
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
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)
def test_base_fetch(self): u = UserModel.get_by_id(1)
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_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()
def test_fetch(self): u = UserModel.get_by_id(2)
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()
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)
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()
def test_add(self): self.user_data_login['password'] = generate_password_hash( user_data_login['password']) user = UserModel(**self.user_data_login) user.save()
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