Files
nexarch/scripts/e2e-seed/main.go
patrickandClaude Sonnet 5 598d52a418
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
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
API-15/RBAC-09: ende-zu-ende-nachweis core -> dms (kontodienst, policy-dienst, dms-kette)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 22:35:27 +02:00

66 lines
1.6 KiB
Go

package main
import (
"context"
"log"
"os"
"github.com/jackc/pgx/v5/pgxpool"
"gitea.perlbach24.de/scripte/nexarch/internal/auth"
"gitea.perlbach24.de/scripte/nexarch/internal/rbac"
"gitea.perlbach24.de/scripte/nexarch/internal/user"
)
func main() {
dsn := os.Getenv("NEXARCH_E2E_TENANT_DSN")
password := os.Getenv("NEXARCH_E2E_PASSWORD")
if dsn == "" || password == "" {
log.Fatal("NEXARCH_E2E_TENANT_DSN und NEXARCH_E2E_PASSWORD muessen gesetzt sein")
}
ctx := context.Background()
pool, err := pgxpool.New(ctx, dsn)
if err != nil {
log.Fatalf("db: %v", err)
}
defer pool.Close()
hash, err := auth.HashPassword(password)
if err != nil {
log.Fatalf("hash: %v", err)
}
users := user.NewTenantUserStore(pool)
roles := rbac.NewStore(pool)
seed := []struct {
email string
role rbac.Role
inactive bool
}{
{"alice@e2e.test", rbac.RoleUser, false},
{"bob@e2e.test", rbac.RoleTenantAdmin, false},
{"carol@e2e.test", "", false},
{"dave@e2e.test", rbac.RoleUser, true},
}
for _, s := range seed {
u, err := users.Create(ctx, s.email, s.email)
if err != nil {
log.Fatalf("%s: %v", s.email, err)
}
if err := users.SetPasswordHash(ctx, u.ID, hash); err != nil {
log.Fatalf("%s passwort: %v", s.email, err)
}
if s.role != "" {
if _, err := roles.Assign(ctx, u.ID, s.role, "e2e-seed"); err != nil {
log.Fatalf("%s rolle: %v", s.email, err)
}
}
if s.inactive {
if _, err := pool.Exec(ctx, `UPDATE users SET status = 'inactive' WHERE id = $1`, u.ID); err != nil {
log.Fatalf("%s deaktivieren: %v", s.email, err)
}
}
}
log.Printf("e2e-seed: %d benutzer angelegt", len(seed))
}