CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Core-Schnittstellen-Vertragstests / contract-tests (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Signaturschluessel der Modul-JWTs liegen verschluesselt in der Mandanten-Datenbank (module_signing_keys), werden von mehreren Instanzen geteilt und rotieren mit Ueberlappung; nicht lesbarer Speicher ergibt 503 statt Token/JWKS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func envMap(m map[string]string) func(string) string {
|
|
return func(k string) string { return m[k] }
|
|
}
|
|
|
|
func TestParseModuleKeyConfig_DefaultsAndBounds(t *testing.T) {
|
|
c, err := parseModuleKeyConfig(envMap(nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if c.ephemeral || c.rotationInterval != 30*24*time.Hour || c.activationDelay != 2*time.Minute || c.refreshInterval != 30*time.Second {
|
|
t.Fatalf("standardwerte: %+v", c)
|
|
}
|
|
|
|
bad := []map[string]string{
|
|
{envKeysEphemeral: "ja"},
|
|
{envKeyRotationDays: "-1"},
|
|
{envKeyRotationDays: "abc"},
|
|
{envKeyActivationSecs: "59"},
|
|
{envKeyActivationSecs: "3601"},
|
|
{envKeyRefreshSecs: "0"},
|
|
{envKeyRefreshSecs: "301"},
|
|
{envKeyActivationSecs: "60", envKeyRefreshSecs: "120"},
|
|
}
|
|
for _, m := range bad {
|
|
if _, err := parseModuleKeyConfig(envMap(m)); err == nil {
|
|
t.Errorf("konfiguration %v wurde akzeptiert", m)
|
|
}
|
|
}
|
|
|
|
c, err = parseModuleKeyConfig(envMap(map[string]string{envKeysEphemeral: "true", envKeyRotationDays: "0"}))
|
|
if err != nil || !c.ephemeral || c.rotationInterval != 0 {
|
|
t.Fatalf("ephemeral/rotation aus: %+v %v", c, err)
|
|
}
|
|
}
|