Темы/компоненты из GitLab вызывают ошибку 500 при установке/обновлении

Продолжение обсуждения из Галерея изображений Masonry:

Название говорит само за себя, полагаю.

После пересборки из версии 2.9.0.beta11 (208d22cfc2) любая тема или компонент из GitLab выдают ошибку 500 при попытке установки или обновления.

Это баг или какая-то проблема безопасности? Моя конфигурация ничем необычным не отличается и довольно проста.

Это может быть связано. Проблема возникла, когда я тестировал установку одной из тем:

Сообщение (2 копии)

Не удалось корректно обработать перехваченный ответ: RemoteTheme::ImportError : Ошибка клонирования репозитория Git: доступ запрещён или репозиторий не найден

Стек вызовов

/var/www/discourse/lib/theme_store/git_importer.rb:81:in `raise_import_error!'
/var/www/discourse/lib/theme_store/git_importer.rb:148:in `rescue in clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:145:in `clone_http!'
/var/www/discourse/lib/theme_store/git_importer.rb:93:in `clone!'
/var/www/discourse/lib/theme_store/git_importer.rb:18:in `import!'
/var/www/discourse/app/models/remote_theme.rb:82:in `import_theme'
/var/www/discourse/app/controllers/admin/themes_controller.rb:106:in `block in import'
/var/www/discourse/lib/hijack.rb:56:in `instance_eval'
/var/www/discourse/lib/hijack.rb:56:in `block in hijack'
/var/www/discourse/lib/scheduler/defer.rb:94:in `block in do_work'

Окружение

HTTP HOSTS: foorumi.katiska.eu
4 лайка

Вы имеете в виду GitLab или GitHub? Эти компоненты тем работали раньше? Возможно, это временная проблема с сетью. Не могли ли темы, к которым вы обращаетесь, быть удалены или защищены?

Если они общедоступны, вы можете поделиться их URL-адресами, чтобы другие могли попытаться получить к ним доступ.

GitLab. Версии на базе GitHub работают отлично.

Да. И они всё ещё работают при установке из ZIP-архива. Проблема сейчас в подключении к GitLab из Discourse.

Нет и нет.

Конечно. Вы можете попробовать «Галерея изображений Masonry» — ссылка находится в первом сообщении.

Я ничего не знаю, но у меня есть предчувствие, что нормализация URL (или что-то подобное) меняет GitLab на GitHub, и поэтому репозиторий не найден.

2 лайка

Почти наверняка из-за исправлений защиты от SSRF.

Gitlab перенаправляет с помощью 301 команду git clone для https://gitlab.com/silentboatman/discourse-masonry-image-gallery на https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/ (sic, заканчивается на .git/), но git вызывается с флагом -c http.followRedirects=false, поэтому операция завершается ошибкой.

Ввод https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/ в качестве URL репозитория напрямую не работает, так как FinalDestination.resolve(@uri.to_s) возвращает его обратно к https://gitlab.com/silentboatman/discourse-masonry-image-gallery. Не поверите, но при запросе вне контекста git перенаправление происходит в обратном направлении! Gitlab перенаправляет с помощью 302 https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/ на https://gitlab.com/silentboatman/discourse-masonry-image-gallery.

РЕДАКТИРОВАНИЕ: Используя GIT_CURL_VERBOSE=1, я смог увидеть, что при клонировании Git добавляет info/refs?service=git-upload-pack, поэтому

GET /silentboatman/discourse-masonry-image-gallery/info/refs?service=git-upload-pack HTTP/2

перенаправляется на

location: https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git/info/refs?service=git-upload-pack
5 лайков

Итак, главный вопрос ™: что изменилось недавно? И как мы (под «мы» я подразумеваю всех, кроме меня) можем это исправить?

1 лайк

Кто-то заглянул. :slight_smile: :+1:

5 лайков

(Кроме того, похоже, что большинство действий, вызывающих ошибку при добавлении репозитория, теперь отображают всплывающее окно с текстом «500 Server Error» вместо настоящего сообщения об ошибке)

1 лайк

Я думал, что это исправление (ниже) решит проблему, но я всё ещё получаю ту же ошибку.

Сейчас у меня версия 2.9.0.beta11 +143 (795687160d).

@daniel, связано ли это исправление с проблемой в этой теме?

1 лайк

Да, этот коммит был направлен на исправление работы с GitLab. Я только что проверил, и теперь я могу клонировать репозитории GitLab как через SSH, так и через HTTP. Не могли бы вы подробнее описать, что именно у вас не работает?

@Jagster, для вас это всё ещё актуально?

4 лайка

Я тоже наблюдал эту проблему после обновления до beta12.

Кажется, важен формат URL.

https://gitlab.com/silentboatman/discourse-masonry-image-gallery/ — ошибка
https://gitlab.com/silentboatman/discourse-masonry-image-gallery — ошибка
https://gitlab.com/silentboatman/discourse-masonry-image-gallery.git — работает

Это означает, что вам нужно удалить и снова добавить компоненты темы, использующие один из первых двух форматов, и скопировать конфигурацию. Но было бы здорово, если бы эти два формата поддерживались из коробки.

6 лайков

Да, добавление .git в конец URL-адреса, похоже, работает. Отлично подмечено!

Вот дополнительная информация. Я установил discourse-masonry-image-gallery, и после обновления Discourse получил следующее сообщение об ошибке.

Помню, что устанавливал его по URL-адресу без .git в конце, так как в примере URL-адреса .git отсутствует.

Я также попытался установить другую тему с GitLab (без .git) и получил следующее сообщение.

В тесте выше я пытался установить discourse-agora-theme, это также публичный репозиторий GitLab.

3 лайка

После beta12 и использования .git всё работает отлично. Однако я не пробовал без .git.

2 лайка

Этот коммит должен исправить проблему:

7 лайков

Да, это решает проблему. Спасибо!

2 лайка