EnvHelper

Lokale Windows-App zum sauberen Ausfuellen von .env-Vorlagen.

Platform Stack Build Version

--- ## Inhalt - [Kurzbeschreibung](#kurzbeschreibung) - [Features](#features) - [Workflow](#workflow) - [Beispiel](#beispiel) - [Erkennung](#erkennung) - [Standardwerte](#standardwerte) - [Download und Artefakte](#download-und-artefakte) - [Entwicklung](#entwicklung) - [Windows Build](#windows-build) - [Sicherheit](#sicherheit) - [Projektinfos](#projektinfos) --- ## Kurzbeschreibung EnvHelper liest `.env`-Dateien oder reinen Text ein, erkennt `CHANGE_ME`-Platzhalter und erzeugt passende Werte im erwarteten Format. Gleiche Platzhalter erhalten denselben Wert, damit zusammenhaengende Variablen wie `DATABASE_URL` und `POSTGRES_PASSWORD` synchron bleiben. Die App arbeitet lokal als Desktop-Tool. Es werden keine Secrets an externe Dienste gesendet. --- ## Features | Bereich | Beschreibung | | --- | --- | | Datei und Text | `.env` laden, Text direkt einfuegen, Ergebnis kopieren oder speichern | | Placeholder | Erkennt `CHANGE_ME...` Werte und ersetzt sie formatbewusst | | Konsistenz | Gleiche Placeholder werden im gesamten Output identisch ersetzt | | Formate | Passwoerter, Secrets, Base64, Hex, UUID, Ports, URLs, E-Mail, API-Key-Praefixe | | Standardwerte | Erkennt naheliegende Defaults automatisch und erlaubt manuelle Overrides | | Desktop UI | Kompakte Windows-App mit nativer Fensterleiste, Darkmode und Settings | | Sprachen | Deutsch, Englisch, Spanisch, Franzoesisch, Niederlaendisch | | Build | Windows Setup und Portable EXE ueber Gitea Runner | --- ## Workflow ```text 1. .env Datei laden oder Text einfuegen 2. Automatische Standardwerte pruefen oder eigene Defaults ergaenzen 3. CHANGE_ME Platzhalter generieren lassen 4. Output kopieren oder als neue .env speichern ``` ```text Input Verarbeitung Output ----- ------------ ------ DATABASE_URL=... Placeholder erkennen DATABASE_URL=... POSTGRES_PASSWORD=... -> Format ableiten -> POSTGRES_PASSWORD=... SESSION_SECRET=... Werte lokal erzeugen SESSION_SECRET=... ``` --- ## Beispiel Eingabe: ```env APP_PORT=3000 NODE_ENV=production PUBLIC_BASE_URL=CHANGE_ME_PUBLIC_URL DATABASE_URL=postgresql://app_user:CHANGE_ME_POSTGRES_PASSWORD@postgres:5432/app_db POSTGRES_PASSWORD=CHANGE_ME_POSTGRES_PASSWORD SESSION_SECRET=CHANGE_ME_AT_LEAST_32_RANDOM_CHARACTERS ENCRYPTION_KEY_BASE64=CHANGE_ME_32_RANDOM_BYTES_AS_BASE64 BOOTSTRAP_ADMIN_EMAIL=CHANGE_ME_EMAIL BOOTSTRAP_ADMIN_PASSWORD=CHANGE_ME_LONG_INITIAL_ADMIN_PASSWORD ``` Moeglicher Output: ```env APP_PORT=3000 NODE_ENV=production PUBLIC_BASE_URL=https://example.local DATABASE_URL=postgresql://app_user:K2d8rF7s...@postgres:5432/app_db POSTGRES_PASSWORD=K2d8rF7s... SESSION_SECRET=n9pS...urlSafeSecret ENCRYPTION_KEY_BASE64=4G8t...base64Value BOOTSTRAP_ADMIN_EMAIL=admin@example.local BOOTSTRAP_ADMIN_PASSWORD=Wz4...strongPassword ``` Die echten Werte werden zufaellig lokal erzeugt. --- ## Erkennung EnvHelper priorisiert den Inhalt des Platzhalters vor dem umgebenden Variablennamen. Dadurch wird zum Beispiel `CHANGE_ME_POSTGRES_PASSWORD` innerhalb einer `DATABASE_URL` als Passwort erkannt und nicht faelschlich als URL. Unterstuetzte Muster sind unter anderem: | Muster | Ergebnis | | --- | --- | | `CHANGE_ME_POSTGRES_PASSWORD` | starkes URL-sicheres Passwort | | `CHANGE_ME_32_RANDOM_BYTES_AS_BASE64` | 32 zufaellige Bytes als Base64 | | `CHANGE_ME_HEX_TOKEN` | zufaellige Bytes als Hex | | `CHANGE_ME_UUID` | UUID v4 | | `CHANGE_ME_PUBLIC_URL` | HTTPS URL | | `CHANGE_ME_EMAIL` | E-Mail-Adresse | | `STRIPE_SECRET_KEY=CHANGE_ME` | Stripe-artiger `sk_test_...` Wert | | `STRIPE_WEBHOOK_SECRET=CHANGE_ME` | Stripe-artiger `whsec_...` Wert | | `AWS_ACCESS_KEY_ID=CHANGE_ME` | AWS/S3-artiges Access-Key-ID Format | Weitere Heuristiken decken typische `.env.example`-Variablen fuer SMTP, S3/MinIO, Redis, RabbitMQ, CORS, Log-Level, Environment-Flags und API Keys ab. --- ## Standardwerte Standardwerte werden in einer eigenen Sektion angezeigt. Die App erkennt naheliegende Defaults automatisch, zum Beispiel: | Key | Default | | --- | --- | | `BOOTSTRAP_ADMIN_EMAIL` | `admin@example.local` | | `NODE_ENV` | `production` | | `LOG_LEVEL` | `info` | | `SMTP_PORT` | `587` | | `S3_REGION` | `eu-central-1` | | `REDIS_URL` | `redis://redis:6379/0` | Manuelle Defaults koennen jederzeit hinzugefuegt werden. Sie ueberschreiben automatisch erkannte Defaults und wirken nur auf den Output, nicht auf die Eingabevorlage. --- ## Download und Artefakte Der Windows-Build erzeugt zwei nutzbare Dateien: ```text EnvHelper-0.1.0-setup-x64.exe EnvHelper-0.1.0-portable-x64.exe ``` Die Dateien werden vom Gitea Runner als Actions-Artefakt und als Generic Package veroeffentlicht. --- ## Entwicklung ```bash npm install npm run dev ``` Build pruefen: ```bash npm run build ``` Windows-Paket lokal bauen: ```bash npm run dist:win ``` --- ## Windows Build Der produktive Windows-Build laeuft ueber Gitea Actions: ```text .gitea/workflows/build-windows.yml ``` Der Runner: 1. checkt das Repository aus, 2. installiert Node.js, 3. installiert Wine fuer Windows-Packaging auf Linux, 4. baut Vite, TypeScript und Electron, 5. erzeugt Setup und Portable EXE, 6. laedt Artefakte und Packages nach Gitea hoch. --- ## Sicherheit EnvHelper erzeugt Werte lokal im Renderer mit Web-Crypto. Die App ist ein Helfer fuer `.env`-Vorlagen und ersetzt keine zentrale Secret-Verwaltung fuer produktive Infrastruktur. ### Windows Defender und SmartScreen Windows kann Apps mit unbekanntem Herausgeber blockieren oder verzoegert starten. Das liegt normalerweise an fehlender Reputation oder fehlendem vertrauenswuerdigem Code-Signing-Zertifikat. Der Workflow ist fuer Code Signing vorbereitet: ```text WINDOWS_CSC_LINK WINDOWS_CSC_KEY_PASSWORD ``` `WINDOWS_CSC_LINK` ist das Zertifikat, zum Beispiel als Base64-kodierte `.pfx` Datei oder als erreichbare Zertifikats-URL. `WINDOWS_CSC_KEY_PASSWORD` ist das Passwort des Zertifikats. --- ## Projektinfos | Feld | Wert | | --- | --- | | Autor | `MrSphay` | | Repository | `MrSphay/envHelper` | | App-ID | `de.wilkensxl.envhelper` | | Stack | Electron, React, Vite, TypeScript | | README-Stil | Inspiriert von `andreasbm/readme` |