Skip to content

security: keep config file secret-free - #3

Merged
TimInTech merged 4 commits into
mainfrom
feature/paket-c-open-config
Jun 17, 2026
Merged

security: keep config file secret-free#3
TimInTech merged 4 commits into
mainfrom
feature/paket-c-open-config

Conversation

@TimInTech

Copy link
Copy Markdown
Owner

Was

  • Paket C: Einstellungen können die Konfigurationsdatei öffnen.
  • Secret-Hygiene: config.json speichert keinen echten OpenAI-Key mehr.
  • Der API-Key wird über Umgebungsvariable bzw. lokale ~/.config/blitztext-linux/secrets.env geladen.
  • run.sh und systemd laden die lokale Secret-Umgebung optional.
  • Die GUI zeigt keine echten Secret-Werte.
  • Legacy-Key-Werte werden beim Speichern aus der Config entfernt.
  • README/SECURITY/Tests wurden an das secret-freie Modell angepasst.

Warum

Der Config-Öffnen-Button darf keine Datei öffnen, die echte Secrets enthält. Lokale Secrets bleiben außerhalb des Repos und werden nicht in README, Tests, Logs oder PR-Inhalten ausgegeben.

Tests

  • python3 -m compileall app tests
  • pytest tests/test_config.py tests/test_llm_service.py tests/test_settings_dialog.py -q → 41 passed
  • pytest tests/ -q → 126 passed, 9 skipped
  • bash -n run.sh
  • git diff --check
  • Secret-Scan ohne echte sk-...
  • keine getrackten .env / secrets.env
  • keine Secret-Werte in README.md, SECURITY.md oder Tests

Rollback

  • Secret-Hygiene-Commit zurücknehmen: git revert 1510de7
  • Paket-C-Commit bei Bedarf separat zurücknehmen: git revert 43bc1d0

Hinweise

  • Keine Secret-Werte werden im PR beschrieben oder ausgegeben.
  • Lokale secrets.env darf nicht gelöscht oder committed werden.
  • Rollback auf sehr alte Builds ist nicht nahtlos, falls diese noch Klartext-Key in config.json erwarten.

TimInTech and others added 4 commits June 17, 2026 02:00
Ergänzt im Tab "Allgemein" des SettingsDialog einen Knopf
"Konfigurationsdatei öffnen", der ~/.config/blitztext-linux/config.json
im Standard-Editor öffnet (QDesktopServices.openUrl + QUrl.fromLocalFile).
Fehlt die Datei noch, wird sie zuvor über die bestehende atomare
config.save()-Logik (0o600) angelegt. openUrl-Fehlschlag und Exceptions
werden mit Nutzer-Dialog abgefangen, statt still zu scheitern.

Damit sind erweiterte Prompt-/Workflow-Anpassungen (über die Settings-Felder
hinaus) ohne Terminal aus der GUI erreichbar (Paket C, Variante A).

- app/blitztext_linux.py: Imports (QUrl, QDesktopServices), Button + Slot
- tests/test_settings_dialog.py: 5 Tests (openUrl/QMessageBox gemockt,
  ohne XDG-Override): Datei-Anlage, korrekter Pfad, kein Re-Save bei
  vorhandener Datei, save()-Fehler, openUrl=False
- README: Hinweis im vorhandenen Abschnitt "Konfiguration"
Der CI-Secret-Scan flaggt das Muster `OPENAI_API_KEY=` auch in der
Dokumentation. Die secrets.env-Anleitung beschreibt das Zeilenformat jetzt
ohne den literalen Zuweisungs-Token, sodass die Hygiene-Regel intakt bleibt
und der Scan grün wird. Keine inhaltliche Änderung am Workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Im secret-freien Modell ist der OpenAI-Key ohne gesetzte Umgebungsvariable
leer. Neuere openai-Versionen werfen jedoch bereits im Konstruktor
`openai.OpenAI(api_key="")` einen OpenAIError ("Missing credentials"),
wodurch BlitztextApp und die GUI-Tests beim Start abbrechen.

Der echte Client wird jetzt nur noch bei vorhandenem Key gebaut; ohne Key
greift wie bisher _check_openai() zur Aufrufzeit mit einer klaren
Nutzer-Meldung. Damit startet die App auch ohne Key, und die GUI-Tests
(WHISPER_GUI_TESTS=1) laufen wieder grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@TimInTech

Copy link
Copy Markdown
Owner Author

CI-Stabilisierung (2 zusätzliche Commits)

Nach dem ursprünglichen Push waren zwei CI-Checks rot. Beide wurden als echte Blocker minimal behoben:

  • a33e871 fix(docs): Der Secret-Hygiene-CI-Scan flaggte das Muster OPENAI_API_KEY= auch in der README-Doku. Die secrets.env-Anleitung beschreibt das Zeilenformat jetzt ohne den literalen Zuweisungs-Token. Keine Änderung am Workflow/an den Mustern.
  • 552b377 fix(llm): Im secret-freien Modell ist der Key ohne Env leer. Neuere openai-Versionen werfen schon im Konstruktor openai.OpenAI(api_key="") einen OpenAIError, wodurch die App/GUI-Tests beim Start abbrachen. Der echte Client wird jetzt nur bei vorhandenem Key gebaut; ohne Key greift wie bisher _check_openai() zur Aufrufzeit. Die App startet damit auch ohne Key.

Status: Secret hygiene scan ✅ · Tests 3.11 ✅ · Tests 3.12 ✅ · GitGuardian ✅. Keine Secret-Werte im Diff.

@TimInTech
TimInTech merged commit f74b45b into main Jun 17, 2026
7 checks passed
@TimInTech
TimInTech deleted the feature/paket-c-open-config branch June 17, 2026 11:38
TimInTech added a commit that referenced this pull request Jun 17, 2026
Erhöht die App-Version nach dem Merge von Paket C + Secret-Hygiene (PR #3),
damit Code-Version und das anstehende Release-Tag v0.2.24 übereinstimmen.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant