| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | from flask import requestfrom flask_restful import Resource, marshal_with  # type: ignorefrom werkzeug.exceptions import Forbiddenimport servicesfrom controllers.console.wraps import setup_requiredfrom controllers.files import apifrom controllers.files.error import UnsupportedFileTypeErrorfrom controllers.inner_api.plugin.wraps import get_userfrom controllers.service_api.app.error import FileTooLargeErrorfrom core.file.helpers import verify_plugin_file_signaturefrom fields.file_fields import file_fieldsfrom services.file_service import FileServiceclass PluginUploadFileApi(Resource):    @setup_required    @marshal_with(file_fields)    def post(self):        # get file from request        file = request.files["file"]        timestamp = request.args.get("timestamp")        nonce = request.args.get("nonce")        sign = request.args.get("sign")        tenant_id = request.args.get("tenant_id")        if not tenant_id:            raise Forbidden("Invalid request.")        user_id = request.args.get("user_id")        user = get_user(tenant_id, user_id)        filename = file.filename        mimetype = file.mimetype        if not filename or not mimetype:            raise Forbidden("Invalid request.")        if not timestamp or not nonce or not sign:            raise Forbidden("Invalid request.")        if not verify_plugin_file_signature(            filename=filename,            mimetype=mimetype,            tenant_id=tenant_id,            user_id=user_id,            timestamp=timestamp,            nonce=nonce,            sign=sign,        ):            raise Forbidden("Invalid request.")        try:            upload_file = FileService.upload_file(                filename=filename,                content=file.read(),                mimetype=mimetype,                user=user,                source=None,            )        except services.errors.file.FileTooLargeError as file_too_large_error:            raise FileTooLargeError(file_too_large_error.description)        except services.errors.file.UnsupportedFileTypeError:            raise UnsupportedFileTypeError()        return upload_file, 201api.add_resource(PluginUploadFileApi, "/files/upload/for-plugin")
 |