mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 10:53:02 +00:00 
			
		
		
		
	
		
			
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from flask import request | ||
|  | from flask_restful import Resource, marshal_with  # type: ignore | ||
|  | from werkzeug.exceptions import Forbidden | ||
|  | 
 | ||
|  | import services | ||
|  | from controllers.console.wraps import setup_required | ||
|  | from controllers.files import api | ||
|  | from controllers.files.error import UnsupportedFileTypeError | ||
|  | from controllers.inner_api.plugin.wraps import get_user | ||
|  | from controllers.service_api.app.error import FileTooLargeError | ||
|  | from core.file.helpers import verify_plugin_file_signature | ||
|  | from fields.file_fields import file_fields | ||
|  | from services.file_service import FileService | ||
|  | 
 | ||
|  | 
 | ||
|  | class 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, 201 | ||
|  | 
 | ||
|  | 
 | ||
|  | api.add_resource(PluginUploadFileApi, "/files/upload/for-plugin") |