|
15 | 15 | )
|
16 | 16 | from django.conf import settings
|
17 | 17 | from django.core.exceptions import SuspiciousOperation
|
18 |
| -from django.http.response import BadHeaderError, ResponseHeaders |
19 | 18 | from django.shortcuts import redirect
|
20 | 19 | from django.urls import reverse
|
21 | 20 | from django.utils.deprecation import MiddlewareMixin
|
| 21 | +from django.utils.encoding import iri_to_uri |
22 | 22 | from django.utils.html import escape
|
23 | 23 |
|
24 | 24 | from readthedocs.builds.models import Version
|
@@ -373,23 +373,9 @@ def _get_https_redirect(self, request):
|
373 | 373 | def add_resolver_headers(self, request, response):
|
374 | 374 | if request.unresolved_url is not None:
|
375 | 375 | # TODO: add more ``X-RTD-Resolver-*`` headers
|
376 |
| - header_value = escape(request.unresolved_url.filename) |
377 |
| - try: |
378 |
| - # Use Django internals to validate the header's value before injecting it. |
379 |
| - ResponseHeaders({})._convert_to_charset( |
380 |
| - header_value, |
381 |
| - "latin-1", |
382 |
| - mime_encode=True, |
383 |
| - ) |
384 |
| - |
385 |
| - response["X-RTD-Resolver-Filename"] = header_value |
386 |
| - except BadHeaderError: |
387 |
| - # Skip adding the header because it fails validation |
388 |
| - log.info( |
389 |
| - "Skip adding X-RTD-Resolver-Filename header due to invalid value.", |
390 |
| - filename=request.unresolved_url.filename, |
391 |
| - value=header_value, |
392 |
| - ) |
| 376 | + uri_filename = iri_to_uri(request.unresolved_url.filename) |
| 377 | + header_value = escape(uri_filename) |
| 378 | + response["X-RTD-Resolver-Filename"] = header_value |
393 | 379 |
|
394 | 380 | def process_response(self, request, response): # noqa
|
395 | 381 | self.add_proxito_headers(request, response)
|
|
0 commit comments