diff --git a/src/pretix/base/middleware.py b/src/pretix/base/middleware.py index 5e12a17b5..1c3834704 100644 --- a/src/pretix/base/middleware.py +++ b/src/pretix/base/middleware.py @@ -19,9 +19,9 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # -from collections import OrderedDict import logging import re +from collections import OrderedDict from urllib.parse import urlparse, urlsplit from zoneinfo import ZoneInfo, ZoneInfoNotFoundError diff --git a/src/tests/base/test_middleware.py b/src/tests/base/test_middleware.py index 4934d247c..8ffd000ad 100644 --- a/src/tests/base/test_middleware.py +++ b/src/tests/base/test_middleware.py @@ -153,7 +153,7 @@ def test_render_csp(): def test_merge_csp(): - from pretix.base.middleware import _parse_csp, _merge_csp, _render_csp + from pretix.base.middleware import _merge_csp, _parse_csp, _render_csp h = { 'default-src': ["'self'"], @@ -168,14 +168,26 @@ def test_merge_csp(): _merge_csp(h, _parse_csp("style-src 'unsafe-inline'; connect-src https://example.com")) assert _render_csp(h) == ( - "default-src 'self'; script-src 'self'; style-src 'self' 'self' 'unsafe-inline'; form-action 'self' https:; connect-src 'self' 'self' https://example.com" + "default-src 'self'; script-src 'self'; style-src 'self' 'self' 'unsafe-inline'; form-action 'self' " + "https:; connect-src 'self' 'self' https://example.com" ) def test_roundtrip_csp(): - from pretix.base.middleware import _parse_csp, _merge_csp, _render_csp + from pretix.base.middleware import _merge_csp, _parse_csp, _render_csp - prod_csp = "default-src 'self' https://pretix.eu https://static.pretix.cloud; script-src 'self' 'sha256-+tmFggeXIPOAC2UgcQ3LW/gPHTkwyWg3/D6FOJ5BHGo=' 'unsafe-eval' https://matomo.rami.io https://pretix.eu https://static.pretix.cloud https://support.rami.io; object-src 'none'; frame-src 'self' https://matomo.rami.io https://pretix.eu https://static.pretix.cloud https://support.rami.io https://www.youtube-nocookie.com; style-src 'self' 'unsafe-inline' data: https://cdn.pretix.cloud https://pretix.eu https://static.pretix…rt.rami.io; connect-src 'self' https://cdn.pretix.cloud https://matomo.rami.io https://pretix.eu https://static.pretix.cloud https://support.rami.io ws://support.rami.io; img-src 'self' data: https://cdn.pretix.cloud https://matomo.rami.io https://pretix.eu https://static.pretix.cloud https://support.rami.io; font-src 'self' https://pretix.eu https://static.pretix.cloud; media-src 'self' data: https://cdn.pretix.cloud https://pretix.eu https://static.pretix.cloud; form-action 'self' https: https://pretix.eu" + prod_csp = ("default-src 'self' https://pretix.eu https://static.pretix.cloud; script-src 'self' " + "'sha256-+tmFggeXIPOAC2UgcQ3LW/gPHTkwyWg3/D6FOJ5BHGo=' 'unsafe-eval' https://matomo.rami.io " + "https://pretix.eu https://static.pretix.cloud https://support.rami.io; object-src 'none'; " + "frame-src 'self' https://matomo.rami.io https://pretix.eu https://static.pretix.cloud " + "https://support.rami.io https://www.youtube-nocookie.com; style-src 'self' 'unsafe-inline' " + "data: https://cdn.pretix.cloud https://pretix.eu https://static.pretix…rt.rami.io; connect-src " + "'self' https://cdn.pretix.cloud https://matomo.rami.io https://pretix.eu https://static.pretix.cloud " + "https://support.rami.io ws://support.rami.io; img-src 'self' data: https://cdn.pretix.cloud " + "https://matomo.rami.io https://pretix.eu https://static.pretix.cloud https://support.rami.io; " + "font-src 'self' https://pretix.eu https://static.pretix.cloud; media-src 'self' data: " + "https://cdn.pretix.cloud https://pretix.eu https://static.pretix.cloud; form-action 'self' " + "https: https://pretix.eu") h = _parse_csp(prod_csp) _merge_csp(h, _parse_csp(prod_csp)) assert _render_csp(h) == prod_csp