image_preview.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import services
  2. from controllers.files import api
  3. from flask import Response, request
  4. from flask_restful import Resource
  5. from libs.exception import BaseHTTPException
  6. from services.account_service import TenantService
  7. from services.file_service import FileService
  8. from werkzeug.exceptions import NotFound
  9. class ImagePreviewApi(Resource):
  10. def get(self, file_id):
  11. file_id = str(file_id)
  12. timestamp = request.args.get('timestamp')
  13. nonce = request.args.get('nonce')
  14. sign = request.args.get('sign')
  15. if not timestamp or not nonce or not sign:
  16. return {'content': 'Invalid request.'}, 400
  17. try:
  18. generator, mimetype = FileService.get_image_preview(
  19. file_id,
  20. timestamp,
  21. nonce,
  22. sign
  23. )
  24. except services.errors.file.UnsupportedFileTypeError:
  25. raise UnsupportedFileTypeError()
  26. return Response(generator, mimetype=mimetype)
  27. class WorkspaceWebappLogoApi(Resource):
  28. def get(self, workspace_id):
  29. workspace_id = str(workspace_id)
  30. custom_config = TenantService.get_custom_config(workspace_id)
  31. webapp_logo_file_id = custom_config.get('replace_webapp_logo') if custom_config is not None else None
  32. if not webapp_logo_file_id:
  33. raise NotFound(f'webapp logo is not found')
  34. try:
  35. generator, mimetype = FileService.get_public_image_preview(
  36. webapp_logo_file_id,
  37. )
  38. except services.errors.file.UnsupportedFileTypeError:
  39. raise UnsupportedFileTypeError()
  40. return Response(generator, mimetype=mimetype)
  41. api.add_resource(ImagePreviewApi, '/files/<uuid:file_id>/image-preview')
  42. api.add_resource(WorkspaceWebappLogoApi, '/files/workspaces/<uuid:workspace_id>/webapp-logo')
  43. class UnsupportedFileTypeError(BaseHTTPException):
  44. error_code = 'unsupported_file_type'
  45. description = "File type not allowed."
  46. code = 415