예제 #1
0
 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="未知错误"))
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
    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)
예제 #5
0
    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())
예제 #6
0
파일: User.py 프로젝트: spaceack/pyadmin
 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)
예제 #7
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)))
예제 #8
0
 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)
예제 #9
0
 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='账号与密码都不能为空')
예제 #10
0
    def get_protocol(self, id: int) -> Result:
        """Получает протоколы проверки посылки

        Args:
            id (int): ID посылки

        Returns:
            Result: Результат операции (TestsList)
        """
        req = self.send_request('protocol', id)
        return Result(req, TestsList())
예제 #11
0
    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='更新完成')
예제 #14
0
    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)
예제 #15
0
 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='没有需要更新得数据')
예제 #16
0
 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 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)
예제 #18
0
    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())
예제 #19
0
    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)
예제 #21
0
 def get_all_db(self):
     """ 查询所有数据库 """
     res = self.toolDAO.get_all_db()
     return Result(code=0, data=res)
예제 #22
0
 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)
예제 #23
0
 def get_all_tables(self, dbname=""):
     """ 指定数据库的所有表 """
     res = self.toolDAO.get_all_tables(dbname)
     return Result(code=0, data=res)
예제 #24
0
    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,
                      })
예제 #25
0
    def _deco(self, *args, **kwargs):
        res = func(self, *args, **kwargs)
        if not isinstance(res, Result):
            res = Result(code=0, data=res)

        self.json(res)
예제 #26
0
 def get(self, *args, **kwargs):
     self.set_status(404)
     self.write(json.dumps(Result(code=404, msg="请求页面不存在!").json()))
예제 #27
0
 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)