diff --git a/requirements.txt b/requirements.txt index 0119575..a4b1d5f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ whitenoise==5.0.1 brotli==1.0.7 django-environ==0.4.5 gunicorn ==20.0.4 +django-sri==0.1.2 diff --git a/templates/base.html b/templates/base.html index a9c4747..495ea83 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,8 +15,8 @@ {% block title %}{% endblock %} :: TheOrangeOne - {% sri_css "css/font-awesome.min.css" %} - {% sri_css "css/index.css" %} + {% sri "css/font-awesome.min.css" %} + {% sri "css/index.css" %} @@ -51,8 +51,8 @@ {% endblock %} - {% sri_js "js/materialize.min.js" %} - {% sri_js "js/index.js" %} + {% sri "js/materialize.min.js" %} + {% sri "js/index.js" %} {% block extrascripts %}{% endblock %} diff --git a/website/common/templatetags/__init__.py b/website/common/templatetags/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/website/common/templatetags/sri.py b/website/common/templatetags/sri.py deleted file mode 100644 index c8c9b02..0000000 --- a/website/common/templatetags/sri.py +++ /dev/null @@ -1,51 +0,0 @@ -# Based off https://github.com/claudep/django/commit/89aa4c04dbffcbafc05c3e2053b2262be8de4d3d - -import base64 -import hashlib -import os -from functools import lru_cache - -from django import template -from django.conf import settings -from django.templatetags.static import static -from django.utils.safestring import mark_safe - -register = template.Library() - - -@lru_cache -def generate_sha256(path): - with open(path, "r") as f: - body = f.read() - digest = hashlib.sha256(body.encode()).digest() - sha = base64.b64encode(digest).decode() - return "sha256-{}".format(sha) - - -def attrs_to_str(attrs): - return " ".join('{}="{}"'.format(k, v) for k, v in attrs.items()) - - -@register.simple_tag -def sri_js(url): - path = os.path.join(settings.STATIC_ROOT, url) - attrs = { - "src": static(url), - "type": "text/javascript", - "integrity": generate_sha256(path), - "crossorigin": "anonymous", - } - return mark_safe(f"") - - -@register.simple_tag -def sri_css(url): - path = os.path.join(settings.STATIC_ROOT, url) - attrs = { - "href": static(url), - "type": "text/css", - "rel": "stylesheet", - "integrity": generate_sha256(path), - "crossorigin": "anonymous", - } - return mark_safe(f"") diff --git a/website/settings.py b/website/settings.py index 246200c..c657eaa 100644 --- a/website/settings.py +++ b/website/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ "whitenoise.runserver_nostatic", "django.contrib.staticfiles", "debug_toolbar", + "sri", "website.common", ]