Skip to content

Commit 2c26153

Browse files
Federico Fallicocursoragent
andcommitted
readme: screenshot interfaccia
Immagini in docs/screenshots e sezione nel README. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 3fbcf80 commit 2c26153

3 files changed

Lines changed: 27 additions & 51 deletions

File tree

README.md

Lines changed: 27 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
# PoliVPN
22

3-
Client VPN desktop leggero e nativo per il **personale e collaboratori del Policlinico di Catania** che devono accedere alle risorse interne tramite **Fortinet SSL-VPN**. Il progetto nasce come alternativa open-source al FortiClient ufficiale, con interfaccia semplice e codice modulare in **Rust**.
3+
Client VPN desktop leggero e nativo per chi si connette a gateway **Fortinet SSL-VPN**. Il progetto nasce come alternativa open-source al FortiClient ufficiale, con interfaccia semplice e codice modulare in **Rust**. Puoi **personalizzare** testi (es. titolo sotto il logo via variabili di build) e **immagini** del client sostituendo gli asset in `vpn-app/src/` (logo) e la configurazione Tauri / tema.
44

5-
> **Nota istituzionale:** questo software è pensato per semplificare l’accesso VPN da PC Windows (e in prospettiva macOS) nel contesto lavorativo del **Policlinico “G. Rodolico — San Marco” di Catania**. L’uso deve essere conforme alle policy IT dell’Azienda Ospedaliero-Universitaria e ai gateway VPN autorizzati.
5+
### Screenshot (Windows)
6+
7+
Interfaccia principale in stato **disconnesso** e **connesso** (branding e titolo sotto il logo sono esempi configurabili in build).
8+
9+
![PoliVPN — disconnesso](docs/screenshots/polivpn-disconnected.png)
10+
11+
![PoliVPN — connesso](docs/screenshots/polivpn-connected.png)
612

713
---
814

@@ -12,13 +18,13 @@ Client VPN desktop leggero e nativo per il **personale e collaboratori del Polic
1218
- **Tunnel PPP/LCP/IPCP** e traffico IP su TLS secondo il modello usuale degli **gateway Fortinet SSL‑VPN**.
1319
- **Interfaccia Tauri** minimale: gateway, utente, password, opzione “Ricordali” (default attivo), sottotitolo sotto il logo (testo cablato in compilazione, default **Connessione VPN**), pulsante Connetti/Disconnetti, finestra **Log** separata per diagnostica. La modalità **full-tunnel** vs **split-tunnel** su Windows è scelta **in compilazione** (`POLIVPN_VPN_TYPE`), non dal modulo.
1420
- Su Windows, i comandi `netsh` / PowerShell usati per route e DNS partono **senza finestre console** visibili (`CREATE_NO_WINDOW`).
15-
- Su Windows: supporto **MSI** (installer WiX); l’installer **include materialmente** [`wintun.dll`](https://www.wintun.net/) recuperata dalla build (`vpn-app/src-tauri/build.rs`, cartella risorse dell’MSI — dettaglio in **[Wintun (Windows)](#wintun-windows)**).
21+
- Su Windows: supporto **MSI** (installer WiX); l’installer **include** `wintun.dll` nelle risorse del progetto e nel bundle (dettaglio in **[Wintun (Windows)](#wintun-windows)**).
1622

1723
### Wintun (Windows)
1824

1925
**Wintun** è il componente dedicato (**`wintun.dll`**) che su Windows permette all’app di usare un’**interfaccia TUN virtuale**, evitando installazioni TAP aggiuntive lato utente. PoliVPN lo utilizza tramite il crate Rust `tun` per trasportare nel sistema operativo il traffico del tunnel.
2026

21-
Nel progetto la DLL viene **recuperata o copiata** durante il build dell’app (vedi `vpn-app/src-tauri/build.rs`); finisce nella cartella **`resources`** del bundle MSI; all’avvio l’app ne risolve il percorso e chiama **`vpn_core::tun::set_wintun_dll_path`**. Pertanto gli utenti finali **non** devono cercare né installare Wintun manualmente quando usano il pacchetto che genera questa build.
27+
Nel **pacchetto installabile** (es. MSI delle Release), la **`wintun.dll`** è **già incorporata**: non viene richiesto alcun scaricamento separato all’utente finale. Sul disco di sviluppo risiede come risorsa sotto **`vpn-app/src-tauri/resources/`** e nell’installer finisce nella cartella **`resources`** del bundle; all’avvio l’app ne risolve il percorso e chiama **`vpn_core::tun::set_wintun_dll_path`**.
2228

2329
Per la **distribuzione e la conformità alla licenza** di terzi fare riferimento al **testo licenza** contenuto nel pacchetto ufficiale Wintun e alle indicazioni pubblicate sul sito [wintun.net](https://www.wintun.net/).
2430

@@ -31,31 +37,37 @@ Il codice Rust è diviso in due contesti Cargo:
3137
- **Workspace alla radice** (`Cargo.toml` in questa cartella): membri **`vpn-core`**, **`vpn-helper`**, **`vpn-cli`**, con dipendenze condivise nel workspace.
3238
- **App desktop** (`vpn-app/src-tauri/`): workspace Cargo **autonomo** per Tauri; dipende da **`vpn-core`** tramite path (`../../vpn-core`) e non compare nei `members` del manifest di radice.
3339

34-
Il template **`[.env.example](.env.example)`** nella radice descrive le variabili di compilazione MSI; **`polivpn.build.env`** e **`.env`** (locali, in `.gitignore`) contengono i valori reali. CI in **`.github/`** e questo README stanno alla radice — vedi [.env vs configurazioni online](#polivpn-env-msi).
40+
Il template **`[.env.example](.env.example)`** nella radice descrive le variabili di compilazione MSI; **`polivpn.build.env`** e **`.env`** (locali, in `.gitignore`) contengono i valori reali quando compili tu stesso il client. CI in **`.github/`** usa lo stesso schema — vedi [`.env`, `polivpn.build.env` e MSI](#polivpn-env-msi).
3541

3642
### Cartelle principali
3743

3844
| Percorso | Contenuto |
3945
|----------|-----------|
4046
| **`vpn-core/`** | Libreria Rust con tutta la logica VPN: autenticazione HTTPS sul gateway Fortinet, parsing della configurazione XML, tunnel TLS, negoziazione PPP (LCP/IPCP), interfaccia TUN (tramite crate `tun` / Wintun su Windows), loop di I/O pacchetti. È il **cuore** del client: sia l’app grafica sia gli strumenti da terminale la usano come dipendenza. |
4147
| **`vpn-app/`** | **Client desktop** distribuito agli utenti: shell **Tauri 2**. Dentro trovi il frontend web e il backend Rust. |
42-
| **`vpn-app/src/`** | Interfaccia utente (HTML/CSS/JS, build con **Vite**): schermata principale, eventuali asset statici. |
48+
| **`vpn-app/src/`** | Interfaccia utente (HTML/CSS/JS, build con **Vite**): schermata principale, asset statici (logo, ecc.). |
4349
| **`vpn-app/src-tauri/`** | Progetto Rust Tauri: `Cargo.toml`, `tauri.conf.json`, merge **`tauri.windows.conf.json`** / **`tauri.macos.conf.json`** (risorse e bundle per piattaforma), icone, `resources/` (solo Windows: `wintun.dll`), backend (`src/`). Artefatti in `src-tauri/target/`. |
4450
| **`vpn-cli/`** | **Opzionale, solo per sviluppatori.** Binario da terminale che ripete lo stesso flusso di connessione di `vpn-core` con argomenti `clap` (gateway, utente, password, …). Serve per **debug**, CI o script senza avviare la GUI; **non** è il prodotto che installi sugli PC degli utenti e **non** va confuso con il client Tauri. |
4551
| **`vpn-helper/`** | Binario di supporto per **operazioni privilegiate** su Windows (creazione/rimozione TUN, route, DNS) tramite API Win32. In `vpn-core` esistono moduli (`dns`, `routes`) pensati per **invocare** questo eseguibile quando si integrano quelle funzionalità; il legame è da considerare **di infrastruttura** rispetto alla GUI. |
4652

4753
### In sintesi
4854

49-
- **Utente finale:** usa solo il risultato della build di **`vpn-app`** (MSI / installer).
55+
- **Utente finale:** usa solo il risultato della build di **`vpn-app`** (MSI / installer) oppure gli installer delle **[Release](https://github.com/oceanor/PoliVPN/releases)** su GitHub.
5056
- **Manutenzione del protocollo e della connessione:** si lavora principalmente su **`vpn-core`** e sul backend in **`vpn-app/src-tauri`**.
5157
- **`vpn-cli`** e **`vpn-helper`** sono complementi nel repo (debug / operazioni di sistema), non “altri programmi” che l’utente debba cercare e installare da sé, salvo decisioni future di packaging esplicito.
5258

5359
---
5460

5561
## Requisiti
5662

63+
**Solo esecuzione del client installato**
64+
65+
- Dagli artefatti precompilati nelle **[Release](https://github.com/oceanor/PoliVPN/releases)** non servono toolchain di sviluppo (**Rust**, **Node/npm**, ecc.): installi l’MSI (Windows) o il bundle macOS pubblicato nella release e utilizzi l’applicazione. Restano comunque richiesti i **permessi amministrativi** laddove il sistema operativo e il driver TUN lo richiedano.
66+
67+
**Sviluppo e compilazione da sorgente**
68+
5769
- **Rust** (edition 2021, toolchain stabile consigliata).
58-
- **Windows:** privilegi **Amministratore** per creazione TUN e modifiche di routing/DNS; **`wintun.dll`** per architettura corretta viene recuperata automaticamente in build (rete o copia manuale in `vpn-app/src-tauri/resources/` se serve build offline). Consultare licenza e note nello zip ufficiale Wintun.
70+
- **Windows:** privilegi **Amministratore** per creazione TUN e modifiche di routing/DNS durante l’uso; per compilare da sorgente serve la **`wintun.dll`** per l’architettura di build nella cartella **`vpn-app/src-tauri/resources/`**, come nell’installer precompilato (vedi **`vpn-app/src-tauri/build.rs`** per la preparazione nel tuo checkout). Licenza come da materiale su [wintun.net](https://www.wintun.net/).
5971
- **Tauri CLI** per build dell’installer (`cargo install tauri-cli` oppure binario precompilato).
6072
- **WiX Toolset v3** (o scaricato automaticamente dal bundler Tauri in molti ambienti) per generare l’**MSI**.
6173

@@ -116,12 +128,12 @@ Spesso si confonde il file **`.env`** (tipico dei progetti Node) con quanto serv
116128

117129
| Domanda | Risposta |
118130
|--------|----------|
119-
| Serve il file **`.env`**? | **No, non è obbligatorio.** È solo **uno dei modi** per dare gateway/porta alla build in locale: è in **`.gitignore`**, quindi **non finisce su GitHub** se non forzi il commit. Alternativa equivalente: file **`polivpn.build.env`** (anche questo **ignorato**, mai da committare con IP/porta reali). |
120-
| Cosa **committare** senza esporre configurazioni? | **`[.env.example](.env.example)`** (placeholder nella radice). In CI definire **`POLIVPN_*`** come segreti o variabili protette nel runner. |
131+
| Serve il file **`.env`**? | **No, non è obbligatorio.** È solo **uno dei modi** per dare gateway/porta alla build in locale: è in **`.gitignore`**, quindi **non finisce su GitHub** se non forzi il commit. Alternativa equivalente: file **`polivpn.build.env`** (anche questo **ignorato**, non versionare con valori riservati se il repo è condiviso). |
132+
| Cosa **committare**? | **`[.env.example](.env.example)`** (placeholder nella radice). In CI definire **`POLIVPN_*`** come variabili del runner se vuoi default di build lì. |
121133
| Come legge la build i default MSI? | `vpn-app/src-tauri/build.rs` legge dalla radice, in ordine: **`polivpn.build.env`**, poi **`.env`**. Chiavi supportate: `POLIVPN_DEFAULT_GATEWAY`, `POLIVPN_DEFAULT_PORT`, `POLIVPN_VPN_TYPE` (o alias `VPN_TYPE`), `POLIVPN_TITLE` (o alias `TITLE`). Se assenti, puoi esportare le stesse variabili nella **shell** prima di `cargo tauri build`. |
122134
| `.env.example` viene letto dalla build? | **No.** Copiarlo nella radice come **`.env`** o **`polivpn.build.env`**, che la build legge nell’ordine indicato sopra. |
123135

124-
#### Gateway e porta cablati nell’MSI (distribuzione istituzionale)
136+
#### Gateway e porta cablati nell’MSI (distribuzione)
125137

126138
Per un MSI che propone **gateway e porta Fortinet** già compilati nel binario: all’avvio vengono **precompilati** nel client; **non** sono bloccati — l’utente può modificarli prima di connettersi (come per una build senza queste variabili).
127139

@@ -165,57 +177,21 @@ export POLIVPN_DEFAULT_PORT="443"
165177
cd vpn-app && cargo tauri build --bundles msi
166178
```
167179

168-
Gateway e porta **non** sostituiscono utente e password: indicano solo **a quale server** collegarsi (non sono segreti crittografici, ma conviene non pubblicare URL interni su repo aperti). Per sedi o gateway diversi servono in genere **MSI distinti** (in alternativa futura: config distribuita da policy senza ricompilare).
169-
170-
---
171-
172-
## Utilizzo (linee guida)
173-
174-
1. Ottenere da **IT / responsabile sistema informativo** l’URL del gateway SSL-VPN autorizzato per il Policlinico (non pubblicare credenziali o URL interni nel README o negli issue pubblici).
175-
2. **Windows:** eseguire il client con privilegi elevati quando richiesto per il TUN.
176-
3. Consultare la finestra **Log** in caso di errori di connessione e allegare estratti **anonimizzati** (senza password né cookie di sessione) quando si aprono segnalazioni.
177-
4. Se chiudi la finestra mentre la VPN è connessa, l’app chiede se disconnettere prima di uscire. Se era connessa e l’app viene chiusa senza disconnettere, al riavvio il pulsante torna **Disconnetti** (tunnel TLS/TUN non sopravvive alla chiusura; serve disconnettere o riconnettersi per ripristinare il traffico VPN).
178-
179-
---
180-
181-
## Credenziali, GitHub e conservazione dei segreti
182-
183-
### Comportamento attuale dell’app
184-
185-
- **Interfaccia grafica (Tauri):** con «Ricordali», **gateway**, **porta** e **password** non finiscono nel codice sorgente: vengono salvati nel **Keyring di sistema** ([crate `keyring`](https://docs.rs/keyring)) con i feature di piattaforma abilitati in `Cargo.toml` (Windows: Gestione credenziali; macOS: Portachiavi; Linux: storage nativo). Il sistema operativo li custodisce in modo **protetto** (non sono file di testo nel repository). Le voci salvate in precedenza senza campo `port` continuano a funzionare (si usa la porta già mostrata nel modulo dopo il default di build o 443). Il salvataggio avviene **dopo** che la VPN risulta connessa.
186-
- **Solo username nell’ultimo accesso:** in `localStorage` del WebView viene memorizzato il nome utente (`polivpn_last_user`) per precompilare il modulo: è una scelta di comodità; la **password non** è nel `localStorage`.
187-
- **`vpn-cli`:** oggi accetta gateway e password come **argomenti da riga di comando** (comodi per test, rischiosi per la cronologia della shell: preferire variabili d’ambiente se estenderete la CLI).
188-
189-
### Cosa va bene mettere su GitHub (standard industry)
190-
191-
| Approccio | Uso tipico |
192-
|-----------|------------|
193-
| **`.gitignore`** | Esclude `.env`, **`polivpn.build.env`**, file **`*.local.toml`**, cartelle **`secrets/`**, chiavi, ecc. |
194-
| **`.env.example`** | Unico schema committato per i default di compilazione (**`POLIVPN_*`**). La build legge **`polivpn.build.env`** poi **`.env`** nella radice, non questo file direttamente. |
195-
196-
**Regola:** mai password, token o cookie di sessione in commit, issue o screenshot pubblici.
197-
198-
### Plaintext nel repo vs cifratura gestita dall’app
199-
200-
- **Plaintext delle credenziali nel repository:** da **evitare sempre**.
201-
- **Plaintext in file sulla macchina dell’utente (es. `credenziali.txt`):** sconsigliato per le password; il pattern desktop corretto è proprio **Keyring / Portachiavi**.
202-
- **Cifratura custom nell’app:** ha senso solo se non si può usare il keyring (es. export portabile crittografato): introduce gestione chiavi, aggiornamenti e audit più complessi. Per questo progetto il **keyring OS** è lo standard adeguato.
203-
204-
Il repository include **[`.env.example`](.env.example)** e **`.gitignore`** per distinguere configurazione locale da ciò che va su GitHub.
180+
Gateway e porta **non** sostituiscono utente e password: indicano solo **a quale server** collegarsi. Per sedi o gateway diversi servono in genere **MSI distinti** (in alternativa futura: config distribuita da policy senza ricompilare).
205181

206182
---
207183

208184
## Sicurezza e conformità
209185

210186
- Il progetto può essere configurato per accettare certificati TLS non standard nel contesto di gateway interni; questo **riduce le garanzie usuali di TLS**. Usare solo su reti e gateway di cui ci si fida e come da policy aziendale.
211187
- **Non è un prodotto Fortinet ufficiale** né è affiliato a Fortinet. Il marchio FortiClient / Fortinet è proprietà dei rispettivi titolari.
212-
- Per pubblicazione su GitHub: valutare l’aggiunta di una **LICENSE** esplicita e di una policy di **security disclosure** se il repository diventa pubblico.
188+
- Per pubblicazione su GitHub: valutare l’aggiunta di una **LICENSE** esplicita e di una policy di **security disclosure** se il repository è o diventa pubblico.
213189

214190
---
215191

216192
## Contribuire
217193

218-
Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS, packaging). Mantenere gli esempi privi di dati clinici e di credenziali reali.
194+
Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS, packaging). Mantieni gli esempi senza dati personali né credenziali reali.
219195

220196
---
221197

@@ -226,4 +202,4 @@ Issue e pull request sono benvenute (documentazione, robustezza, supporto macOS,
226202

227203
---
228204

229-
*README orientato al contesto del Policlinico di Catania; il nome “PoliVPN” è usato in senso descrittivo (“VPN per il Policlinico”) e non implica un marchio registrato oltre quanto dichiarato dal maintainer del repository.*
205+
*Il nome “PoliVPN” è storico/decorative; puoi rinominarlo nel branding del tuo fork o build personalizzata.*
44 KB
Loading
42.5 KB
Loading

0 commit comments

Comments
 (0)