fix(gitignore): tipare de secrete, ca auto-commit-ul să nu mai publice credențiale
Dashboard-ul face `git add -A` + commit + push fără intervenție umană (dashboard/handlers/git.py:110). Regulile pe nume exact acopereau doar fișierele observate, nu clasele lor: `bridge/whatsapp/auth/` era ignorat, dar `auth.bak-*/` nu — așa a ajuns creds.json cu chei de sesiune WhatsApp pe Gitea. Audit: din 21 de nume plauzibile testate (.env.local, credentials.json, token.json, id_rsa, auth-old/, server.pem, cookies.txt, dump.sql, config.json.bak, nohup.out), toate 21 treceau nestingherite. Acum toate sunt prinse. - bridge/whatsapp/auth*/ acoperă orice variantă de director de stare Baileys - .env* (cu excepție pentru .env.example), *.pem, *.key, id_rsa*, id_ed25519* - *token*.json, *credential*.json, client_secret*.json, creds.json, cookies*.txt - backup-uri/dump-uri: *.bak, *.backup, *.orig, *.dump, *.sql, *.tar.gz, *.zip, *.bundle — cu !memory/kb/**/*.bak pentru notițele legitime din KB - nohup.out, core.[0-9]* Verificat în ambele direcții: `git ls-files | git check-ignore --stdin` nu întoarce nimic (niciun fișier tracked nu devine ignorat), iar cele 21 de nume ipotetice sunt acum toate ignorate. Restul auditului e curat: zero secrete în fișierele tracked, config.json fără credențiale (keyring folosit corect), credentials/, dashboard/.env, memory/echo.sqlite și bridge/whatsapp/auth/ deja acoperite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0188YmDTUAzVvZDVh8JL8xSa
This commit is contained in:
46
.gitignore
vendored
46
.gitignore
vendored
@@ -35,5 +35,47 @@ dashboard/status.json
|
|||||||
tools/anaf-monitor/monitor.log
|
tools/anaf-monitor/monitor.log
|
||||||
models/
|
models/
|
||||||
|
|
||||||
# Backup-uri de stare Baileys — conțin creds.json (chei de sesiune WhatsApp)
|
# ── Secrete: TIPARE, nu nume exacte ─────────────────────────────
|
||||||
bridge/whatsapp/auth.bak-*/
|
# Dashboard-ul face `git add -A` (dashboard/handlers/git.py), deci orice fișier
|
||||||
|
# neignorat ajunge automat comis și împins. Regulile pe nume exact au lăsat să
|
||||||
|
# treacă bridge/whatsapp/auth.bak-*/ cu creds.json — chei de sesiune WhatsApp
|
||||||
|
# publicate pe Gitea din 2026-08-22 până la curățarea din 2026-08-31.
|
||||||
|
# Orice regulă nouă de secret se scrie ca tipar, ca varianta de nume să nu scape.
|
||||||
|
|
||||||
|
# Stare Baileys sub orice nume (auth/, auth.bak-*/, auth-old/, auth_backup/)
|
||||||
|
bridge/whatsapp/auth*/
|
||||||
|
|
||||||
|
# Variante de .env (.env.local, .env.bak, dashboard/.env.backup)
|
||||||
|
.env*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# Chei și certificate
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.p12
|
||||||
|
*.pfx
|
||||||
|
id_rsa*
|
||||||
|
id_ed25519*
|
||||||
|
|
||||||
|
# Fișiere de credențiale
|
||||||
|
*token*.json
|
||||||
|
*credential*.json
|
||||||
|
client_secret*.json
|
||||||
|
creds.json
|
||||||
|
cookies*.txt
|
||||||
|
|
||||||
|
# Backup-uri și dump-uri (pot conține orice din cele de mai sus)
|
||||||
|
*.bak
|
||||||
|
*.backup
|
||||||
|
*.orig
|
||||||
|
*.dump
|
||||||
|
*.sql
|
||||||
|
*.tar.gz
|
||||||
|
*.tgz
|
||||||
|
*.zip
|
||||||
|
*.bundle
|
||||||
|
!memory/kb/**/*.bak
|
||||||
|
|
||||||
|
# Gunoi de runtime
|
||||||
|
nohup.out
|
||||||
|
core.[0-9]*
|
||||||
|
|||||||
@@ -103,3 +103,11 @@ Lecții capturate din corectările lui Marius. Citește acest fișier la începu
|
|||||||
- **Nu trece JSON mare printr-o variabilă de shell.** Descrierile Facebook conțin caractere de control care corup variabila (`character not in range`); scrie-l pe disc și parsează fișierul o singură dată. `|| echo Unknown` masca eșecul.
|
- **Nu trece JSON mare printr-o variabilă de shell.** Descrierile Facebook conțin caractere de control care corup variabila (`character not in range`); scrie-l pe disc și parsează fișierul o singură dată. `|| echo Unknown` masca eșecul.
|
||||||
- **Titlurile Facebook încep cu statistici,** nu cu titlul: `830K views · 15K reactions | Titlul real | Pagina`. `split('|')[0]` producea notițe numite `2026-08-31_807k-views-15k-reactions.md`. Sari segmentele de statistici și pe cel egal cu numele paginii.
|
- **Titlurile Facebook încep cu statistici,** nu cu titlul: `830K views · 15K reactions | Titlul real | Pagina`. `split('|')[0]` producea notițe numite `2026-08-31_807k-views-15k-reactions.md`. Sari segmentele de statistici și pe cel egal cu numele paginii.
|
||||||
**Când se aplică:** Orice transcriere video/audio, OCR pe fișiere mari, scraping multi-pagină, build sau inferență ML pornită dintr-un mesaj de chat. Implementare: `scripts/transcribe_video.sh` (`--bg`, `--notify`) + `send_text()` în `tools/discord_send_file.py`.
|
**Când se aplică:** Orice transcriere video/audio, OCR pe fișiere mari, scraping multi-pagină, build sau inferență ML pornită dintr-un mesaj de chat. Implementare: `scripts/transcribe_video.sh` (`--bg`, `--notify`) + `send_text()` în `tools/discord_send_file.py`.
|
||||||
|
|
||||||
|
## Unde există `git add -A`, scrie `.gitignore` cu tipare, nu cu nume exacte
|
||||||
|
**Data:** 2026-08-31
|
||||||
|
**Context:** `bridge/whatsapp/auth.bak-*/` cu `creds.json` (chei de sesiune WhatsApp) a ajuns pe Gitea prin `chore: auto-commit from dashboard`. `.gitignore` avea `bridge/whatsapp/auth/` — regula acoperea directorul viu, nu backup-ul lui. Auditul de după a arătat că **toate** cele 21 de nume plauzibile testate (`.env.local`, `credentials.json`, `id_rsa`, `token.json`, `auth-old/`, `config.json.bak`, `dump.sql`) treceau nestingherite.
|
||||||
|
**Greșeala:** `.gitignore` era o listă de nume exacte observate, nu de clase de fișiere. Într-un repo unde `dashboard/handlers/git.py` face `git add -A` + `commit` + `push` fără intervenție umană, orice fișier neignorat e publicat automat — nu există pasul în care cineva se uită la ce se stagează.
|
||||||
|
**Regula:** Dacă ceva din sistem face `git add -A` neasistat, `.gitignore` e o barieră de securitate, nu o conveniență. Scrie-l pe tipare (`auth*/`, `.env*`, `*token*.json`, `*.bak`, `*.pem`), nu pe nume exacte, și adaugă excepții (`!memory/kb/**/*.bak`) pentru fals pozitivele legitime. Verifică ambele direcții: (1) `git ls-files | git check-ignore --stdin` să nu întoarcă nimic — niciun fișier tracked nu devine ignorat; (2) o listă de nume ipotetice de secrete să fie toate prinse.
|
||||||
|
**Când se aplică:** Orice repo cu auto-commit, dar și înainte de a adăuga un backup/dump lângă un fișier deja ignorat. Întrebarea de reflex: „regula acoperă și variantele de nume ale acestui fișier?"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user