Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Алексей Бережок}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} {{youtubelink|}} {{SlidesSectio…») |
StasFomin (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
;{{SpeakerInfo}}: {{Speaker|Алексей Бережок}} <blockquote> GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т. д) в среде рабочего стола GNOME. В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA. В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов. </blockquote> {{VideoSection}} {{vimeoembed|901905286|800|450}} {{youtubelink|}} |vlFugB-_KwE}} {{SlidesSection}} [[File:Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf|left|page=-|300px]] {{----}} == Thesis == GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т.\,д) в среде рабочего стола GNOME. В окне настройки учётных записей в Gnome видно, что отечественных сервисов [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/30 в списке не предусмотрено]. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA. В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов. Для взаимодействия с сервисами Yandex было решено использовать Yandex Auth через [https://yandex.ru/dev/id/doc/ru/concepts/ya-oauth-intro OAuth токен]. Так как процесс получения токена у Yandex в определённом смысле [https://yandex.ru/dev/id/doc/ru/codes/code-url похож] на [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, возвращаемый при запросе страницы [https://login.yandex.ru/info]. Список доступа к приложениям Yandex сформирован таким образом: <pre> login:email login:info mail:imap_full mail:imap_ro mail:smtp calendar:all yadisk:disk cloud_api:disk.write cloud_api:disk.read </pre> При добавлении функционала он будет расширяться. В итоге доработок в списке GOA появился новый GOA-провайдер — Yandex. Иконка Yandex отображается в стандартной теме GNOME. При этом в списке GOA-провайдеров Yandex был вынесен на первое место при отображении. Так выглядит регистрация: Окно регистрации аккаунта: [[File:2023-berejok-img001.png|center]] Evolution имеет интеграцию с GOA, поэтому для первичной проверки был выбран именно он. После запуска он показал, что он не знает нового провайдера. Чтобы он мог с ним работать, был доработан пакет Evolution-data-server. В него добавлен новый провайдер — Yandex. Evolution способен извлекать из GOA токен и параметры учётной записи, и, используя функции провайдера, взаимодействовать с необходимыми сервисами. Интеграция с почтой оказалась самой простой. Её выполнили по аналогии с Google Mail, после чего она заработала без каких-либо сложностей и нареканий. Сложности возникли с календарём Yandex, так как у него есть свои особенности. Работа с ним отличается от работы с календарём Google: в протоколе отличий нет, но есть отличие в реализации аутентификации. Google-провайдер передаёт заголовок <pre> Authorization: Bearer <authorization-parameters> </pre> согласно [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization спецификации], в то время как Яндекс-сервер ожидает <tt>OAuth</tt> вместо <tt>Bearer</tt>. Небольшая замена в исходных кодах программного пакета позволила также подключить и календарь от Yandex сервисов. Для подключения Яндекс Диска в наличии имелись два варианта: [https://yandex.ru/dev/disk/rest/ 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 сервера возвращает строку: <pre> WWW-Authenticate: Basic realm="Yandex.Disk" </pre> где аутентификация идентифицирует себя как Basic, но в качестве realm указывается Yandex.Disk. Эта маленькая деталь отделяла от работоспособности сервиса в gvfs пакете, т. к. Yandex требовал «OAuth», а не «Basic». После добавления такого нестандартного Basic, который возвращает в заголовке OAuth, функционал также заработал. Таким образом, малыми усилиями удалось интегрировать Яндекс сервисы с Gnome окружением. Для подключения Yandex сервисов, достаточно пройти одну авторизацию и получить в различных программах, поддерживающих Gnome Online Accounts работоспособные почту, календарь и диск. === Ссылки === * [https://gitlab.gnome.org/GNOME/gnome-online-accounts/-/issues/30 Запрос на добавление Yandex сервисов в Gnome] {{----}} [[File:{{#setmainimage:Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> <references/> [[Категория:OSSDEVCONF-2023]] [[Категория:Open-source projects]] [[Категория:Draft]] |
Текущая версия на 10:51, 27 июня 2024
- Докладчик
- Алексей Бережок
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 в определённом смысле похож на получение токена в Google, то за основу был взят исходный код 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 и Yandex WebDAV API. Основной пакет, который реализует подключение виртуальных файловых систем в Gnome — это gvfs. В данном пакете уже имеется инструментарий по работе с WebDAV протоколом (реализован для NextCloud). Поэтому в первую очередь заинтересовал именно WebDAV протокол от Yandex. Для определения типа авторизации используется заголовок www-authenticate, который от Yandex сервера возвращает строку:
WWW-Authenticate: Basic realm="Yandex.Disk"
где аутентификация идентифицирует себя как Basic, но в качестве realm указывается Yandex.Disk. Эта маленькая деталь отделяла от работоспособности сервиса в gvfs пакете, т. к. Yandex требовал «OAuth», а не «Basic». После добавления такого нестандартного Basic, который возвращает в заголовке OAuth, функционал также заработал.
Таким образом, малыми усилиями удалось интегрировать Яндекс сервисы с Gnome окружением. Для подключения Yandex сервисов, достаточно пройти одну авторизацию и получить в различных программах, поддерживающих Gnome Online Accounts работоспособные почту, календарь и диск.