Пользовательские ссылки в заголовке отказываются принимать URL Matrix

При обновлении до версии 3.4 компонент темы «Custom Header links» не смог обновиться из-за ссылки Matrix вида https://matrix.to/#/#matrix-meta-chat:fedoraproject.org. Ошибка: Свойство по указателю JSON '/3/url' должно быть корректным URL.

После удаления этой ссылки обновление прошло успешно, но добавить ссылку обратно не удалось.

(Обходное решение: создайте постоянную ссылку /matrix, которая перенаправляет на https://matrix.to/#/#matrix-meta-chat:fedoraproject.org, а затем добавьте /matrix как ссылку в пользовательском заголовке)

Тем не менее, было бы неплохо сделать это немного более гибким. Похоже, что формат ссылки корректен для постоянной ссылки.

3 лайка

Двойной # приводит к сбою валидации настройки объекта в ядре (не в самом этом тест-кейсе).

bad URI(is not URI?): "https://matrix.to/#/#matrix-meta-chat:fedoraproject.org" (URI::InvalidURIError)

Это не является строго корректным URI, поэтому фрагмент необходимо закодировать.
Вот так; использование https://matrix.to/#/%23matrix-meta-chat:fedoraproject.org сработает.

Посмотрим на код:
https://github.com/discourse/discourse/blob/main/lib/theme_settings_object_validator.rb#L191-L193
is_valid_url определён здесь:

Вы можете увидеть, что у них уже есть другая функция для обработки такой ситуации, и она используется в других местах:

Полагаю, разумно использовать relaxed_parse для валидации URL объекта темы.
Например: if validations&.dig(:url) && !UrlHelper.relaxed_parse?(value)

6 лайков