diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-04-27 22:08:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 22:08:47 +0200 |
commit | cd04e0c3a06499971c82678e88510b257d4d6faa (patch) | |
tree | 0243a5e675eacf15d466409964e7789058e4a41a /config-application-package/src/main/java | |
parent | f455d83e0556dcc783fdafdc78898cb5dc1ebb6e (diff) | |
parent | 24ec516e9fead0b12fa20a9ed282cb57b2c4f817 (diff) |
Merge pull request #22323 from vespa-engine/hmusum/validate-file-extension-for-app-files-2v7.579.27
Validate file extension for app files, part 2
Diffstat (limited to 'config-application-package/src/main/java')
-rw-r--r-- | config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index 41896468769..ce33332cf13 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -89,6 +89,7 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { private static final Logger log = Logger.getLogger(FilesApplicationPackage.class.getName()); private static final String META_FILE_NAME = ".applicationMetaData"; + private static final Map<Path, Set<String>> validFileExtensions; private final File appDir; private final File preprocessedDir; @@ -750,28 +751,43 @@ public class FilesApplicationPackage extends AbstractApplicationPackage { /* Validates that files in application dir and subdirectories have a known extension */ public void validateFileExtensions(boolean throwIfInvalid) { - // TODO: Define this for all subdirs - Map<Path, Set<String>> validFileSuffixes = Map.of( - QUERY_PROFILES_DIR, Set.of(".xml"), - RULES_DIR, Set.of(".sr"), - SCHEMAS_DIR, Set.of(".sd", ".expression"), - SEARCH_DEFINITIONS_DIR, Set.of(".sd", ".expression")); - - validFileSuffixes.forEach((key, value) -> { + validFileExtensions.forEach((key, value) -> { java.nio.file.Path path = appDir.toPath().resolve((key.toFile().toPath())); File dir = path.toFile(); if ( ! dir.exists() || ! dir.isDirectory()) return; try (var filesInPath = Files.list(path)) { - filesInPath.forEach(f -> { - validateFileSuffix(path, f, value, throwIfInvalid); - }); + filesInPath.forEach(f -> validateFileSuffix(path, f, value, throwIfInvalid)); } catch (IOException e) { log.log(Level.WARNING, "Unable to list files in " + dir, e); } }); } + static { + validFileExtensions = Map.ofEntries( + Map.entry(Path.fromString(COMPONENT_DIR), Set.of(".jar")), + Map.entry(CONSTANTS_DIR, Set.of(".json", ".json.lz4")), + Map.entry(Path.fromString(DOCPROCCHAINS_DIR), Set.of(".xml")), + Map.entry(MODELS_DIR, Set.of(".model")), + Map.entry(PAGE_TEMPLATES_DIR, Set.of(".xml")), + Map.entry(Path.fromString(PROCESSORCHAINS_DIR), Set.of(".xml")), + Map.entry(QUERY_PROFILES_DIR, Set.of(".xml")), + Map.entry(QUERY_PROFILE_TYPES_DIR, Set.of(".xml")), + Map.entry(Path.fromString(ROUTINGTABLES_DIR), Set.of(".xml")), + Map.entry(RULES_DIR, Set.of(RULES_NAME_SUFFIX)), + // TODO: Might have rank profiles in subdirs: schema-name]/[rank-profile].profile + Map.entry(SCHEMAS_DIR, Set.of(SD_NAME_SUFFIX, RANKEXPRESSION_NAME_SUFFIX)), + Map.entry(Path.fromString(SEARCHCHAINS_DIR), Set.of(".xml")), + // TODO: Might have rank profiles in subdirs: [schema-name]/[rank-profile].profile + Map.entry(SEARCH_DEFINITIONS_DIR, Set.of(SD_NAME_SUFFIX, RANKEXPRESSION_NAME_SUFFIX)), + Map.entry(SECURITY_DIR, Set.of(".pem"))); + + // TODO: Files that according to doc (https://docs.vespa.ai/en/reference/schema-reference.html) can be anywhere in the application package: + // constant tensors (.json, .json.lz4) + // onnx model files (.onnx) + } + private void validateFileSuffix(java.nio.file.Path dir, java.nio.file.Path pathToFile, Set<String> allowedSuffixes, boolean throwIfInvalid) { String fileName = pathToFile.toFile().getName(); if (allowedSuffixes.stream().noneMatch(fileName::endsWith)) { |