// policy-api ist der Aufrufpunkt fuer RBAC-06: stellt Core RBAC-02s // Enforcer.Authorize als HTTP-Endpunkt fuer andere, physisch getrennte // Module (DMS, Mail, Archive) bereit. Getrennt von cmd/core aus // demselben Grund wie die anderen *-devserver. package main import ( "context" "log" "net/http" "os" "github.com/jackc/pgx/v5/pgxpool" "gitea.perlbach24.de/scripte/nexarch/internal/policy" "gitea.perlbach24.de/scripte/nexarch/internal/policyapi" ) func main() { dsn := os.Getenv("NEXARCH_POLICY_ADMIN_DSN") if dsn == "" { log.Fatal("NEXARCH_POLICY_ADMIN_DSN muss gesetzt sein") } serviceToken := os.Getenv("NEXARCH_POLICY_SERVICE_TOKEN") if serviceToken == "" { log.Fatal("NEXARCH_POLICY_SERVICE_TOKEN muss gesetzt sein") } addr := os.Getenv("NEXARCH_POLICY_API_LISTEN_ADDR") if addr == "" { addr = "127.0.0.1:8093" } ctx := context.Background() pool, err := pgxpool.New(ctx, dsn) if err != nil { log.Fatalf("datenbankverbindung: %v", err) } defer pool.Close() enforcer := policy.NewEnforcer(policy.NewStore(pool)) mux := http.NewServeMux() policyapi.Mount(mux, enforcer, serviceToken) mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) log.Printf("policy-api: listening on %s", addr) if err := http.ListenAndServe(addr, mux); err != nil { log.Fatalf("http server: %v", err) } }