Review Comments: Check for // instead of https for web-webfonts

This commit is contained in:
Martin Gross
2024-02-28 21:21:52 +01:00
parent f0a76a3ee0
commit cc020f24a2
8 changed files with 13 additions and 24 deletions
+1 -1
View File
@@ -270,7 +270,7 @@ class SecurityMiddleware(MiddlewareMixin):
font_src = set()
if hasattr(request, 'event'):
for font in get_fonts(request.event, pdf_only=False).values():
for font in get_fonts(request.event, pdf_support_required=False).values():
for path in list(nested_dict_values(font)):
font_location = urlparse(path)
if font_location.scheme and font_location.netloc:
+2 -2
View File
@@ -748,7 +748,7 @@ class Renderer:
pdfmetrics.registerFont(TTFont('Open Sans B', finders.find('fonts/OpenSans-Bold.ttf')))
pdfmetrics.registerFont(TTFont('Open Sans B I', finders.find('fonts/OpenSans-BoldItalic.ttf')))
for family, styles in get_fonts(event, pdf_only=True).items():
for family, styles in get_fonts(event, pdf_support_required=True).items():
pdfmetrics.registerFont(TTFont(family, finders.find(styles['regular']['truetype'])))
if 'italic' in styles:
pdfmetrics.registerFont(TTFont(family + ' I', finders.find(styles['italic']['truetype'])))
@@ -941,7 +941,7 @@ class Renderer:
# Since pdfmetrics.registerFont is global, we want to make sure that no one tries to sneak in a font, they
# should not have access to.
if font not in list(get_fonts(order.event, pdf_only=True).keys()) + ['Open Sans']:
if font not in list(get_fonts(order.event, pdf_support_required=True).keys()) + ['Open Sans']:
logger.warning(f'Unauthorized use of font "{font}"')
font = 'Open Sans'
+1 -1
View File
@@ -89,7 +89,7 @@ def primary_font_kwargs():
choices = [('Open Sans', 'Open Sans')]
choices += sorted([
(a, {"title": a, "data": v}) for a, v in get_fonts(pdf_only=False).items()
(a, {"title": a, "data": v}) for a, v in get_fonts(pdf_support_required=False).items()
], key=lambda a: a[0])
return {
'choices': choices,
@@ -1,10 +0,0 @@
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter('startswith')
@stringfilter
def startswith(text, start):
return text.startswith(start)
+1 -1
View File
@@ -653,7 +653,7 @@ class EventSettingsForm(EventSettingsValidationMixin, FormPlaceholderMixin, Sett
del self.fields['event_list_filters']
del self.fields['event_calendar_future_only']
self.fields['primary_font'].choices += [
(a, {"title": a, "data": v}) for a, v in get_fonts(self.event, pdf_only=False).items()
(a, {"title": a, "data": v}) for a, v in get_fonts(self.event, pdf_support_required=False).items()
]
# create "virtual" fields for better UX when editing <name>_asked and <name>_required fields
@@ -1,5 +1,4 @@
{% load static %}
{% load startswith %}
@font-face {
font-family: 'AND';
@@ -29,9 +28,9 @@
{% else %}
font-weight: normal;
{% endif %}
src: {% if "woff2" in formats %}{% if formats.woff2|startswith:'https' %}url('{{ formats.woff2 }}'){% else %}url('{% static formats.woff2 %}'){% endif %} format('woff2'),{% endif %}
{% if "woff" in formats %}{% if formats.woff|startswith:'https' %}url('{{ formats.woff }}'){% else %}url('{% static formats.woff %}'){% endif %} format('woff'),{% endif %}
{% if "truetype" in formats %}{% if formats.truetype|startswith:'https' %}url('{{ formats.truetype }}'){% else %}url('{% static formats.truetype %}'){% endif %} format('truetype'){% endif %};
src: {% if "woff2" in formats %}{% if '//' in formats.woff2 %}url('{{ formats.woff2 }}'){% else %}url('{% static formats.woff2 %}'){% endif %} format('woff2'),{% endif %}
{% if "woff" in formats %}{% if '//' in formats.woff %}url('{{ formats.woff }}'){% else %}url('{% static formats.woff %}'){% endif %} format('woff'),{% endif %}
{% if "truetype" in formats %}{% if '//' in formats.truetype %}url('{{ formats.truetype }}'){% else %}url('{% static formats.truetype %}'){% endif %} format('truetype'){% endif %};
}
.preload-font[data-family="{{family}}"][data-style="{{style}}"] {
font-family: '{{ family }}', 'AND';
+2 -2
View File
@@ -262,7 +262,7 @@ class BaseEditorView(EventPermissionRequiredMixin, TemplateView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['fonts'] = get_fonts(self.request.event, pdf_only=True)
ctx['fonts'] = get_fonts(self.request.event, pdf_support_required=True)
ctx['pdf'] = self.get_current_background()
ctx['variables'] = self.get_variables()
ctx['images'] = self.get_images()
@@ -278,7 +278,7 @@ class FontsCSSView(TemplateView):
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['fonts'] = get_fonts(self.request.event if hasattr(self.request, 'event') else None)
ctx['fonts'] = get_fonts(self.request.event if hasattr(self.request, 'event') else None, pdf_support_required=True)
return ctx
+3 -3
View File
@@ -252,7 +252,7 @@ As with all plugin signals, the ``sender`` keyword argument will contain the eve
"""
def get_fonts(event: Event = None, pdf_only=False):
def get_fonts(event: Event = None, pdf_support_required=False):
def nested_dict_values(d):
for v in d.values():
if isinstance(v, dict):
@@ -272,8 +272,8 @@ def get_fonts(event: Event = None, pdf_only=False):
received_fonts.update(value)
for font, payload in received_fonts.items():
if pdf_only:
if any(v.startswith('https') for v in list(nested_dict_values(payload))):
if pdf_support_required:
if any('//' in v for v in list(nested_dict_values(payload))):
continue
f.update({font: payload})
else: