Files
patrickandClaude Sonnet 5 637998a322
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 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
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
TEN-12: import-verzeichnisse-je-tenant-in-der-registry-fuehren
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 00:17:27 +02:00

40 lines
1.9 KiB
Go

package main
import (
"net/http"
"gitea.perlbach24.de/scripte/nexarch/internal/svcauth"
)
// registerAdminRoutes schuetzt die Mandantenverwaltung mit Dienst-Token und
// expliziter CORS-Ursprungsliste (QA-15 F-03 / LIC-07). Der Parameter
// `superadmin` bleibt die vom authentifizierten Aufrufer behauptete Kennung
// (Audit-Akteur); eine Sitzungs-basierte Superadmin-Anmeldung ist Folgearbeit.
func registerAdminRoutes(mux *http.ServeMux, token string, origins []string, list, detail, settings, lifecycle http.HandlerFunc) {
mux.HandleFunc("/admin/tenants", svcauth.Protect(token, origins, "GET, OPTIONS", list))
mux.HandleFunc("/admin/tenants/detail", svcauth.Protect(token, origins, "GET, OPTIONS", detail))
mux.HandleFunc("/admin/tenants/settings", svcauth.Protect(token, origins, "POST, OPTIONS", settings))
mux.HandleFunc("/admin/tenants/lifecycle", svcauth.Protect(token, origins, "POST, OPTIONS", lifecycle))
}
// registerImportDirectoryRoutes bindet TEN-12s Verwaltungsendpunkte (Add/
// Remove) ein — dieselbe Superadmin-per-Parameter-Authentifizierung wie
// registerAdminRoutes, siehe internal/tenantimportdir.Store.requireSuperadmin.
// EIN unpraefigiertes Pfadmuster (wie die uebrigen Routen dieser Datei),
// die Methode wird im Handler unterschieden — ein methodenpraefigiertes
// Muster ("POST /..."/"DELETE /...") wuerde die OPTIONS-Preflight-Anfrage
// der CORS-Behandlung (svcauth.CORS) am Mux vorbei mit 405 beantworten,
// bevor sie den Handler ueberhaupt erreicht.
func registerImportDirectoryRoutes(mux *http.ServeMux, token string, origins []string, add, remove http.HandlerFunc) {
mux.HandleFunc("/admin/tenants/{slug}/import-directories", svcauth.Protect(token, origins, "POST, DELETE, OPTIONS", func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodPost:
add(w, r)
case http.MethodDelete:
remove(w, r)
default:
w.WriteHeader(http.StatusMethodNotAllowed)
}
}))
}