test(260923-dhh): Proxmox-Modul Aufgabe 2 - Benutzer/Passwort, Fehlerklassen, Nur-Lesen-Riegel

- proxmox-auth.ts: loginTicket (die einzige nicht-lesende Anfrage im
  Modul, POST /access/ticket) und buildTicketCookieHeader je Produkt
  (Cookie-Namen als benannte Konstante, Annahme A2 kommentiert)
- proxmox-client.service.ts: classifyFailure (401->zugang, 403->rechte,
  404->antwortform, 5xx->server, Netzfehler->netz, Zertifikatsfehler->
  zertifikat) und parseJsonLenient (kein Wurf bei Nicht-JSON); kein
  explizites method-Feld mehr an proxmoxGet (GET ist Grundwert)
- proxmox.service.ts: Passwort-Zweig via Ticket-Anmeldung, genau ein
  zweiter Versuch nach 401 (Ticket-Ablauf alle zwei Stunden kein
  Fehlalarm)
- proxmox-nur-lesen.spec.ts: maschinischer Riegel zu D-01 — genau eine
  Stelle (proxmox-auth.ts) uebergibt ein Anfrageverfahren an
  undiciFetch, jeder Proxmox-Pfad ausserhalb laeuft ueber proxmoxGet

Tore: api 1270/1270 (>=1240), type-check 4/4.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 10:23:22 +02:00
parent 3a1bfd943e
commit 4f8a368c9e
5 changed files with 729 additions and 24 deletions
@@ -175,8 +175,12 @@ export async function proxmoxGet(
const url = `${target.baseUrl.replace(/\/+$/, '')}${path}`;
try {
// KEIN `method`-Feld — GET ist der Grundwert von `fetch`/`undiciFetch`
// selbst, es gibt hierfuer keinen Parameter (D-01). `proxmox-nur-
// lesen.spec.ts` zaehlt Stellen, die ein Anfrageverfahren EXPLIZIT an
// `undiciFetch` uebergeben — die einzige solche Stelle im Modul ist
// `loginTicket` in `proxmox-auth.ts` (POST, Ticket-Anmeldung, D-01).
const response = await undiciFetch(url, {
method: 'GET', // fest verdrahtet — D-01, kein Parameter dafuer
dispatcher,
signal: controller.signal,
headers: target.headers,