Skip to content

Commit 1dcc645

Browse files
committed
fix: improve check for user namespace subdirectories
1 parent 812dd8f commit 1dcc645

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

cmd/readmevalidation/repoStructure.go

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@ import (
55
"fmt"
66
"os"
77
"path"
8+
"slices"
9+
"strings"
810
)
911

10-
var supportedResourceTypes = []string{"modules", "templates"}
12+
var (
13+
supportedResourceTypes = []string{"modules", "templates"}
14+
supportedUserNameSpaceDirectories = append(supportedResourceTypes[:], ".icons", ".images")
15+
)
1116

1217
func validateCoderResourceSubdirectory(dirPath string) []error {
1318
errs := []error{}
@@ -84,11 +89,32 @@ func validateRegistryDirectory() []error {
8489
allErrs = append(allErrs, err)
8590
}
8691

87-
for _, rType := range supportedResourceTypes {
88-
resourcePath := path.Join(dirPath, rType)
89-
errs := validateCoderResourceSubdirectory(resourcePath)
90-
if len(errs) != 0 {
91-
allErrs = append(allErrs, errs...)
92+
files, err := os.ReadDir(dirPath)
93+
if err != nil {
94+
allErrs = append(allErrs, err)
95+
continue
96+
}
97+
98+
for _, f := range files {
99+
// Todo: Decide if there's anything more formal that we want to
100+
// ensure about non-directories scoped to user namespaces
101+
if !f.IsDir() {
102+
continue
103+
}
104+
105+
segment := f.Name()
106+
filePath := path.Join(dirPath, segment)
107+
108+
if !slices.Contains(supportedUserNameSpaceDirectories, segment) {
109+
allErrs = append(allErrs, fmt.Errorf("%q: only these sub-directories are allowed at top of user namespace: [%s]", filePath, strings.Join(supportedUserNameSpaceDirectories, ", ")))
110+
continue
111+
}
112+
113+
if slices.Contains(supportedResourceTypes, segment) {
114+
errs := validateCoderResourceSubdirectory(filePath)
115+
if len(errs) != 0 {
116+
allErrs = append(allErrs, errs...)
117+
}
92118
}
93119
}
94120
}
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)