123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from flask import Response
- from flask_restful import Resource, reqparse
- from werkzeug.exceptions import Forbidden, NotFound
- from controllers.files import api
- from core.tools.tool_file_manager import ToolFileManager
- from libs.exception import BaseHTTPException
- class ToolFilePreviewApi(Resource):
- def get(self, file_id, extension):
- file_id = str(file_id)
- parser = reqparse.RequestParser()
- parser.add_argument("timestamp", type=str, required=True, location="args")
- parser.add_argument("nonce", type=str, required=True, location="args")
- parser.add_argument("sign", type=str, required=True, location="args")
- args = parser.parse_args()
- if not ToolFileManager.verify_file(
- file_id=file_id,
- timestamp=args["timestamp"],
- nonce=args["nonce"],
- sign=args["sign"],
- ):
- raise Forbidden("Invalid request.")
- try:
- result = ToolFileManager.get_file_generator_by_tool_file_id(
- file_id,
- )
- if not result:
- raise NotFound("file is not found")
- generator, mimetype = result
- except Exception:
- raise UnsupportedFileTypeError()
- return Response(generator, mimetype=mimetype)
- api.add_resource(ToolFilePreviewApi, "/files/tools/<uuid:file_id>.<string:extension>")
- class UnsupportedFileTypeError(BaseHTTPException):
- error_code = "unsupported_file_type"
- description = "File type not allowed."
- code = 415
|