# 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//wintun.dll` рядом со скомпилированным `.exe` в `target///` (нужно для локального запуска `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).