fix: deal with i18n in oembed URLs

This commit is contained in:
Yohan Boniface 2024-03-13 18:00:07 +01:00
parent 6396ee5e58
commit 409c79415f
2 changed files with 16 additions and 2 deletions

View file

@ -7,6 +7,7 @@ from django.contrib.auth import get_user_model
from django.core import mail
from django.core.signing import Signer
from django.urls import reverse
from django.utils import translation
from umap.models import DataLayer, Map, Star
@ -815,6 +816,17 @@ def test_oembed_map(client, map, datalayer):
)
def test_oembed_map_with_non_default_language(client, map, datalayer):
translation.activate("en")
path = map.get_absolute_url()
assert path.startswith("/en/")
path = path.replace("/en/", "/fr/")
url = f"{reverse('map_oembed')}?url=http://testserver{path}"
response = client.get(url)
assert response.status_code == 200
translation.activate("en")
def test_oembed_link(client, map, datalayer):
response = client.get(map.get_absolute_url())
assert response.status_code == 200

View file

@ -38,11 +38,11 @@ from django.http import (
from django.middleware.gzip import re_accepts_gzip
from django.shortcuts import get_object_or_404
from django.urls import resolve, reverse, reverse_lazy
from django.utils import translation
from django.utils.encoding import smart_bytes
from django.utils.http import http_date
from django.utils.timezone import make_aware
from django.utils.translation import gettext as _
from django.utils.translation import to_locale
from django.views.decorators.cache import cache_control
from django.views.decorators.http import require_GET
from django.views.generic import DetailView, TemplateView, View
@ -536,7 +536,7 @@ class MapDetailMixin:
if hasattr(self.request, "LANGUAGE_CODE"):
lang = self.request.LANGUAGE_CODE
properties["lang"] = lang
locale = to_locale(lang)
locale = translation.to_locale(lang)
properties["locale"] = locale
context["locale"] = locale
geojson = self.get_geojson()
@ -699,6 +699,8 @@ class MapOEmbed(View):
raise Http404("Host not allowed.")
url_path = parsed_url.path
lang = translation.get_language_from_path(url_path)
translation.activate(lang)
view, args, kwargs = resolve(url_path)
if "slug" not in kwargs or "map_id" not in kwargs:
raise Http404("Invalid URL path.")