|  | @@ -1,5 +1,5 @@
 | 
											
												
													
														|  |  from flask import Response, request
 |  |  from flask import Response, request
 | 
											
												
													
														|  | -from flask_restful import Resource
 |  | 
 | 
											
												
													
														|  | 
 |  | +from flask_restful import Resource, reqparse
 | 
											
												
													
														|  |  from werkzeug.exceptions import NotFound
 |  |  from werkzeug.exceptions import NotFound
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import services
 |  |  import services
 | 
											
										
											
												
													
														|  | @@ -41,24 +41,39 @@ class FilePreviewApi(Resource):
 | 
											
												
													
														|  |      def get(self, file_id):
 |  |      def get(self, file_id):
 | 
											
												
													
														|  |          file_id = str(file_id)
 |  |          file_id = str(file_id)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        timestamp = request.args.get("timestamp")
 |  | 
 | 
											
												
													
														|  | -        nonce = request.args.get("nonce")
 |  | 
 | 
											
												
													
														|  | -        sign = request.args.get("sign")
 |  | 
 | 
											
												
													
														|  | 
 |  | +        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")
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        if not timestamp or not nonce or not sign:
 |  | 
 | 
											
												
													
														|  | 
 |  | +        args = parser.parse_args()
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        if not args["timestamp"] or not args["nonce"] or not args["sign"]:
 | 
											
												
													
														|  |              return {"content": "Invalid request."}, 400
 |  |              return {"content": "Invalid request."}, 400
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          try:
 |  |          try:
 | 
											
												
													
														|  | -            generator, mimetype = FileService.get_signed_file_preview(
 |  | 
 | 
											
												
													
														|  | 
 |  | +            generator, upload_file = FileService.get_file_generator_by_file_id(
 | 
											
												
													
														|  |                  file_id=file_id,
 |  |                  file_id=file_id,
 | 
											
												
													
														|  | -                timestamp=timestamp,
 |  | 
 | 
											
												
													
														|  | -                nonce=nonce,
 |  | 
 | 
											
												
													
														|  | -                sign=sign,
 |  | 
 | 
											
												
													
														|  | 
 |  | +                timestamp=args["timestamp"],
 | 
											
												
													
														|  | 
 |  | +                nonce=args["nonce"],
 | 
											
												
													
														|  | 
 |  | +                sign=args["sign"],
 | 
											
												
													
														|  |              )
 |  |              )
 | 
											
												
													
														|  |          except services.errors.file.UnsupportedFileTypeError:
 |  |          except services.errors.file.UnsupportedFileTypeError:
 | 
											
												
													
														|  |              raise UnsupportedFileTypeError()
 |  |              raise UnsupportedFileTypeError()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        return Response(generator, mimetype=mimetype)
 |  | 
 | 
											
												
													
														|  | 
 |  | +        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 response
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  class WorkspaceWebappLogoApi(Resource):
 |  |  class WorkspaceWebappLogoApi(Resource):
 |