diff --git a/backend/dist/nsfwapp-linux-amd64 b/backend/dist/nsfwapp-linux-amd64 index e1a033d..0ffc542 100644 Binary files a/backend/dist/nsfwapp-linux-amd64 and b/backend/dist/nsfwapp-linux-amd64 differ diff --git a/backend/dist/nsfwapp.exe b/backend/dist/nsfwapp.exe index 68c1079..e304c1b 100644 Binary files a/backend/dist/nsfwapp.exe and b/backend/dist/nsfwapp.exe differ diff --git a/backend/dist/nsfwapp_amd64.deb b/backend/dist/nsfwapp_amd64.deb index 1d18395..7173f0b 100644 Binary files a/backend/dist/nsfwapp_amd64.deb and b/backend/dist/nsfwapp_amd64.deb differ diff --git a/backend/postgres_local.go b/backend/postgres_local.go index e106c8f..cfe0f8c 100644 --- a/backend/postgres_local.go +++ b/backend/postgres_local.go @@ -133,12 +133,43 @@ func buildLocalPostgresDSN(s RecorderSettings) (string, error) { 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)) if dataDir == "" { 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 } diff --git a/backend/settings.go b/backend/settings.go index f184f1c..3694ef2 100644 --- a/backend/settings.go +++ b/backend/settings.go @@ -495,6 +495,12 @@ func recordSettingsHandler(w http.ResponseWriter, r *http.Request) { http.Error(w, "Database URL fehlt", http.StatusBadRequest) 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 // und URL ohne Passwort zurückschreiben.