Files
janssen/Python-runner/4_unwrap_smime_v1.0.md
2026-06-05 21:21:30 +02:00

64 lines
2.6 KiB
Markdown

# 4_unwrap_smime_v1.0.py
**Krok 4 pipeline** — rozbalení S/MIME wrapper zpráv. Některé emaily (Datová schránka, mBank, ComGate, PayU, PostSignum …) mají viditelné tělo jen *"This is an S/MIME signed message"* — skutečný obsah je zabalený uvnitř přílohy `smime.p7m`.
Skript najde tyto emaily, stáhne binárku `smime.p7m` z Graphu, rozbalí PKCS7 SignedData (`asn1crypto.cms`), extrahuje vnitřní MIME zprávu a doplní do Mongo:
| Pole | Obsah |
|---|---|
| `smime_unwrapped: True` | flag — už rozbaleno |
| `smime_subject` | Subject z vnitřní MIME hlavičky |
| `smime_body_text` | plain text vnitřního těla |
| `smime_body_html` | HTML vnitřního těla (pokud je) |
| `smime_inner_attachments[]` | `{filename, content_type, size_bytes}` vnitřních příloh |
## POZOR: `smime.p7m` vs `smime.p7s`
| Příloha | Co to je | Skript dělá |
|---|---|---|
| `smime.p7m` | **Enveloped wrapper** kolem celé MIME zprávy | **Rozbalí** |
| `smime.p7s` | **Detached signature** vedle čistého emailu (tělo je normálně dostupné) | **Ignoruje** — není co rozbalovat |
Filtr ve skriptu (`SMIME_FILTER`) je proto explicitně `^smime\.p7m$`. Email s přílohou `smime.p7s` a `smime_unwrapped != True` je **správný stav**.
## Argumenty
| Argument | Povinný | Hodnoty | Default | Popis |
|---|---|---|---|---|
| `--mailbox` | ne | e-mail | (všechny) | Jedna konkrétní schránka. Bez argumentu projede všechny kolekce v `emaily` mimo `SKIP_COLLECTIONS` (`attachments_index`, `sync_state`) a `SKIP_MAILBOXES`. |
| `--limit N` | ne | int | (bez limitu) | Limit emailů na schránku (test) |
## SKIP_MAILBOXES (hardcoded)
| Schránka | Důvod |
|---|---|
| `vbuzalka@its.jnj.com` | JNJ tenant, nemáme Graph API přístup. Při běhu bez `--mailbox` se tiše přeskočí. S explicitním `--mailbox vbuzalka@its.jnj.com` skript skončí exit kódem 2. |
## Varianty volání
```bash
# Všechny schránky (mimo SKIP_MAILBOXES):
docker exec -it python-runner python /scripts/4_unwrap_smime_v1.0.py
# Jedna schránka:
docker exec -it python-runner python /scripts/4_unwrap_smime_v1.0.py --mailbox ordinace@buzalkova.cz
# Test 10 emailů:
docker exec -it python-runner python /scripts/4_unwrap_smime_v1.0.py --mailbox ordinace@buzalkova.cz --limit 10
# Plný běh na pozadí, log do souboru:
docker exec -d python-runner bash -c "python /scripts/4_unwrap_smime_v1.0.py > /scripts/unwrap_smime.log 2>&1"
```
## Závislosti
```bash
docker exec python-runner pip install asn1crypto
```
## Sledování průběhu
```bash
docker exec -it python-runner tail -f /scripts/unwrap_smime.log
```