c852315d34
- Прокидываем sni (decoy-хост) по обновлённому UDL через весь стек: guest-js -> Tauri-команда -> desktop/mobile -> Kotlin spawnSession. Список серверов пока статичный (backend еще не отдает sni), но логика похода в реальный /api/v1/nodes оставлена под флагом на будущее. - Бандлим wintun.dll в Windows-инсталлятор через bundle.resources в tauri.windows.conf.json - раньше он копировался только для локального cargo run/tauri dev, но не попадал в NSIS/MSI. - Чиним падение мобильной сборки: гитигнорённые UniFFI Kotlin-биндинги отстали от обновленного UDL (не хватало параметра sni). - Флаги стран - локальные SVG вместо react-country-flag в CDN-режиме: тот бился об CSP и не грузился офлайн. - Добавляем дерево README.md по структуре проекта и точечные комментарии в неочевидных местах кода. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
3.9 KiB
Markdown
43 lines
3.9 KiB
Markdown
# Rust-оболочка (`src-tauri/`)
|
||
|
||
Tauri 2 приложение-хост. Вся VPN-логика вынесена в плагин
|
||
[`src/plugins/vpn-plugin/`](src/plugins/vpn-plugin/README.md) — сюда, в
|
||
корневой крейт, попадает только запуск приложения и платформенная сборка.
|
||
|
||
## Файлы
|
||
|
||
| Путь | Назначение |
|
||
|---|---|
|
||
| `src/main.rs` | Точка входа десктоп-бинарника: инициализация логгера, вызов `netrunner_app::run()`. |
|
||
| `src/lib.rs` | `run()` — сборка `tauri::Builder` с плагином `tauri_plugin_vpn`; помечен `#[tauri::mobile_entry_point]` для Android/iOS. |
|
||
| `build.rs` | На Windows: копирует `bin/<arch>/wintun.dll` рядом со скомпилированным `.exe` в `target/<triple>/<profile>/` (нужно для локального запуска `cargo run`/`tauri dev`) и встраивает манифест с `requireAdministrator` (VPN нужны admin-права). Копирование в финальный **инсталлятор** — отдельный механизм, см. ниже. |
|
||
| `Cargo.toml` | Зависимости: `tauri`, `tauri-plugin-vpn` (path), `netrunner-logger` (git-зависимость из приватного репозитория `netrunner-core`). Собирается только под `x86_64-pc-windows-gnu` из настроенных Windows-таргетов. |
|
||
| `tauri.conf.json` | Общий конфиг: окно 500×800, CSP (`img-src`/`connect-src` жёстко ограничены — см. ниже), бандл-таргеты `"all"`. |
|
||
| `tauri.windows.conf.json` | **Платформенный оверлей**, Tauri мержит его автоматически только при сборке под Windows (см. `tauri-utils::config::parse`). Добавляет `wintun.dll` в `bundle.resources`. |
|
||
| `capabilities/*.json` | ACL для Tauri IPC — какие команды плагина доступны из WebView. |
|
||
|
||
## Windows: TUN-драйвер
|
||
|
||
VPN-движок использует крейт `wintun` (Rust-обёртка над `wintun.dll`,
|
||
самодостаточный сетевой драйвер без отдельной установки). Он должен лежать
|
||
**рядом с exe** — так его находит `LoadLibraryW("wintun.dll")` по умолчанию.
|
||
Это решается в двух независимых местах:
|
||
|
||
1. **Локальный запуск** (`cargo run`/`tauri dev`) — копирует `build.rs`.
|
||
2. **Финальный инсталлятор** (NSIS/MSI) — бандлер `tauri build` ничего не
|
||
знает про `build.rs`-копирование, поэтому файл явно объявлен как
|
||
`bundle.resources` в `tauri.windows.conf.json`
|
||
(`"bin/amd64/wintun.dll": "wintun.dll"` — плоское имя, чтобы попасть в
|
||
корень инсталляции рядом с exe). Если добавите сборку под arm64 —
|
||
потребуется отдельный CI-профиль с `--config`, т.к. `tauri.conf.json` не
|
||
умеет параметризоваться по архитектуре.
|
||
|
||
## CSP (`tauri.conf.json` → `app.security.csp`)
|
||
|
||
Специально ограничен: `img-src`/`connect-src`/`script-src` разрешают только
|
||
`'self'`, `data:` и домены Telegram (нужны для встроенного Telegram Web).
|
||
**Любой новый внешний домен/CDN, к которому фронт обращается напрямую
|
||
(картинки, шрифты, API), нужно либо явно добавлять в CSP, либо не
|
||
использовать** — это уже один раз ловили на флагах стран, см.
|
||
[../src/features/README.md](../src/features/README.md).
|