Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023)

Материал из 0x1.tv

Докладчик
Алексей Бережок

GNOME Online Accounts, или сокращённо GOA, предоставляет пользователям простой способ входа в онлайн-учётные записи различных сервисов (например Google, Yahoo, Nextcloud и т. д) в среде рабочего стола GNOME.

В окне настройки учётных записей в Gnome видно, что отечественных сервисов в списке не предусмотрено. Но при этом тот же Yandex имеет функционал, который может быть использован в GOA.

В российском сегменте подобных интеграций или доработок не обнаружено, поэтому было решено добавить поддержку новых сервисов.

Видео

Презентация

Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023).pdf

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 был вынесен на первое место при отображении.

Так выглядит регистрация:

Окно регистрации аккаунта:

2023-berejok-img001.png

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 работоспособные почту, календарь и диск.


Ссылки

Как мы интегрировали GNOME Online Accounts с сервисами Yandex в российской ОС МСВСфера (Алексей Бережок, OSSDEVCONF-2023)!.jpg

Примечания и ссылки