| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | from flask import Response, requestfrom flask_restful import Resource, reqparse  # type: ignorefrom werkzeug.exceptions import NotFoundimport servicesfrom controllers.files import apifrom controllers.files.error import UnsupportedFileTypeErrorfrom services.account_service import TenantServicefrom services.file_service import FileServiceclass ImagePreviewApi(Resource):    """    Deprecated    """    def get(self, file_id):        file_id = str(file_id)        timestamp = request.args.get("timestamp")        nonce = request.args.get("nonce")        sign = request.args.get("sign")        if not timestamp or not nonce or not sign:            return {"content": "Invalid request."}, 400        try:            generator, mimetype = FileService.get_image_preview(                file_id=file_id,                timestamp=timestamp,                nonce=nonce,                sign=sign,            )        except services.errors.file.UnsupportedFileTypeError:            raise UnsupportedFileTypeError()        return Response(generator, mimetype=mimetype)class FilePreviewApi(Resource):    def get(self, file_id):        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")        parser.add_argument("as_attachment", type=bool, required=False, default=False, location="args")        args = parser.parse_args()        if not args["timestamp"] or not args["nonce"] or not args["sign"]:            return {"content": "Invalid request."}, 400        try:            generator, upload_file = FileService.get_file_generator_by_file_id(                file_id=file_id,                timestamp=args["timestamp"],                nonce=args["nonce"],                sign=args["sign"],            )        except services.errors.file.UnsupportedFileTypeError:            raise UnsupportedFileTypeError()        response = Response(            generator,            mimetype=upload_file.mime_type,            direct_passthrough=True,            headers={},        )        if upload_file.size > 0:            response.headers["Content-Length"] = str(upload_file.size)        if args["as_attachment"]:            response.headers["Content-Disposition"] = f"attachment; filename={upload_file.name}"        return responseclass WorkspaceWebappLogoApi(Resource):    def get(self, workspace_id):        workspace_id = str(workspace_id)        custom_config = TenantService.get_custom_config(workspace_id)        webapp_logo_file_id = custom_config.get("replace_webapp_logo") if custom_config is not None else None        if not webapp_logo_file_id:            raise NotFound("webapp logo is not found")        try:            generator, mimetype = FileService.get_public_image_preview(                webapp_logo_file_id,            )        except services.errors.file.UnsupportedFileTypeError:            raise UnsupportedFileTypeError()        return Response(generator, mimetype=mimetype)api.add_resource(ImagePreviewApi, "/files/<uuid:file_id>/image-preview")api.add_resource(FilePreviewApi, "/files/<uuid:file_id>/file-preview")api.add_resource(WorkspaceWebappLogoApi, "/files/workspaces/<uuid:workspace_id>/webapp-logo")
 |