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
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
66 lines
1.6 KiB
Go
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))
|
|
}
|