bulava92 9074b82c0c
Windows desktop build / publish (push) Canceled after 0s
Document desktop clients and align passkey client ID
2026-10-28 16:19:19 +03:00
2026-10-28 16:04:52 +03:00
2026-10-28 16:04:52 +03:00

SHD Desktop

Исходный код настольных приложений SHD для macOS и Windows. Оба приложения открывают веб-версию SHD в отдельном окне и поддерживают работу с DEV и PROD.

Возможности и ограничения

  • macOS: Swift, AppKit и WKWebView; вкладки и окна, печать, масштабирование, камера и микрофон. Сборка рассчитана на Apple Silicon и macOS 14 или новее.
  • Windows: WPF и WebView2; окна и вкладки, загрузки, печать, масштабирование, системные диалоги сайта, камера и микрофон. Сборка рассчитана на Windows x64.
  • Passkey: на странице входа приложение использует ту же кнопку passkey, что и сайт, и открывает вход в браузерной сессии. После входа ответ возвращается в приложение по shd-auth://callback.
  • Ограничение входа: серверный поток настольной авторизации подключён только на DEV. В PROD вход по passkey в приложении пока не работает.

Сборка macOS

Нужен Mac с Xcode Command Line Tools и Swift 6. Из корня репозитория выполните:

./Apple/Scripts/build-app.sh

Скрипт создаёт Apple/dist/SHD-macOS-arm64.zip. Внутри будет SHD.app; распакуйте архив и перенесите приложение в /Applications. Архив подписан локальной ad-hoc подписью и не нотарифицирован Apple.

Сборка Windows

Для сборки нужны Windows x64 и .NET 10 SDK. В PowerShell из корня репозитория выполните:

./Windows/Scripts/build.ps1

Скрипт создаёт Windows/dist/SHD-Windows-x64.zip, включающий приложение и сценарии установки. На компьютере пользователя .NET устанавливать не нужно; требуется Microsoft Edge WebView2 Runtime. Подробности установки и удаления описаны в Windows/README.md.

GitHub Actions запускает Windows-сборку при изменениях в Windows/ и вручную через workflow Windows desktop build. ZIP появляется в артефактах только после успешной сборки.

Вход по passkey

Нажатие существующей кнопки passkey на сайте запускает поток настольной авторизации:

  1. Приложение открывает /desktop-auth/authorize в браузере с client_id=shd-desktop, redirect_uri=shd-auth://callback, случайными state и PKCE challenge (S256).
  2. После обычного входа сервер возвращает одноразовый код и state приложению через shd-auth://callback.
  3. Приложение отправляет код и PKCE verifier в теле POST-запроса на /desktop-auth/complete из своего WebView. Сервер создаёт обычную веб-сессию, поэтому cookie остаётся в профиле приложения.

Код одноразовый и ограничен по времени. В приложениях нельзя включить PROD-вход одной настройкой: сервер должен отдельно разрешить и развернуть поток на PROD.

S
Description
No description provided
Readme
2.4 MiB
Languages
C# 50.6%
Swift 43.2%
PowerShell 4.5%
Shell 1.7%