def write_error(self, status_code, **kwargs): if isinstance(kwargs.get('exc_info')[1], CustomException): ce = kwargs.get('exc_info')[1] self.set_status(200) return self.json(Result(code=ce.code, msg=ce.msg)) else: return self.json(Result(code=status_code, msg="未知错误"))
def allow_user_login(self, uid): """ 允许指定用户登陆 """ try: self.userDAO.update_user_info(uid, is_valid='yes') return Result(code=0) except Exception as ex: raise UserException(code=11004)
def forbidden_user_login(self, uid): """ 禁止指定用户登陆 """ try: self.userDAO.update_user_info(uid, is_valid='no') return Result(code=0) except Exception as ex: raise UserException(code=11004)
def login(self, username=None, password=None): """ 判断用户是否允许登陆 """ user = self.userDAO.get_user_by_username(username) try: assert user is not None if user.is_valid == 'no': raise UserException(code=11000) if user.password == self.utils.md5(password): user.token = self.userDAO.make_token() data = user.columnitems data['token'] = user.token # 获取用的所有角色 data['roles'] = [] roles = self.userDAO.get_user_roles(user.id) if roles: data['roles'].extend([role.role for role in roles]) else: raise UserException(11012) self.userDAO.update_user_info(user.id, token=user.token) # 将token存到redis中 res = self.redis.setex(self.token_key(user.token), 24 * 60 * 60 * 30, data) return Result(code=0, data=data) else: raise UserException(code=11001) except AssertionError as ae: raise UserException(code=11002)
def user_add_roles(self, uid=None, roles=[]): """ 给用户新增角色 """ result = Result() objs = [] if len(roles) > 0: for role in roles: tmp = UserRoleDO() tmp.uid = uid tmp.role = role objs.append(tmp) del tmp self.userDAO.add_roles_for_user(objs) result.code = 0 else: raise UserException(code=11005) return result
def get_runs(self, id: int, user_id: int, from_timestamp: int = -1, to_timestamp: int = -1, group_id: int = 0, lang_id: int = -1, status_id: int = -1, statement_id: int = 0, count: int = 20, with_comment: str = '', page: int = 1) -> Result: """Получает посылки пользователя по ID Args: id (int): ID задачи user_id (int): ID пользователя from_timestamp (Any, optional): С какого времени. Defaults to -1. to_timestamp (Any, optional): По какое время. Defaults to -1. group_id (int, optional): ID группы. Defaults to 0. lang_id (int, optional): ID языка. Defaults to -1. status_id (int, optional): ID статуса. Defaults to -1. statement_id (int, optional): ID ???. Defaults to 0. count (int, optional): Количество. Defaults to 20. with_comment (str, optional): С комментарием. Defaults to ''. page (int, optional): Страница. Defaults to 1. Returns: Result: Результат операции (RunsList) """ req = self.send_request( 'filter', (id, user_id, from_timestamp, to_timestamp, group_id, lang_id, status_id, statement_id, count, with_comment, page)) return Result(req, RunsList())
def post(self, *args, **kwargs): loginname = self.post_arguments.get("loginname", None) nickname = self.post_arguments.get("nickname", None) password = self.post_arguments.get("password", None) password_ok = self.post_arguments.get("password_ok", None) is_valid = self.post_arguments.get("is_valid", None) if loginname is None: raise UserException(code=10001, desc="loginname不能为空") else: user = UserService().get_user_by_username(loginname) if user: raise UserException(code=11011) if nickname is None: raise UserException(code=10001, desc="nickname不能为空") if password is None: raise UserException(code=10001, desc="密码不能为空") if password != password_ok: raise UserException(code=10001, desc="两次密码不一致") UserService().add_user( loginname=loginname, nickname=nickname, password=password, is_valid=is_valid ) return Result(code=0)
def prepare(self): if self.request.method == 'OPTIONS': return self.options() # 非登录接口Token验证 if self.request.path not in ["/api/user/login"]: token = self.request.headers.get("X-Token", None) try: assert token is not None data = UserInfoService().getUserIdByTonken(token) if data is not None: #: 后期权限扩展处 :# self.userId = data['userId'] self.token = token else: raise CustomException(code=1001) except AssertionError as e: raise CustomException(code=1002) try: if self.request.body: self.post_arguments = json.loads( self.request.body.decode('utf-8')) except Exception as ex: return self.json(Result(code=300, msg=str(ex)))
def user_del_roles(self, uid=None, roles=[]): """ 用户除去指定角色 """ if len(roles) > 0: self.userDAO.user_del_roles(uid, roles) return Result(code=0) else: raise UserException(11006)
def post(self, *args, **kwargs): userName = self.post_arguments.get('userName', None) password = self.post_arguments.get('password', None) phone = self.post_arguments.get('phone', None) email = self.post_arguments.get('email', None) if userName and password and phone and email: return UserInfoService().addUserInfo(userName, password, phone, email) else: return Result(code=300, msg='账号与密码都不能为空')
def get_protocol(self, id: int) -> Result: """Получает протоколы проверки посылки Args: id (int): ID посылки Returns: Result: Результат операции (TestsList) """ req = self.send_request('protocol', id) return Result(req, TestsList())
def get_run(self, id: int) -> Result: """Получает исходный код посылки Args: id (int): ID посылки Returns: Result: Результат операции (SourceRun) """ req = self.send_request('source', id) return Result(req, SourceRun())
def addUserInfo(self, userName, password, phone, email): message = self.userInfoMapper.getUserInfoByPhoneOrEmail(phone=phone, email=email) if message: raise UserException(code=11011, desc=message) if phone.isdigit() is False or len(phone) != 11: raise UserException(code=11007) if re.match(r'^([\w]+\.*)([\w]+)\@[\w]+\.\w{3}(\.\w{2}|)$', email) is None: raise UserException(code=11008) self.userInfoMapper.addUserInfo(userName, self.utils.md5(password), phone, email) return Result(msg='用户添加完成')
def updUserInfoByUserId(self, userId, groupId=None, userName=None, password=None, phone=None, email=None): if password: password = self.utils.md5(password) if phone or email: userInfo = self.userInfoMapper.getUserInfo(userId) if phone != userInfo.phone or email != userInfo.email: msg = self.userInfoMapper.getUserInfoByPhoneOrEmail( phone=phone, email=email) if msg is not None: return Result(code=300, msg=msg) self.userInfoMapper.updUserInfoByUserId(userId, groupId=groupId, userName=userName, password=password, phone=phone, email=email) return Result(msg='更新完成')
def _deco(self, *args, **kwargs): res = func(self, *args, **kwargs) if isinstance(res, list) and len(res) > 0 and isinstance( res[0], AbstractKeyedTuple): res = [dict(zip(result.keys(), result)) for result in res] if isinstance(res, AbstractKeyedTuple): res = dict(zip(res.keys(), res)) if not isinstance(res, Result): res = Result(code=200, data=res) self.json(res)
def put(self, *args, **kwargs): groupId = self.post_arguments.get('groupId', None) userName = self.post_arguments.get('userName', None) password = self.post_arguments.get('password', None) phone = self.post_arguments.get('phone', None) email = self.post_arguments.get('email', None) if groupId or userName or password or phone or email: return UserInfoService().updUserInfoByUserId(self.userId, groupId=groupId, userName=userName, password=password, phone=phone, email=email) else: return Result(code=300, msg='没有需要更新得数据')
def userLogin(self, loginName, password): userInfo = self.userInfoMapper.getUserInfoByLoginName(loginName) if userInfo is None: raise UserException(code=11002) if userInfo.state == '2': raise UserException(code=11000) if userInfo.password == self.utils.md5(password): token = str(uuid.uuid1()) userId = self.userInfoMapper.updTokenByUserId( userId=userInfo.user_id, token=token) self.redis.setex(token, 24 * 60 * 60, {'userId': userId}) return Result(data={ 'token': token, 'userName': userInfo.user_name }, msg='登录成功') else: raise UserException(code=11001)
def submit_problem(self, id: int, file: str, lang_id: int) -> Result: """Отправляет заадчу на тестирование Args: id (int): ID file (str): Файл lang_id (int): ID языка Returns: Result: Результат операции (DataObject) """ f = open(file, 'rb') req = self.send_request('submit', id, 'post', {'lang_id': lang_id}, {'file': f}) f.close() return Result(req, DataObject())
def post(self, *args, **kwargs): loginname = self.post_arguments.get("loginname", None) nickname = self.post_arguments.get("nickname", None) password = self.post_arguments.get("password", None) checkPass = self.post_arguments.get("checkPass", None) is_valid = self.post_arguments.get("is_valid", None) if loginname is None: raise UserException(code=10001, desc="loginname不能为空") if nickname is None: raise UserException(code=10001, desc="nickname不能为空") if password is None: raise UserException(code=10001, desc="密码不能为空") if password != checkPass: raise UserException(code=10001, desc="两次密码不一致") UserService().add_user(loginname=loginname, nickname=nickname, password=password, is_valid=is_valid) return Result(code=0)
def logout(self, userId, token): if self.redis.delete(token): self.userInfoMapper.updTokenByUserId(userId, token=None) return Result(msg='退出成功') else: raise UserException(code=11003)
def logout(self, uid=None, token=None): if self.redis.delete(self.token_key(token)): self.userDAO.update_user_info(uid, token=None) return Result(code=0, msg="退出成功") else: raise UserException(code=11003)
def get_all_db(self): """ 查询所有数据库 """ res = self.toolDAO.get_all_db() return Result(code=0, data=res)
def get_all_tables(self, dbname=""): """ 指定数据库的所有表 """ res = self.toolDAO.get_all_tables(dbname) return Result(code=0, data=res)
def get_schema(self, dbname='', table='', superclass='', prefix="yes"): """ 指定数据库和表的schema """ res = self.toolDAO.get_schema(dbname, table) schema = [] columns = [] for x in res: schema.append({ 'table_name': x['TABLE_NAME'], 'data_type': x['DATA_TYPE'], 'is_nullable': x['IS_NULLABLE'].lower(), 'column_name': x['COLUMN_NAME'], 'default_value': x['COLUMN_DEFAULT'], 'extra': x['EXTRA'], 'column_key': x['COLUMN_KEY'], }) columns.append(x['COLUMN_NAME']) data = [] data.append("#!/usr/bin/env python") data.append("\n") data.append( "from .BaseDO import {superclass}".format(superclass=superclass)) data.append("from sqlalchemy import Column") data.append("from sqlalchemy.types import *") data.append("\n") data.append("\n") data.append("class {name}DO({superclass}):".format( name=self.toolDAO.get_schema_name(table, prefix), superclass=superclass)) data.append(" __tablename__='{table}'".format(table=table)) data.append("\n") fields = [] if schema: for x in schema: condition = [] condition.append( self.toolDAO.get_datatype_mapper(x['data_type'])) if x['column_key'] == 'PRI': condition.append("primary_key=True") if x['extra'] == 'auto_increment': condition.append("autoincrement=True") if x['is_nullable'] == 'yes': condition.append("nullable=True") else: condition.append("nullable=False") if x['default_value']: value = x["default_value"] if x['data_type'] in ('varchar', 'text'): value = "'{value}'".format(value=value) condition.append("default={value}".format(value=value)) fields.append({ "key": x["column_name"], "val": " {column_name} = Column({condition})".format( column_name=x["column_name"], condition=", ".join(condition)) }) return Result(code=0, data={ "data": data, "fields": fields, 'columns': columns, })
def _deco(self, *args, **kwargs): res = func(self, *args, **kwargs) if not isinstance(res, Result): res = Result(code=0, data=res) self.json(res)
def post(self, *args, **kwargs): loginName = self.post_arguments.get('loginName', None) password = self.post_arguments.get('passWord', None) if loginName is None or password is None: return Result(code=300, msg='账号与密码都不能为空') return UserInfoService().userLogin(loginName, password)
def get(self, *args, **kwargs): self.set_status(404) self.write(json.dumps(Result(code=404, msg="请求页面不存在!").json()))