Files
netrunner-app/src-tauri/README.md
T
Kirill c852315d34 Add decoy SNI plumbing, bundle wintun.dll, fix flag icons, add docs
- Прокидываем 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>
2026-07-02 19:29:29 +07:00

43 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).