fix(members/templatetags): escape all non-ascii characters in esc_all

pull/136/head
Christian Merten 10 months ago
parent 4bd8f15e97
commit 2761efecaa
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -14,7 +14,7 @@ from django.utils.html import format_html
from django.urls import reverse from django.urls import reverse
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from utils import RestrictedFileField from utils import RestrictedFileField, normalize_name
import os import os
from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\ from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\
prepend_base_url, get_registration_link, get_wait_confirmation_link,\ prepend_base_url, get_registration_link, get_wait_confirmation_link,\
@ -2012,8 +2012,3 @@ def import_from_csv_waitinglist(path):
for row in rows: for row in rows:
transform_row(row) transform_row(row)
def normalize_name(raw):
noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_')
return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii')

@ -1,5 +1,6 @@
from django import template from django import template
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from utils import normalize_name
register = template.Library() register = template.Library()
@ -12,7 +13,7 @@ def checked_if_true(name, value):
@register.filter @register.filter
def esc_all(val): def esc_all(val):
return mark_safe(str(val).replace('_', '\\_').replace('&', '\\&')) return mark_safe(str(normalize_name(val, False)).replace('_', '\\_').replace('&', '\\&'))
@register.filter @register.filter

@ -2,6 +2,7 @@ from django.db import models
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from decimal import Decimal, ROUND_HALF_DOWN from decimal import Decimal, ROUND_HALF_DOWN
import unicodedata
def file_size_validator(max_upload_size): def file_size_validator(max_upload_size):
@ -60,3 +61,11 @@ def get_member(request):
return None return None
else: else:
return request.user.member return request.user.member
def normalize_name(raw, nospaces=True):
if nospaces:
noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue').replace(' ', '_')
else:
noumlaut = raw.replace('ö', 'oe').replace('ä', 'ae').replace('ü', 'ue')
return unicodedata.normalize('NFKD', noumlaut).encode('ascii', 'ignore').decode('ascii')

Loading…
Cancel
Save