Randomize filenames of settings files and delete old versions

This commit is contained in:
Raphael Michel
2016-10-23 19:14:16 +02:00
parent e6075cf97c
commit 70199eb7ae

View File

@@ -8,6 +8,7 @@ from django.forms.models import (
BaseInlineFormSet, BaseModelForm, BaseModelFormSet, ModelFormMetaclass, BaseInlineFormSet, BaseModelForm, BaseModelFormSet, ModelFormMetaclass,
) )
from django.utils import six from django.utils import six
from django.utils.crypto import get_random_string
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from pretix.base.i18n import I18nFormField from pretix.base.i18n import I18nFormField
@@ -110,12 +111,22 @@ class SettingsForm(forms.Form):
for name, field in self.fields.items(): for name, field in self.fields.items():
value = self.cleaned_data[name] value = self.cleaned_data[name]
if isinstance(value, UploadedFile): if isinstance(value, UploadedFile):
# Delete old file
fname = self.obj.settings.get(name, as_type=File)
if fname:
try:
default_storage.delete(fname.name)
except OSError:
logger.error('Deleting file %s failed.' % fname.name)
# Create new file
nonce = get_random_string(length=8)
if isinstance(self.obj, Event): if isinstance(self.obj, Event):
fname = '%s/%s/%s.%s' % ( fname = '%s/%s/%s.%s.%s' % (
self.obj.organizer.slug, self.obj.slug, name, value.name.split('.')[-1] self.obj.organizer.slug, self.obj.slug, name, nonce, value.name.split('.')[-1]
) )
else: else:
fname = '%s/%s.%s' % (self.obj.slug, name, value.name.split('.')[-1]) fname = '%s/%s.%s.%s' % (self.obj.slug, name, nonce, value.name.split('.')[-1])
newname = default_storage.save(fname, value) newname = default_storage.save(fname, value)
value._name = newname value._name = newname
self.obj.settings.set(name, value) self.obj.settings.set(name, value)