image_preview.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from flask import Response, request
  2. from flask_restful import Resource
  3. from werkzeug.exceptions import NotFound
  4. import services
  5. from controllers.files import api
  6. from controllers.files.error import UnsupportedFileTypeError
  7. from services.account_service import TenantService
  8. from services.file_service import FileService
  9. class ImagePreviewApi(Resource):
  10. """
  11. Deprecated
  12. """
  13. def get(self, file_id):
  14. file_id = str(file_id)
  15. timestamp = request.args.get("timestamp")
  16. nonce = request.args.get("nonce")
  17. sign = request.args.get("sign")
  18. if not timestamp or not nonce or not sign:
  19. return {"content": "Invalid request."}, 400
  20. try:
  21. generator, mimetype = FileService.get_image_preview(
  22. file_id=file_id,
  23. timestamp=timestamp,
  24. nonce=nonce,
  25. sign=sign,
  26. )
  27. except services.errors.file.UnsupportedFileTypeError:
  28. raise UnsupportedFileTypeError()
  29. return Response(generator, mimetype=mimetype)
  30. class FilePreviewApi(Resource):
  31. def get(self, file_id):
  32. file_id = str(file_id)
  33. timestamp = request.args.get("timestamp")
  34. nonce = request.args.get("nonce")
  35. sign = request.args.get("sign")
  36. if not timestamp or not nonce or not sign:
  37. return {"content": "Invalid request."}, 400
  38. try:
  39. generator, mimetype = FileService.get_signed_file_preview(
  40. file_id=file_id,
  41. timestamp=timestamp,
  42. nonce=nonce,
  43. sign=sign,
  44. )
  45. except services.errors.file.UnsupportedFileTypeError:
  46. raise UnsupportedFileTypeError()
  47. return Response(generator, mimetype=mimetype)
  48. class WorkspaceWebappLogoApi(Resource):
  49. def get(self, workspace_id):
  50. workspace_id = str(workspace_id)
  51. custom_config = TenantService.get_custom_config(workspace_id)
  52. webapp_logo_file_id = custom_config.get("replace_webapp_logo") if custom_config is not None else None
  53. if not webapp_logo_file_id:
  54. raise NotFound("webapp logo is not found")
  55. try:
  56. generator, mimetype = FileService.get_public_image_preview(
  57. webapp_logo_file_id,
  58. )
  59. except services.errors.file.UnsupportedFileTypeError:
  60. raise UnsupportedFileTypeError()
  61. return Response(generator, mimetype=mimetype)
  62. api.add_resource(ImagePreviewApi, "/files/<uuid:file_id>/image-preview")
  63. api.add_resource(FilePreviewApi, "/files/<uuid:file_id>/file-preview")
  64. api.add_resource(WorkspaceWebappLogoApi, "/files/workspaces/<uuid:workspace_id>/webapp-logo")