Ejemplo n.º 1
0
 def delete(self, name):
     cli = Fdfs_client(self.conf_path)
     if not isinstance(name, bytes):
         name = name.encode()
     try:
         result = cli.delete_file(name)
     except FDFSError as e:
         raise errors.Error(errmsg=f'从FastDFS删除文件{name}失败:') from e
     logger.debug(f'FastDFS delete: {result}')
     if result[0] != 'Delete file successed.':
         raise errors.Error(errmsg=f'FastDFS删除文件{name}失败: {result}')
Ejemplo n.º 2
0
 def download(self, name):
     cli = Fdfs_client(self.conf_path)
     if not isinstance(name, bytes):
         name = name.encode()
     try:
         result = cli.download_to_buffer(name)
     except FDFSError as e:
         raise errors.Error(errmsg=f'从FastDFS下载文件{name}失败:') from e
     # logger.debug(f'FastDFS download: {result}')
     content = result.get('Content')
     # remote_file_id = result.get('Remote file_id')
     # storage_ip = result.get('Storage IP')
     # size = result.get('Download size')
     return aes_decrypt(content, key=CONFIG.FILE_SECRET, a2b=False)
Ejemplo n.º 3
0
 def save(self, user=None, *args, **kwargs):
     user = user or getattr(g, 'user', None)
     if user is None:
         raise errors.Error(errmsg='User is required')
     if 'created_by' in [c.name for c in self.__table__.columns]:
         self.created_by = user.user_id
     try:
         with db.auto_commit_db():
             db.session.add(self)
     except sqlalchemy.exc.IntegrityError as e:
         if e.orig.args[0] == 1062:
             raise errors.DBParamValueDuplicate(errmsg=e)
         raise errors.DBStatementError(errmsg=e)
     except sqlalchemy.exc.StatementError as e:
         raise errors.DBStatementError(errmsg=e)
Ejemplo n.º 4
0
 def upload(self, content, ext_name=None):
     cli = Fdfs_client(self.conf_path)
     if ext_name is not None:
         ext_name = ext_name.lstrip('.')
     fbuffer = aes_encrypt(content.read(), key=CONFIG.FILE_SECRET)
     result = cli.upload_by_buffer(fbuffer, file_ext_name=ext_name)
     logger.debug(f'FastDFS Upload: {result}')
     if result.get('Status') != 'Upload successed.':
         raise errors.Error(errmsg=f'上传文件到FastDFS失败: {result}')
     storage_ip = result.get('Storage IP')
     filename = result.get('Remote file_id')
     return {
         'filename': filename.decode(),
         'storage_ip': storage_ip.decode()
     }
Ejemplo n.º 5
0
 def update(self, data, user=None, *args, **kwargs):
     user = user or getattr(g, 'user', None)
     if user is None:
         raise errors.Error(errmsg='User is required')
     if 'updated_by' in [c.name for c in self.__table__.columns]:
         self.updated_by = user.user_id
     try:
         with db.auto_commit_db():
             for key, val in data.items():
                 if val is not None and hasattr(self, key):
                     setattr(self, key, val)
     except sqlalchemy.exc.IntegrityError as e:
         if e.orig.args[0] == 1062:
             raise errors.DBParamValueDuplicate(errmsg=e)
         raise errors.DBStatementError(errmsg=e)
     except sqlalchemy.exc.StatementError as e:
         raise errors.DBStatementError(errmsg=e)
Ejemplo n.º 6
0
 def on_exception(e):
     logger = logging.getLogger('on_exception')
     if isinstance(e, errors.Error):
         err = e
         logger.log(level=err.log_level, msg=err.log)
     elif (isinstance(e, werkzeug.exceptions.NotFound) and e.description
           == 'The requested URL was not found on the server. '
           'If you entered the URL manually '
           'please check your spelling and try again.'):
         err = errors.ResourceNotFound(
             errmsg=f'{e.description}:{request.path}')
         logger.log(level=err.log_level, msg=err.log)
     elif (isinstance(e, werkzeug.exceptions.MethodNotAllowed)
           and e.description == '405 Method Not Allowed: '
           'The method is not allowed for the requested URL.'):
         err = errors.MethodNotAllowed(
             errmsg=f'{e.description}:[{request.method}]{request.path}')
         logger.log(level=err.log_level, msg=err.log)
     else:
         err = errors.Error(errmsg=str(e))
         logger.log(level=err.log_level, msg=err.log, exc_info=e)
     return err.to_dict_response()
Ejemplo n.º 7
0
        def inner(*args, **kwargs):
            token = request.headers.get('token')
            api_key = request.headers.get('api_key')
            robot_id = request.headers.get('robot_id')
            if robot_required and robot_id is None:
                err = errors.RobotIdRequired()
                logger.log(level=err.log_level, msg=err.log)
                return err.to_dict_response()
            if token is not None:
                try:
                    g.user = authenticate_by_token(
                        token,
                        resource_name=resource_name,
                        permission_name=permission_name)
                    g.auth_method = 'token'
                except errors.Error as e:
                    logger.log(level=e.log_level, msg=e.log)
                    return e.to_dict_response()
                if not g.user.role:
                    err = errors.Error(errmsg='user`s role missing')
                    logger.log(level=err.log_level, msg=err.log)
                    return err.to_dict_response()

                if g.user.role.role_name not in required_roles:
                    err = errors.ResourceAccessForbidden(
                        errmsg='role forbidden')
                    logger.log(level=err.log_level, msg=err.log)
                    return err.to_dict_response()
            elif api_key is not None:
                try:
                    g.user = get_user_by_ak(api_key,
                                            resource_name=resource_name,
                                            permission_name=permission_name)
                    g.auth_method = 'ak'
                except errors.Error as e:
                    logger.log(level=e.log_level, msg=e.log)
                    return e.to_dict_response()

                if not g.user.role:
                    err = errors.Error(errmsg='user`s role missing')
                    logger.log(level=err.log_level, msg=err.log)
                    return err.to_dict_response()

                if g.user.role.role_name not in required_roles:
                    err = errors.ResourceAccessForbidden(
                        errmsg='role forbidden')
                    logger.log(level=err.log_level, msg=err.log)
                    return err.to_dict_response()
            elif robot_id is not None:
                try:
                    # g.robot = get_robot(robot_id)
                    g.user = None
                    if 'ip' not in request.headers:
                        err = errors.AuthParamsRequired(
                            errmsg='ip is required.')
                        logger.log(level=err.log_level, msg=err.log)
                        return err.to_dict_response()
                    if request.headers['ip'] != g.robot.ip:
                        err = errors.RobotInvalid(errmsg='Robot ip invalid')
                        logger.log(level=err.log_level, msg=err.log)
                        return err.to_dict_response()
                    g.auth_method = 'robot_id'
                except errors.RobotNotFound as e:
                    logger.log(level=e.log_level, msg=e.log)
                    return e.to_dict_response()
            else:
                err = errors.AuthParamsRequired()
                logger.log(level=err.log_level, msg=err.log)
                return err.to_dict_response()
            return func(*args, **kwargs)