- .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
22 lines
756 B
JavaScript
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)})`);
|