diff --git a/docker/production/nginx/nginx.conf b/docker/production/nginx/nginx.conf index 44eb8e6..0e963ce 100644 --- a/docker/production/nginx/nginx.conf +++ b/docker/production/nginx/nginx.conf @@ -26,6 +26,9 @@ sendfile on; keepalive_timeout 65; +# max upload size +client_max_body_size 15M; + #gzip on; #include /etc/nginx/conf.d/*.conf; diff --git a/jdav_web/locale/de/LC_MESSAGES/django.po b/jdav_web/locale/de/LC_MESSAGES/django.po index 7a52d1f..05bda4a 100644 --- a/jdav_web/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-13 23:36+0100\n" +"POT-Creation-Date: 2024-11-17 14:17+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -68,10 +68,14 @@ msgstr "Abrechnung einreichen" msgid "Invite to group" msgstr "Zu Gruppe einladen" -#: utils.py:26 +#: utils.py:14 +msgid "Please keep filesize under {} MiB. Current filesize: {:10.2f} MiB." +msgstr "Maximale Dateigröße {} MiB. Aktuelle Dateigröße: {:10.2f} MiB." + +#: utils.py:42 msgid "Filetype not supported." msgstr "Dateityp nicht unterstützt." -#: utils.py:28 +#: utils.py:44 msgid "Please keep filesize under {}. Current filesize: {}" msgstr "Maximale Dateigröße {}. Aktuelle Dateigröße: {}." diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 3059cb6..c3b1584 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -208,7 +208,7 @@ class Attachment(CommonModel): f = RestrictedFileField(_('file'), upload_to='attachments', blank=True, - max_upload_size=10485760) + max_upload_size=10) def __str__(self): return os.path.basename(self.f.name) if self.f.name else _("Empty") diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 06f07ae..a713e47 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -254,7 +254,7 @@ class Member(Person): registration_form = RestrictedFileField(verbose_name=_('registration form'), upload_to='registration_forms', blank=True, - max_upload_size=5242880, + max_upload_size=5, content_types=['application/pdf', 'image/jpeg', 'image/png', @@ -262,7 +262,7 @@ class Member(Person): image = RestrictedFileField(verbose_name=_('image'), upload_to='people', blank=True, - max_upload_size=5242880, + max_upload_size=5, content_types=['image/jpeg', 'image/png', 'image/gif']) diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index 28b9dc1..e0e10f1 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -185,7 +185,7 @@ def render_register(request, group, form=None, emergency_contacts_formset=None, 'emergency_contacts_formset': emergency_contacts_formset, 'group': group, 'waiter_key': waiter_key, - 'pwd': pwd, + 'password': pwd, 'sektion': settings.SEKTION, 'registration': True }) diff --git a/jdav_web/startpage/models.py b/jdav_web/startpage/models.py index 01fda7a..12d38da 100644 --- a/jdav_web/startpage/models.py +++ b/jdav_web/startpage/models.py @@ -78,7 +78,7 @@ class Image(models.Model): f = RestrictedFileField(_('file'), upload_to='images', blank=True, - max_upload_size=10485760) + max_upload_size=10) def __str__(self): return os.path.basename(self.f.name) if self.f.name else _("Empty") diff --git a/jdav_web/utils.py b/jdav_web/utils.py index cc062c5..9060743 100644 --- a/jdav_web/utils.py +++ b/jdav_web/utils.py @@ -3,6 +3,21 @@ from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ +def file_size_validator(max_upload_size): + """ + Returns a function checking if the supplied file has file size less or equal + than `max_upload_size` in MB. + """ + def check_file_size(value): + limit = max_upload_size * 1024 * 1024 + if value.size > limit: + raise ValidationError(_('Please keep filesize under {} MiB. ' + 'Current filesize: ' + '{:10.2f} MiB.').format(max_upload_size, + value.size / 1024 / 1024)) + return check_file_size + + class RestrictedFileField(models.FileField): def __init__(self, *args, **kwargs): @@ -16,6 +31,7 @@ class RestrictedFileField(models.FileField): self.content_types = None super(RestrictedFileField, self).__init__(*args, **kwargs) + self.validators = [file_size_validator(self.max_upload_size)] def clean(self, *args, **kwargs): data = super(RestrictedFileField, self).clean(*args, **kwargs)