| 
									
										
										
										
											2024-01-12 12:34:01 +08:00
										 |  |  | from flask import Response, request | 
					
						
							|  |  |  | from flask_restful import Resource | 
					
						
							| 
									
										
										
										
											2024-02-06 13:21:13 +08:00
										 |  |  | from werkzeug.exceptions import NotFound | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import services | 
					
						
							|  |  |  | from controllers.files import api | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  | from libs.exception import BaseHTTPException | 
					
						
							| 
									
										
										
										
											2023-12-18 16:25:37 +08:00
										 |  |  | from services.account_service import TenantService | 
					
						
							| 
									
										
										
										
											2024-01-12 12:34:01 +08:00
										 |  |  | from services.file_service import FileService | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ImagePreviewApi(Resource): | 
					
						
							|  |  |  |     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, | 
					
						
							|  |  |  |                 timestamp, | 
					
						
							|  |  |  |                 nonce, | 
					
						
							|  |  |  |                 sign | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         except services.errors.file.UnsupportedFileTypeError: | 
					
						
							|  |  |  |             raise UnsupportedFileTypeError() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return Response(generator, mimetype=mimetype) | 
					
						
							| 
									
										
										
										
											2023-12-18 16:25:37 +08:00
										 |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class 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: | 
					
						
							| 
									
										
										
										
											2024-02-08 14:11:10 +08:00
										 |  |  |             raise NotFound('webapp logo is not found') | 
					
						
							| 
									
										
										
										
											2023-12-18 16:25:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             generator, mimetype = FileService.get_public_image_preview( | 
					
						
							|  |  |  |                 webapp_logo_file_id, | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         except services.errors.file.UnsupportedFileTypeError: | 
					
						
							|  |  |  |             raise UnsupportedFileTypeError() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return Response(generator, mimetype=mimetype) | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | api.add_resource(ImagePreviewApi, '/files/<uuid:file_id>/image-preview') | 
					
						
							| 
									
										
										
										
											2023-12-18 16:25:37 +08:00
										 |  |  | api.add_resource(WorkspaceWebappLogoApi, '/files/workspaces/<uuid:workspace_id>/webapp-logo') | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class UnsupportedFileTypeError(BaseHTTPException): | 
					
						
							|  |  |  |     error_code = 'unsupported_file_type' | 
					
						
							|  |  |  |     description = "File type not allowed." | 
					
						
							|  |  |  |     code = 415 |