z230
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# janssenpc_file_send v2.5
|
||||
|
||||
Odesílací skript na JNJ počítači: přejmenuje soubory ve `##JNJPrenos`, zašifruje
|
||||
(Fernet/AES-128) a odešle na `https://msgs.buzalka.cz/upload-file`, pak přesune
|
||||
do `Trash`. Detekci nových souborů zajišťuje `janssenpc_file_watch.py`.
|
||||
Stahování ze serveru řeší samostatný `janssenpc_file_receive` (ručně) — sem nepatří.
|
||||
|
||||
## Spuštění
|
||||
Spouští se automaticky přes `janssenpc_file_watch.py` (watchdog). Ručně:
|
||||
```
|
||||
C:\Users\vbuzalka\OneDrive - JNJ\##JNJPrenos\Python\python.exe "...\janssenpc_file_send.py"
|
||||
```
|
||||
|
||||
## Co je nového v v2.5 — diagnostika JNJ filtru
|
||||
|
||||
Důvod: v logu z 2026-06-12 byl poslední soubor označen jako `UPLOADED` + `PŘESUNUTO`,
|
||||
ale **doma fakticky nepřišel**. Podezření na korporátní filtr (Zscaler/SiteMinder),
|
||||
který už dříve sabotoval downloady (`403 + ?_sm_nck=1`). v2.4 logoval jen
|
||||
`resp.json()['status']`, takže podvrženou/přesměrovanou odpověď nebylo poznat.
|
||||
|
||||
### 1. Funkce `upload()` — podrobný log každého POSTu
|
||||
Loguje:
|
||||
- přesné jméno v multipartu `repr(enc_name)` (odhalí problémové znaky/diakritiku),
|
||||
- velikost zašifrovaného payloadu i původního souboru,
|
||||
- **HTTP kód** a dobu trvání,
|
||||
- **finální URL** po redirectech (`resp.url`),
|
||||
- celý **řetěz redirectů** (`resp.history` + `Location`),
|
||||
- hlavičky `Content-Type`, `Server`, `Content-Length`,
|
||||
- **tělo odpovědi** (oříznuté na 1500 B).
|
||||
|
||||
### 2. Detekce stop filtru → `⚠ PODEZŘENÍ NA FILTR`
|
||||
Zaloguje varování, pokud:
|
||||
- `_sm_nck` ve finální URL (SiteMinder/Zscaler replay),
|
||||
- finální URL je na cizím hostu (přesměrováno),
|
||||
- `Content-Type` není `application/json`,
|
||||
- tělo vypadá jako HTML (block page),
|
||||
- hlavička `Server` není `uvicorn` ani `nginx`.
|
||||
|
||||
> **Pozn.:** Před uvicornem běží SWAG reverse proxy, takže `Server: nginx` je
|
||||
> NORMÁLNÍ a poplach se na něj nehlásí. Spolehlivý důkaz pravé odpovědi serveru je
|
||||
> přítomnost `dropbox_path` v JSON těle (to generuje jen `app.py`).
|
||||
|
||||
## Ověřeno v provozu (2026-06-12)
|
||||
První ostrý běh v2.5 prokázal, že přenosový řetězec klient → server → Dropbox
|
||||
funguje korektně: `HTTP 200`, finální URL bez redirectu/`_sm_nck`, pravé JSON tělo
|
||||
s `dropbox_path`, soubor fyzicky dorazil do `U:\Dropbox\!!!Days\Downloads Z230\`
|
||||
(velikost bajt po bajtu sedí). Dřívější podezření na JNJ filtr se NEPOTVRDILO —
|
||||
šlo o zpožděný Dropbox sync na domácí straně.
|
||||
|
||||
### 3. Bezpečné mazání — Trash JEN při ověřeném úspěchu
|
||||
Soubor se přesune do `Trash` **pouze** když:
|
||||
`HTTP 200` **a** `Content-Type: application/json` **a** pole `status` ∈
|
||||
`{OK, UPLOADED, SAVED, RECEIVED}`.
|
||||
|
||||
Jinak se loguje `PONECHÁNO` a soubor zůstává ve složce — aby falešný „úspěch"
|
||||
podvržený filtrem nesmazal nepřenesený soubor. (Pozn.: `OK_STATUSES` případně sladit
|
||||
s tím, co skutečně vrací `app.py` na `/upload-file` — ověřit z těla v logu.)
|
||||
|
||||
## Jak diagnostikovat
|
||||
1. Nasadit v2.5 na JNJ stroj místo v2.4 (jako `janssenpc_file_send.py`).
|
||||
2. Spustit přenos, otevřít `file_send.log` u sekce `>> UPLOAD start`.
|
||||
3. Porovnat: pokud je tam `⚠ PODEZŘENÍ NA FILTR` nebo `status` mimo množinu →
|
||||
chyba je na cestě (filtr / endpoint), ne v serveru. Pokud je odpověď čistá JSON
|
||||
`uvicorn` 200 a soubor přesto doma chybí → problém je až na serveru
|
||||
(`/upload-file` dešifrování / zápis do Dropboxu) — řešit v `app.py`.
|
||||
|
||||
## Vazby
|
||||
- Watcher: `janssenpc_file_watch.py` (v1.1).
|
||||
- Server: `app.py` ≥ v2.3, endpoint `POST /upload-file` (dešifruje `.enc` → Dropbox
|
||||
`/!!!Days/Downloads Z230/`).
|
||||
- Protějšek pro download: `janssenpc_file_receive_v1.2`.
|
||||
|
||||
## Historie
|
||||
- v2.5 (2026-06-12): podrobný logging uploadu + detekce filtru + Trash jen při ověřeném úspěchu
|
||||
- v2.4 (2026-06-05): Fernet šifrování uploadu, endpoint `/upload-file`
|
||||
- v2.2 (2026-06-02): odesílání bez šifrování přes `/upload-dropbox`
|
||||
Reference in New Issue
Block a user