Files
Mind-o-Mat/scripts/token-gen.mjs
T
Jannik d7b1acbe33
CI / test (push) Canceled after 0s
CI / webapp (push) Canceled after 0s
Bonus 17: Sichere API-Key-Speicherung (.env + age-Option)
- .gitignore: Secrets (.env, *.key, *.pem) + Coverage + Temp-Verzeichnisse
- .env.example: Template ohne echte Werte, mit Anleitung
- scripts/token-gen.mjs: HMAC-Bearer-Token-Generator
- package.json: token-gen + build:twa Scripts
- docs/SECRETS.md: komplette Anleitung
  - Lokale Entwicklung (.env)
  - CI (gitea-Repository-Secrets)
  - age-Verschluesselung als optionale Schicht
  - Was NIE tun / was IMMER tun
  - Incident-Response bei geleaktem Secret

Verifiziert:
- token-gen erzeugt Token korrekt (stderr: Token gueltig...)
- 122/122 Tests gruen
- .env.example im Repo, .env ist gitignored
2026-09-05 18:03:04 +02:00

22 lines
756 B
JavaScript

#!/usr/bin/env node
// Token-Generator fuer die Notes-API (Phase 9: Auth)
// Generiert ein Bearer-Token im Format: <timestamp>.<hmac-sha256-hex>
import { createHmac } from 'node:crypto';
const secret = process.env.NOTES_API_TOKEN;
if (!secret) {
console.error('Fehler: NOTES_API_TOKEN nicht gesetzt.');
console.error('Setze die Env-Variable, z. B.:');
console.error(' $env:NOTES_API_TOKEN = "my-secret" # PowerShell');
console.error(' export NOTES_API_TOKEN=my-secret # Bash');
process.exit(1);
}
const ts = Date.now().toString();
const hmac = createHmac('sha256', secret).update(ts).digest('hex');
const token = `${ts}.${hmac}`;
console.log(token);
console.error(`(Token gueltig fuer Bearer-Auth. Secret: ${'*'.repeat(8)})`);