mirror of
https://github.com/lordmathis/lemma.git
synced 2025-11-05 15:44:21 +00:00
41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package filesystem
|
|
|
|
import (
|
|
"fmt"
|
|
"novamd/internal/gitutils"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// FileSystem represents the file system structure.
|
|
type FileSystem struct {
|
|
RootDir string
|
|
GitRepos map[int]map[int]*gitutils.GitRepo // map[userID]map[workspaceID]*gitutils.GitRepo
|
|
}
|
|
|
|
// New creates a new FileSystem instance.
|
|
func New(rootDir string) *FileSystem {
|
|
return &FileSystem{
|
|
RootDir: rootDir,
|
|
GitRepos: make(map[int]map[int]*gitutils.GitRepo),
|
|
}
|
|
}
|
|
|
|
// ValidatePath validates the given path and returns the cleaned path if it is valid.
|
|
func (fs *FileSystem) ValidatePath(userID, workspaceID int, path string) (string, error) {
|
|
workspacePath := fs.GetWorkspacePath(userID, workspaceID)
|
|
fullPath := filepath.Join(workspacePath, path)
|
|
cleanPath := filepath.Clean(fullPath)
|
|
|
|
if !strings.HasPrefix(cleanPath, workspacePath) {
|
|
return "", fmt.Errorf("invalid path: outside of workspace")
|
|
}
|
|
|
|
return cleanPath, nil
|
|
}
|
|
|
|
// GetTotalFileStats returns the total file statistics for the file system.
|
|
func (fs *FileSystem) GetTotalFileStats() (*FileCountStats, error) {
|
|
return fs.countFilesInPath(fs.RootDir)
|
|
}
|