API-07: test-fix — signaturvergleich gegen tatsaechlich empfangene bytes (jsonb-kanonisierung)
This commit is contained in:
@@ -27,7 +27,6 @@ func setupTest(t *testing.T) (*Store, *pgxpool.Pool, func()) {
|
|||||||
t.Fatalf("pool: %v", err)
|
t.Fatalf("pool: %v", err)
|
||||||
}
|
}
|
||||||
if _, err := pool.Exec(ctx, `
|
if _, err := pool.Exec(ctx, `
|
||||||
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
||||||
CREATE TABLE IF NOT EXISTS webhook_subscriptions (
|
CREATE TABLE IF NOT EXISTS webhook_subscriptions (
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), event_type TEXT NOT NULL,
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), event_type TEXT NOT NULL,
|
||||||
target_url TEXT NOT NULL, secret TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
target_url TEXT NOT NULL, secret TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||||
@@ -99,13 +98,21 @@ func TestEnqueueAndProcessDue_DeliversSuccessfully(t *testing.T) {
|
|||||||
t.Fatalf("status = %q, want %q", status, StatusDelivered)
|
t.Fatalf("status = %q, want %q", status, StatusDelivered)
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedPayload, _ := json.Marshal(map[string]string{"file_id": "42"})
|
// Postgres' JSONB-Spalte kann die Byte-Repraesentation des Payloads
|
||||||
expectedSig := Sign("geheimes-secret", expectedPayload)
|
// gegenueber dem urspruenglichen json.Marshal kanonisieren (z.B.
|
||||||
if receivedSignature != expectedSig {
|
// Leerzeichen) — das ist unschaedlich, denn der Dispatcher signiert
|
||||||
t.Fatalf("empfangene signatur = %q, want %q", receivedSignature, expectedSig)
|
// IMMER exakt die Bytes, die er auch sendet. Die Pruefung vergleicht
|
||||||
|
// deshalb Signatur gegen tatsaechlich empfangene Bytes (Selbstkonsistenz),
|
||||||
|
// nicht gegen eine unabhaengig neu marshalte Referenz.
|
||||||
|
if !VerifySignature("geheimes-secret", receivedBody, receivedSignature) {
|
||||||
|
t.Fatalf("empfangene signatur %q passt nicht zum empfangenen payload %q", receivedSignature, receivedBody)
|
||||||
}
|
}
|
||||||
if string(receivedBody) != string(expectedPayload) {
|
var decoded map[string]string
|
||||||
t.Fatalf("empfangener payload = %q, want %q", receivedBody, expectedPayload)
|
if err := json.Unmarshal(receivedBody, &decoded); err != nil {
|
||||||
|
t.Fatalf("empfangener payload nicht als json lesbar: %v", err)
|
||||||
|
}
|
||||||
|
if decoded["file_id"] != "42" {
|
||||||
|
t.Fatalf("empfangener payload = %v, want file_id=42", decoded)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user