|
22 | 22 | from plane.settings.storage import S3Storage |
23 | 23 | from plane.app.permissions import allow_permission, ROLE |
24 | 24 | from plane.utils.cache import invalidate_cache_directly |
| 25 | +from plane.utils.path_validator import sanitize_filename |
25 | 26 | from plane.bgtasks.storage_metadata_task import get_asset_object_metadata |
26 | 27 | from plane.throttles.asset import AssetRateThrottle |
27 | 28 |
|
@@ -108,7 +109,7 @@ def entity_asset_delete(self, entity_type, asset, request): |
108 | 109 |
|
109 | 110 | def post(self, request): |
110 | 111 | # get the asset key |
111 | | - name = request.data.get("name") |
| 112 | + name = sanitize_filename(request.data.get("name")) or "unnamed" |
112 | 113 | type = request.data.get("type", "image/jpeg") |
113 | 114 | size = int(request.data.get("size", settings.FILE_SIZE_LIMIT)) |
114 | 115 | entity_type = request.data.get("entity_type", False) |
@@ -313,7 +314,7 @@ def entity_asset_delete(self, entity_type, asset, request): |
313 | 314 |
|
314 | 315 | @allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST], level="WORKSPACE") |
315 | 316 | def post(self, request, slug): |
316 | | - name = request.data.get("name") |
| 317 | + name = sanitize_filename(request.data.get("name")) or "unnamed" |
317 | 318 | type = request.data.get("type", "image/jpeg") |
318 | 319 | size = int(request.data.get("size", settings.FILE_SIZE_LIMIT)) |
319 | 320 | entity_type = request.data.get("entity_type") |
@@ -515,7 +516,7 @@ def get_entity_id_field(self, entity_type, entity_id): |
515 | 516 |
|
516 | 517 | @allow_permission([ROLE.ADMIN, ROLE.MEMBER, ROLE.GUEST]) |
517 | 518 | def post(self, request, slug, project_id): |
518 | | - name = request.data.get("name") |
| 519 | + name = sanitize_filename(request.data.get("name")) or "unnamed" |
519 | 520 | type = request.data.get("type", "image/jpeg") |
520 | 521 | size = int(request.data.get("size", settings.FILE_SIZE_LIMIT)) |
521 | 522 | entity_type = request.data.get("entity_type", "") |
@@ -770,7 +771,8 @@ def post(self, request, slug, asset_id): |
770 | 771 | if not original_asset: |
771 | 772 | return Response({"error": "Asset not found"}, status=status.HTTP_404_NOT_FOUND) |
772 | 773 |
|
773 | | - destination_key = f"{workspace.id}/{uuid.uuid4().hex}-{original_asset.attributes.get('name')}" |
| 774 | + sanitized_name = sanitize_filename(original_asset.attributes.get("name")) or "unnamed" |
| 775 | + destination_key = f"{workspace.id}/{uuid.uuid4().hex}-{sanitized_name}" |
774 | 776 | duplicated_asset = FileAsset.objects.create( |
775 | 777 | attributes={ |
776 | 778 | "name": original_asset.attributes.get("name"), |
|
0 commit comments