28 lines
2.9 KiB
Markdown
28 lines
2.9 KiB
Markdown
# SHD Desktop
|
||
|
||
Исходники настольного приложения SHD для Apple и Windows.
|
||
|
||
## Папки
|
||
|
||
- `Apple/` — приложение macOS на Swift и WKWebView.
|
||
- `Windows/` — приложение Windows на WPF и WebView2, установочные сценарии и инструкция.
|
||
|
||
## Вход в macOS-приложении
|
||
|
||
Клик по существующей кнопке passkey на странице входа в WKWebView перехватывается приложением и открывает тот же DEV-сайт в системном браузере. После входа callback возвращает код в приложение, а WKWebView отправляет его серверу и получает веб-сессию. Вход в приложении пока включён только для DEV, где серверный поток уже развёрнут.
|
||
|
||
Серверный поток развёрнут на DEV. Клиент использует такой контракт:
|
||
|
||
1. `GET /desktop-auth/authorize` с параметрами `client_id=shd-macos`, `redirect_uri=shd-auth://callback`, `response_type=code`, `state`, `code_challenge` и `code_challenge_method=S256`. После обычного входа, включая passkey, сервер возвращает браузер на `shd-auth://callback?code=…&state=…`.
|
||
2. `POST /desktop-auth/complete` с полями `code` и `code_verifier`. Сервер проверяет одноразовый код и PKCE, создаёт веб-сессию, устанавливает защищённую cookie и перенаправляет WKWebView на SHD.
|
||
|
||
Код должен быть одноразовым, связанным с PKCE и действовать не более 60 секунд. Callback URI фиксирован в приложении. Маршрут завершения должен принимать только такой код и verifier; исключение CSRF-защиты допустимо только для этого маршрута при обязательной проверке кода и PKCE.
|
||
|
||
## Windows-приложение
|
||
|
||
Windows-клиент находится в `Windows/`. Он открывает сайт в WebView2 и запускает passkey-вход по той же кнопке на странице, что и macOS-версия. Сборка создаётся GitHub Actions workflow **Windows desktop build**; инструкция по установке и получению архива находится в [`Windows/README.md`](Windows/README.md).
|
||
|
||
## Сборка macOS-приложения
|
||
|
||
Из каталога `Apple/` запустить `./Scripts/build-app.sh`. Сборка создаёт проверенный архив `Apple/dist/SHD-macOS-arm64.zip` и не устанавливает приложение в `/Applications`.
|