diff --git a/cmd/server/main.go b/cmd/server/main.go index 78acf4c..8bf7bf0 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -366,6 +366,41 @@ func migrateOldPaths(st *store.Store, dataDir string, logger *slog.Logger) { } } + // Migrate WebDAV files from old flat structure (dataDir/files//) + // to new nested structure (dataDir//files/) + filesRoot := filepath.Join(dataDir, "files") + if _, err := os.Stat(filesRoot); err == nil { + if entries, er := os.ReadDir(filesRoot); er == nil { + for _, entry := range entries { + if !entry.IsDir() { + continue + } + username := entry.Name() + oldWebdavPath := filepath.Join(filesRoot, username) + newUserDir := filepath.Join(dataDir, username) + newWebdavPath := filepath.Join(newUserDir, "files") + + if _, e := os.Stat(oldWebdavPath); e != nil { + continue + } + if _, e := os.Stat(newWebdavPath); !os.IsNotExist(e) { + continue + } + + logger.Info("Migrating webdav files", "user", username, "from", oldWebdavPath, "to", newWebdavPath) + if mkErr := os.MkdirAll(filepath.Dir(newWebdavPath), 0755); mkErr != nil { + logger.Warn("Failed to create directory for webdav migration", "path", newWebdavPath, "error", mkErr) + continue + } + if mvErr := moveDirContent(oldWebdavPath, newWebdavPath); mvErr != nil { + logger.Warn("Failed to migrate webdav files", "user", username, "error", mvErr) + } else { + logger.Info("webdav files migration complete", "user", username) + } + } + } + } + logger.Info("Legacy structure check complete") }