lonk: Gemini клиент honk

Проект lonk это Gemini клиент (то есть альтернативный фронтенд) к ActivityPub (Fediverse) серверу honk:

https://humungus.tedunangst.com/r/honk

Код выполнен в виде VGI: CGI-подобный скрипт для Gemini сервера Vostok:

gemini://any-key.press/vostok/

gemini://any-key.press/vostok/reports/0.2.0.gmi

Исходный код

Git репозиторий с исходным кодом сервера:

ssh://anonymous@got.any-key.press/lonk

Web интерфейс к git репозиторию

Код написан на языке программирования python (тестировался на версии 3) в виде одного файла lonk.py и использует ТОЛЬКО стандартную библиотеку.

Цели проекта

В общем и целом мне нравится honk. Но есть минимум две тонкости, которые не позволяют мне катомизировать его "под себя" до конца:

Так а что же хочется менять? Главную страницу. У honk, условно, есть два вида ленты с постами людей, на которых подписан:

Поэтому весь lonk был задуман ради своей главной страницы. На ней я постарался совместить относительный хронологический порядок и древовидное представление. Алгоритм следующий: берем все треды обсуждений со страницы first, стартовые сообщения получаем (если необходимо) и оформляем как подразделы второго уровня, а ответы на них как подразделы третьего уровня. Это не идеально, нет строгой хронологической последовательности (алгоритм опирается на последовательность сообщений на странице first), но так лично мне удобнее.

Мой экземпляр lonk/honk

Я не вижу необходимости описывать какую-то инструкцию развёртывания собственного экземпляра lonk (во всяком случае пока), но я думаю, что любой желающий с минимальным опытом сможет это сделать. Если возникнут какие-то сложности/вопросы/предложения или тому подобное, то можете не стесняться и выходить на связь со мной.

Мой экземпляр крутится на той же машине, что и сам honk, поэтому запросы между ними выполняются более-менее сносно (по скорости). Это позволило не кэшировать ответы от honk сервера. Главная страница формируется менее 10 секунд, что меня вполне устраивает.

Если у вас есть уже есть аккаунт в honk и вы доверяете моему серверу хранить токен доступа, то вы можете воспользоваться моим экземпляром lonk.

gemini://any-key.press/vgi/lonk

Если у вас нет honk аккаунта, но вы хотели бы попробовать, то пишите мне на электронную почту, указав желаемое имя пользователя. После получения обратного письма с данными регистрации нового пользователя вы сможете воспользоваться как "родным" HTTPS-клиентом honk, так и моим экземпляром lonk.

Вопрос-ответ

Клиентский сертификат

Я открываю ссылку gemini://any-key.press/vgi/lonk, а там от меня требуют клиентский сертификат. Выглядит это как-то так:
SERVER SAYS: Certificate required
The site any-key.press is requesting a client certificate.
This will allow the site to recognise you across requests.
Что это? Зачем это?

Серверная часть должна аутентифицировать клиента honk. В протоколе Gemini нет, например, cookie, которые сохраняют сеанс аутентификации в HTTP. Вместо этого Gemini сервер может идентифицировать запросы от одного и того же клиента по клиентскому сертификату. Выполняя обычные запросы ваш Gemini клиент (скорее всего) не предоставляет клиентский сертификат, что бы, помимо прочего, не дать серверу возможность вас отследить. Такие запросы со стороны клиента можно условно назвать анонимными (хотя стоит держать в голове, что сервер, как минимум, знает IP адрес и URL, с которыми вы пришли). Но как только серверу становится необходимо идентифицировать пользователя он отдаёт специальный ответ, который сообщает клиенту, что дальнейшее взаимодействие возможно только с сертификатом со стороны клиента. Именно это требование вы и видите в своём Gemini клиенте.

После успешного получения сертификата нового клиента lonk будет последовательно запрашивать:

После успешной аутентификации на honk сервере lonk получит в ответ токет и сохранит его в базу данных вместе с URL сервера honk (имя пользователя и пароль от honk больше не нужны, lonk их не хранит). В следующий раз, когда вы откроете ссылку gemini://any-key.press/vgi/lonk с уже аутентифицированным lonk'ом клиентским сертификатом, не нужно будет передавать никаких дополнительных чувствительных данных (логин/пароль).

Ссылки по теме:

Project Gemini FAQ (4.5.1 How can you say Gemini is simple if it uses TLS?)

Часто задаваемые вопросы о проекте Gemini (2.7 Как можно говорить о том, что Gemini простой, если в нём используется TLS?)

Обратная связь

Вопросы, предложения и тому подобное вы можете: