Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023)
Материал из 0x1.tv
- Докладчик
- Алексей Бережок
GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т. д) в среде рабочего стола GNOME.
В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA.
В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов.
Содержание
Видео
Презентация
Thesis
GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т.\,д) в среде рабочего стола GNOME.
В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA. В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов.
Для взаимодействия с сервисами Yandex было решено использовать Yandex Auth через OAuth токен.
Так как процесс получения токена у Yandex в определённом смысле похож на [https://developers.google.com/identity/protocols/oauth2/web-server?hl=en#httprest получение токена в Google], то за основу был взят [https://github.com/GNOME/gnome-online-accounts/blob/master/src/goabackend/goagoogleprovider.c исходный код goagoogleprovider.c], но с заменой путей url, характерных для Yandex.
Идентификатор пользователя извлекается из default_email, возвращаемый при запросе страницы [1].
Список доступа к приложениям Yandex сформирован таким образом:
login:email login:info mail:imap_full mail:imap_ro mail:smtp calendar:all yadisk:disk cloud_api:disk.write cloud_api:disk.read
При добавлении функционала он будет расширяться.
В итоге доработок в списке GOA появился новый GOA-провайдер — Yandex. Иконка Yandex отображается в стандартной теме GNOME. При этом в списке GOA-провайдеров Yandex был вынесен на первое место при отображении.
Так выглядит регистрация:
Окно регистрации аккаунта:
Evolution имеет интеграцию с GOA, поэтому для первичной проверки был выбран именно он. После запуска он показал, что он не знает нового провайдера. Чтобы он мог с ним работать, был доработан пакет Evolution-data-server. В него добавлен новый провайдер — Yandex. Evolution способен извлекать из GOA токен и параметры учётной записи, и, используя функции провайдера, взаимодействовать с необходимыми сервисами.
Интеграция с почтой оказалась самой простой. Её выполнили по аналогии с Google Mail, после чего она заработала без каких-либо сложностей и нареканий.
Сложности возникли с календарём Yandex, так как у него есть свои особенности. Работа с ним отличается от работы с календарём Google: в протоколе отличий нет, но есть отличие в реализации аутентификации. Google-провайдер передаёт заголовок
Authorization: Bearer <authorization-parameters>
согласно [спецификации, в то время как Яндекс-сервер ожидает OAuth вместо Bearer. Небольшая замена в исходных кодах программного пакета позволила также подключить и календарь от Yandex сервисов.
Для подключения Яндекс Диска в наличии имелись два варианта: Yandex REST API и [[https://yandex.ru/dev/disk/webdav/ Yandex WebDAV API]. Основной пакет, который реализует подключение виртуальных файловых систем в Gnome — это gvfs. В данном пакете уже имеется инструментарий по работе с WebDAV протоколом (реализован для NextCloud). Поэтому в первую очередь заинтересовал именно WebDAV протокол от Yandex. Для определения типа авторизации используется [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization заголовок www-authenticate], который от Yandex сервера возвращает строку:
WWW-Authenticate: Basic realm="Yandex.Disk"
где аутентификация идентифицирует себя как Basic, но в качестве realm указывается Yandex.Disk. Эта маленькая деталь отделяла от работоспособности сервиса в gvfs пакете, т. к. Yandex требовал «OAuth», а не «Basic». После добавления такого нестандартного Basic, который возвращает в заголовке OAuth, функционал также заработал.
Таким образом, малыми усилиями удалось интегрировать Яндекс сервисы с Gnome окружением. Для подключения Yandex сервисов, достаточно пройти одну авторизацию и получить в различных программах, поддерживающих Gnome Online Accounts работоспособные почту, календарь и диск.