fix: encode the whole url parameter for OEmbed

See https://github.com/umap-project/umap/pull/1526#issuecomment-1937040472
This commit is contained in:
David Larlet 2024-02-12 15:42:49 -05:00
parent 148c119c05
commit 9426570b6e
No known key found for this signature in database
GPG key ID: 3E2953A359E7E7BD
3 changed files with 5 additions and 5 deletions

View file

@ -17,7 +17,7 @@
{% umap_js locale=locale %} {% umap_js locale=locale %}
{% if object.share_status != object.PUBLIC %}<meta name="robots" content="noindex">{% endif %} {% if object.share_status != object.PUBLIC %}<meta name="robots" content="noindex">{% endif %}
<link rel="alternate" type="application/json+oembed" <link rel="alternate" type="application/json+oembed"
href="{{ oembed_absolute_uri }}?url={{ absolute_uri|urlencode }}&format=json" href="{{ oembed_absolute_uri }}?url={{ quoted_absolute_uri }}&format=json"
title="{{ map.name }} oEmbed URL" /> title="{{ map.name }} oEmbed URL" />
{% endblock extra_head %} {% endblock extra_head %}
{% block content %} {% block content %}

View file

@ -815,6 +815,6 @@ def test_oembed_link(client, map, datalayer):
) )
assert ( assert (
'href="http://testserver/map/oembed/' 'href="http://testserver/map/oembed/'
f'?url=http%3A//testserver/en/map/test-map_{map.id}&format=json"' f'?url=http%3A%2F%2Ftestserver%2Fen%2Fmap%2Ftest-map_{map.id}&format=json"'
) in response.content.decode() ) in response.content.decode()
assert 'title="test map oEmbed URL" />' in response.content.decode() assert 'title="test map oEmbed URL" />' in response.content.decode()

View file

@ -10,7 +10,7 @@ from http.client import InvalidURL
from io import BytesIO from io import BytesIO
from pathlib import Path from pathlib import Path
from urllib.error import HTTPError, URLError from urllib.error import HTTPError, URLError
from urllib.parse import quote, urlparse from urllib.parse import quote, quote_plus, urlparse
from urllib.request import Request, build_opener from urllib.request import Request, build_opener
from django.conf import settings from django.conf import settings
@ -595,8 +595,8 @@ class MapView(MapDetailMixin, PermissionsMixin, DetailView):
context["oembed_absolute_uri"] = self.request.build_absolute_uri( context["oembed_absolute_uri"] = self.request.build_absolute_uri(
reverse("map_oembed") reverse("map_oembed")
) )
context["absolute_uri"] = self.request.build_absolute_uri( context["quoted_absolute_uri"] = quote_plus(
self.object.get_absolute_url() self.request.build_absolute_uri(self.object.get_absolute_url())
) )
return context return context