fix: improve check for user namespace subdirectories

This commit is contained in:
Michael Smith 2025-04-18 21:26:26 +00:00
parent 812dd8faaf
commit 1dcc645b14
4 changed files with 32 additions and 6 deletions

View File

@ -5,9 +5,14 @@ import (
"fmt" "fmt"
"os" "os"
"path" "path"
"slices"
"strings"
) )
var supportedResourceTypes = []string{"modules", "templates"} var (
supportedResourceTypes = []string{"modules", "templates"}
supportedUserNameSpaceDirectories = append(supportedResourceTypes[:], ".icons", ".images")
)
func validateCoderResourceSubdirectory(dirPath string) []error { func validateCoderResourceSubdirectory(dirPath string) []error {
errs := []error{} errs := []error{}
@ -84,11 +89,32 @@ func validateRegistryDirectory() []error {
allErrs = append(allErrs, err) allErrs = append(allErrs, err)
} }
for _, rType := range supportedResourceTypes { files, err := os.ReadDir(dirPath)
resourcePath := path.Join(dirPath, rType) if err != nil {
errs := validateCoderResourceSubdirectory(resourcePath) allErrs = append(allErrs, err)
if len(errs) != 0 { continue
allErrs = append(allErrs, errs...) }
for _, f := range files {
// Todo: Decide if there's anything more formal that we want to
// ensure about non-directories scoped to user namespaces
if !f.IsDir() {
continue
}
segment := f.Name()
filePath := path.Join(dirPath, segment)
if !slices.Contains(supportedUserNameSpaceDirectories, segment) {
allErrs = append(allErrs, fmt.Errorf("%q: only these sub-directories are allowed at top of user namespace: [%s]", filePath, strings.Join(supportedUserNameSpaceDirectories, ", ")))
continue
}
if slices.Contains(supportedResourceTypes, segment) {
errs := validateCoderResourceSubdirectory(filePath)
if len(errs) != 0 {
allErrs = append(allErrs, errs...)
}
} }
} }
} }