feature/ui - zatim ne uplne uhlazena ale celkem pouzitelna appka #1

Merged
luke-20 merged 17 commits from feature/ui into main 2025-09-28 21:05:52 +02:00
Showing only changes of commit 901684763e - Show all commits

114
README.md
View File

@ -2,13 +2,22 @@
## Co to je
Mini Go/HTMX aplikace pro šifrování zpráv cizím veřejným klíčem.
Nástroj v Go pro asymetrické šifrování zpráv cizím veřejným klíčem.
* Při startu vygeneruje nebo načte RSA identitu (2048 bitů).
* Umožní sdílet veřejný klíč (`public.pem`) a self-signed cert (`identity.crt`).
* Šifruje hybridně: **RSA-OAEP (SHA-256) + AES-256-GCM**.
* Rozhraní přes **HTMX**, moderní responzivní layout (2 sloupce na desktopu, 1 sloupec na mobilu).
* Všude jsou tlačítka **Copy** a **Clear** pro snadnou práci s texty.
Má dvě rozhraní:
1. Web (HTMX) jednoduché formuláře (encrypt / decrypt)
2. Desktop (Fyne v2) 3 záložky: Identita, Šifrování, Dešifrování (dark UI)
Vlastnosti:
* Při startu vygeneruje nebo načte RSA identitu (2048 bitů)
* Sdílí veřejný klíč (`public.pem`) a selfsigned cert (`identity.crt`)
* Hybridní šifra: **RSA-OAEP (SHA-256) + AES-256-GCM**
* JSON payload: `{ek,n,ct}` (base64 komponenty)
* V GUI nad každým polem sada tlačítek (Paste, Clear, Encrypt/Decrypt, Copy)
* Output pole jsou readonly
* Pamatuje poslední záložku a velikost okna
---
@ -19,27 +28,18 @@ Mini Go/HTMX aplikace pro šifrování zpráv cizím veřejným klíčem.
---
## Rychlý start
## Rychlý start (gui)
```bash
# spustí server
go run .
# otevři v prohlížeči
http://localhost:8080/
```text
go run . gui
```
Na prvním startu se vytvoří:
```
identity_key.pem # RSA private key (PKCS#1)
public.pem # veřejný klíč PEM (PKIX)
identity.crt # self-signed cert (vizitka pro sdílení)
```
```text
identity_key.pem # RSA private key (PKCS#1)
public.pem # veřejný klíč PEM (PKIX)
identity.crt # self-signed cert (vizitka pro sdílení)
identity.crt # self-signed cert (vizitka)
```
---
@ -58,28 +58,29 @@ REGEN_KEYS=1 go run .
---
## Jak to používat (UI)
## Web UI použití
1. Otevři `http://localhost:8080/`.
2. V sekci **Můj veřejný klíč** stáhni/kopíruj `public.pem` nebo `identity.crt` a pošli je kontaktům.
3. V sekci **Šifrovat pro cizí klíč**:
```bash
# přes flag
go run . web
```
* napiš zprávu,
* vlož **cizí** public key nebo cert (PEM blok),
* klikni **Encrypt**.
* Výsledek (**Zašifrovaný payload**) se zobrazí hned pod formulářem jako JSON:
```json
{
1. Otevři `http://localhost:8080/`
2. Zkopíruj / stáhni svůj veřejný klíč nebo cert
3. Do Encrypt formuláře vlož cizí public key/cert + zprávu → Encrypt
4. JSON payload odešli příjemci
5. Příjemce vloží payload do Decrypt → plaintext
Formát payloadu:
```json
{
"ek": "base64(RSA-OAEP(aesKey))",
"n": "base64(nonce)",
```text
"ct": "base64(aes-gcm-ciphertext)"
}
```
* tlačítkem **Copy** zkopíruješ, **Clear** vymaže obsah.
```text
4. Příjemce vloží payload do sekce **Dešifrovat** a klikne **Decrypt** → objeví se plaintext.
}
```
---
@ -99,17 +100,18 @@ REGEN_KEYS=1 go run .
---
## Struktura projektu
## Struktura projektu (zkráceně)
```text
.
├─ main.go
├─ templates/
│ ├─ index.html # UI s Copy/Clear tlačítky
│ ├─ encrypt.html # výstup šifrování
│ └─ decrypt.html # výstup dešifrování
└─ static/
└─ style.css # responzivní layout (1 sloupec mobile, 2 desktop)
├─ main.go # cobra entry
├─ cmd.go # CLI příkazy (gui, web)
├─ ui.go # Fyne komponenty
├─ fyne_ui.go # init okna + prefs
├─ server.go # HTTP handlery
├─ lib/crypto.go # šifrovací logika
├─ templates/ # HTMX šablony
└─ static/ # CSS
```
---
@ -133,28 +135,24 @@ REGEN_KEYS=1 go run .
## Fyne GUI režim
Projekt teď obsahuje i desktop GUI (Fyne v2) se třemi záložkami:
1. Identita zobrazení / kopírování `public.pem` a `identity.crt`.
2. Šifrování vlož cizí veřejný klíč/cert, napiš zprávu, klikni Encrypt.
3. Dešifrování vlož JSON payload, klikni Decrypt.
Funkce navíc:
* Tlačítko 🌗 Motiv přepíná jednoduchý light/dark vzhled (uložen do preferencí).
* Posledně vybraný tab, velikost okna i motiv se automaticky obnoví při dalším spuštění.
* Výstupní pole jsou read-only, aby se předešlo nechtěné editaci.
Spuštění GUI:
Spuštění desktopu:
```bash
go run . gui
```
HTTP server zůstává:
Záložky:
1. Identita kopírování `public.pem` / `identity.crt`
2. Šifrování peer key, zpráva, tlačítka: Paste, Clear, Encrypt, Copy
3. Dešifrování payload: Paste+Decrypt, Clear (čistí i výsledek), Copy
GUI je trvale v dark stylu. Pamatuje poslední tab a velikost okna.
HTTP režim zůstává:
```bash
go run . http
go run . web
```
---