Finanzen: Enable-Banking-Client (JWT, Freigabe, Sitzung, Salden, Umsaetze)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 15:41:54 +00:00
1 parent 53b50011e8
commit 9329318df5
4 files changed
+672 -1

No files matched your search

+36 -1
View File
@@ -98,6 +98,30 @@ const newsSetup = {
priceNickname: 'News-Einrichtung 30 €',
}
// Ticketsystem (WOMS); eigene Konstante, weil auch die Enable-Banking-Rueckkehradresse darauf aufbaut
const womsBaseUrl = (process.env.WOMS_PUBLIC_URL || 'https://ticket.webklar.com').replace(/\/$/, '')
const ENABLE_BANKING_API_BASE = 'https://api.enablebanking.com'
const enableBankingAppId = (process.env.ENABLE_BANKING_APP_ID || '').trim()
const enableBankingKeyPath = (process.env.ENABLE_BANKING_KEY_PATH || '').trim()
/**
* Basisadresse der Enable-Banking-API. ENABLE_BANKING_API_BASE (nur fuer Tests: Nachbau) gilt nur fuer
* 127.0.0.1 oder localhost; jeder andere Wert wird ignoriert, damit ein verirrter Wert den signierten
* Zugriff (JWT) nie an einen fremden Server schickt.
*/
export function resolveEnableBankingApiBase(value) {
const raw = String(value || '').trim()
if (!raw) return ENABLE_BANKING_API_BASE
try {
const url = new URL(raw)
if (['http:', 'https:'].includes(url.protocol) && ['127.0.0.1', 'localhost'].includes(url.hostname)) return url.origin
} catch {
// keine gueltige Adresse: Standard
}
return ENABLE_BANKING_API_BASE
}
export const config = {
port: Number(process.env.PORT) || 3000,
sessionSecret: process.env.SESSION_SECRET || '',
@@ -133,7 +157,7 @@ export const config = {
publicBaseUrl: (process.env.PORTAL_PUBLIC_URL || 'https://project.webklar.com').replace(/\/$/, ''),
// Ticketsystem (WOMS), z. B. fuer den Link "Ticket oeffnen" in der Push-Zeitmail
womsBaseUrl: (process.env.WOMS_PUBLIC_URL || 'https://ticket.webklar.com').replace(/\/$/, ''),
womsBaseUrl,
// Push-Zeitmail: signierte Links zum Eintragen der Zeit eines Git-Pushes (ohne Login)
pushTime: {
@@ -172,6 +196,17 @@ export const config = {
'Gemäß § 19 UStG wird keine Umsatzsteuer berechnet (Kleinunternehmerregelung). WEBklar GbR, Am Schwimmbad 10, 67722 Winnweiler',
},
// Finom-Geschaeftskonto lesend ueber Enable Banking (PSD2). Der private Schluessel liegt als Datei auf dem
// Server (nie im Repo); der Client liest ihn bei jedem Aufruf, ein Schluesseltausch wirkt ohne Neustart.
enableBanking: {
appId: enableBankingAppId,
keyPath: enableBankingKeyPath,
apiBase: resolveEnableBankingApiBase(process.env.ENABLE_BANKING_API_BASE),
redirectUrl: `${womsBaseUrl}/finanzen/bank-callback`,
aspsp: { name: 'Finom', country: 'DE' },
enabled: Boolean(enableBankingAppId && enableBankingKeyPath),
},
abo: {
// Bei jeder Textaenderung an Bedingungen oder Bestellseite hochziehen (wird mit der Zustimmung gespeichert)
termsVersion: '2026-09-30-v5',