This commit is contained in:
Linrador 2026-06-24 09:29:15 +02:00
parent a12d9dd1a9
commit fe83e30725
5 changed files with 39 additions and 2 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -133,12 +133,43 @@ func buildLocalPostgresDSN(s RecorderSettings) (string, error) {
return u.String(), nil return u.String(), nil
} }
func ensureLocalPostgresCluster(ctx context.Context, dataDir string, port int, user, database string) error { func ensureLocalPostgresDataDir(s RecorderSettings) (string, error) {
normalizePostgresSettings(&s)
if s.PostgresMode != postgresModeLocal {
return "", nil
}
dataDir, err := resolvePathRelativeToApp(s.PostgresDataDir)
if err != nil {
return "", err
}
if err := ensureLocalPostgresDataDirPath(dataDir); err != nil {
return "", err
}
return dataDir, nil
}
func ensureLocalPostgresDataDirPath(dataDir string) error {
dataDir = filepath.Clean(strings.TrimSpace(dataDir)) dataDir = filepath.Clean(strings.TrimSpace(dataDir))
if dataDir == "" { if dataDir == "" {
return appErrorf("postgresDataDir ist leer") return appErrorf("postgresDataDir ist leer")
} }
if err := os.MkdirAll(filepath.Dir(dataDir), 0755); err != nil { if err := os.MkdirAll(dataDir, 0755); err != nil {
return err
}
info, err := os.Stat(dataDir)
if err != nil {
return err
}
if !info.IsDir() {
return appErrorf("postgresDataDir ist kein Ordner: %s", dataDir)
}
return nil
}
func ensureLocalPostgresCluster(ctx context.Context, dataDir string, port int, user, database string) error {
dataDir = filepath.Clean(strings.TrimSpace(dataDir))
if err := ensureLocalPostgresDataDirPath(dataDir); err != nil {
return err return err
} }

View File

@ -495,6 +495,12 @@ func recordSettingsHandler(w http.ResponseWriter, r *http.Request) {
http.Error(w, "Database URL fehlt", http.StatusBadRequest) http.Error(w, "Database URL fehlt", http.StatusBadRequest)
return return
} }
if in.PostgresMode == postgresModeLocal {
if _, err := ensureLocalPostgresDataDir(in.RecorderSettings); err != nil {
http.Error(w, "konnte PostgreSQL-Datenordner nicht erstellen: "+err.Error(), http.StatusBadRequest)
return
}
}
// 2) Migration: wenn in.DatabaseURL ein Passwort enthält, extrahieren // 2) Migration: wenn in.DatabaseURL ein Passwort enthält, extrahieren
// und URL ohne Passwort zurückschreiben. // und URL ohne Passwort zurückschreiben.