mirror of
https://github.com/suitenumerique/meet.git
synced 2026-08-25 17:57:09 +00:00
🔒️(backend) prevnt file change post checks
Before this commit, post a file check, the policy could be reused to change the verified file. Now, files are uplaoded to a temporary location, then inside a transaction that prevents concurrent calls, the file is copied to its final destination and the checks are run on that one. A new file can still be updated with the policy but it will never be read, etc. As part of this change, all files in the new tmp directory on s3 should have an expiration policy.
This commit is contained in:
@@ -954,6 +954,16 @@ class File(BaseModel):
|
||||
|
||||
return f"{settings.FILE_UPLOAD_PATH}/{self.pk!s}"
|
||||
|
||||
@property
|
||||
def temporary_key_base(self):
|
||||
"""Temporary key base used while upload is still pending."""
|
||||
if not self.pk:
|
||||
raise RuntimeError(
|
||||
"The file instance must be saved before requesting a storage key."
|
||||
)
|
||||
|
||||
return f"{settings.FILE_UPLOAD_TMP_PATH}/{self.pk!s}"
|
||||
|
||||
@property
|
||||
def file_key(self):
|
||||
"""Key used to store the file in object storage."""
|
||||
@@ -962,6 +972,12 @@ class File(BaseModel):
|
||||
# leaking Personal Information in logs, etc.
|
||||
return f"{self.key_base}{extension!s}"
|
||||
|
||||
@property
|
||||
def temporary_file_key(self):
|
||||
"""Temporary key used to upload the file before it is finalized."""
|
||||
_, extension = splitext(self.filename)
|
||||
return f"{self.temporary_key_base}{extension!s}"
|
||||
|
||||
def get_abilities(self, user):
|
||||
"""
|
||||
Compute and return abilities for a given user on the file.
|
||||
|
||||
Reference in New Issue
Block a user