from flask import request, Response from flask_restful import Resource from werkzeug.exceptions import NotFound import services from controllers.files import api from libs.exception import BaseHTTPException from services.file_service import FileService from services.account_service import TenantService 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) 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: raise NotFound(f'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//image-preview') api.add_resource(WorkspaceWebappLogoApi, '/files/workspaces//webapp-logo') class UnsupportedFileTypeError(BaseHTTPException): error_code = 'unsupported_file_type' description = "File type not allowed." code = 415