Make remote config retrieval more robust

This commit is contained in:
Sam Partington
2020-06-26 15:56:33 +01:00
parent 51becd2cf8
commit 0607771cc2
6 changed files with 149 additions and 9 deletions

19
lib/config-utils.js generated
View File

@@ -153,6 +153,14 @@ function getConfigFileRepoFormatInvalidMessage(configFile) {
return error;
}
exports.getConfigFileRepoFormatInvalidMessage = getConfigFileRepoFormatInvalidMessage;
function getConfigFileFormatInvalidMessage(configFile) {
return 'The configuration file "' + configFile + '" could not be read';
}
exports.getConfigFileFormatInvalidMessage = getConfigFileFormatInvalidMessage;
function getConfigFileDirectoryGivenMessage(configFile) {
return 'The configuration file "' + configFile + '" looks like a directory, not a file';
}
exports.getConfigFileDirectoryGivenMessage = getConfigFileDirectoryGivenMessage;
function getConfigFilePropertyError(configFile, property, error) {
return 'The configuration file "' + configFile + '" is invalid: property "' + property + '" ' + error;
}
@@ -256,11 +264,16 @@ async function getRemoteConfig(configFile) {
path: pieces.groups.path,
ref: pieces.groups.ref,
});
// todo handle response.encoding not being base64
let fileContents;
if ("content" in response.data) {
if ("content" in response.data && response.data.content !== undefined) {
fileContents = response.data.content;
} // todo handle else case
}
else if (Array.isArray(response.data)) {
throw new Error(getConfigFileDirectoryGivenMessage(configFile));
}
else {
throw new Error(getConfigFileFormatInvalidMessage(configFile));
}
return yaml.safeLoad(Buffer.from(fileContents, 'base64').toString('binary'));
}
function getConfigFolder() {