Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
artifacts.forEach(async function (artifact, index, artifacts) {
let downloaderOptions = configureDownloaderOptions();
if (artifact.resource.type.toLowerCase() === "container") {
var handler = new webHandlers.PersonalAccessTokenCredentialHandler(accessToken);
var isPullRequestFork = tl.getVariable("SYSTEM.PULLREQUEST.ISFORK");
var isPullRequestForkBool = isPullRequestFork ? isPullRequestFork.toLowerCase() == 'true' : false;
var isWin = process.platform === "win32";
var isZipDownloadDisabled = tl.getVariable("SYSTEM.DisableZipDownload");
var isZipDownloadDisabledBool = isZipDownloadDisabled ? isZipDownloadDisabled.toLowerCase() != 'false' : false;
// Disable zip download if selective itemPattern provided
if (downloaderOptions.itemPattern !== "**") {
isZipDownloadDisabledBool = true;
}
if (!isZipDownloadDisabledBool && isWin && isPullRequestForkBool) {
const archiveUrl: string = endpointUrl + "/" + projectId + "/_apis/build/builds/" + buildId + "/artifacts?artifactName=" + artifact.name + "&$format=zip";
console.log(tl.loc("DownloadArtifacts", artifact.name, archiveUrl));
var zipLocation = path.join(downloadPath, artifact.name + ".zip");
caFile: global['_vsts_task_lib_cert_ca'],
certFile: global['_vsts_task_lib_cert_clientcert'],
keyFile: global['_vsts_task_lib_cert_key'],
passphrase: this._readTaskLibSecrets(global['_vsts_task_lib_cert_passphrase']),
};
this.options.cert = certFromEnv;
}
}
// try get ignore SSL error setting from environment variable set by VSTS-Task-Lib if there is no ignore SSL error setting in the options
if (!this.options.ignoreSslError) {
this.options.ignoreSslError = !!global['_vsts_task_lib_skip_cert_validation'];
}
this.rest = new rm.RestClient('vsts-node-api', null, [this.authHandler], this.options);
this.vsoClient = new vsom.VsoClient(defaultUrl, this.rest);
}
artifacts.forEach(async function (artifact, index, artifacts) {
let downloaderOptions = new engine.ArtifactEngineOptions();
downloaderOptions.itemPattern = itemPattern;
downloaderOptions.verbose = isVerbose;
if (parallelLimit) {
downloaderOptions.parallelProcessingLimit = parallelLimit;
}
if (artifact.resource.type.toLowerCase() === "container") {
let downloader = new engine.ArtifactEngine();
var containerParts: string[] = artifact.resource.data.split('/', 3);
if (containerParts.length !== 3) {
throw new Error(tl.loc("FileContainerInvalidArtifactData"));
}
var containerId: number = parseInt(containerParts[1]);
var containerPath: string = containerParts[2];
var itemsUrl = endpointUrl + "/_apis/resources/Containers/" + containerId + "?itemPath=" + encodeURIComponent(containerPath) + "&isShallow=true&api-version=4.1-preview.4";
console.log(tl.loc("DownloadArtifacts", itemsUrl));
var variables = {};
var handler = new webHandlers.PersonalAccessTokenCredentialHandler(accessToken);
var webProvider = new providers.WebProvider(itemsUrl, templatePath, variables, handler);
var fileSystemProvider = new providers.FilesystemProvider(downloadPath);
if (artifact.resource.type.toLowerCase() === "container") {
let downloader = new engine.ArtifactEngine();
var containerParts: string[] = artifact.resource.data.split('/', 3);
if (containerParts.length !== 3) {
throw new Error(tl.loc("FileContainerInvalidArtifactData"));
}
var containerId: number = parseInt(containerParts[1]);
var containerPath: string = containerParts[2];
var itemsUrl = endpointUrl + "/_apis/resources/Containers/" + containerId + "?itemPath=" + encodeURIComponent(containerPath) + "&isShallow=true&api-version=4.1-preview.4";
console.log(tl.loc("DownloadArtifacts", itemsUrl));
var variables = {};
var handler = new webHandlers.PersonalAccessTokenCredentialHandler(accessToken);
var webProvider = new providers.WebProvider(itemsUrl, templatePath, variables, handler);
var fileSystemProvider = new providers.FilesystemProvider(downloadPath);
downloadPromises.push(downloader.processItems(webProvider, fileSystemProvider, downloaderOptions).catch((reason) => {
reject(reason);
}));
}
else if (artifact.resource.type.toLowerCase() === "filepath") {
let downloader = new engine.ArtifactEngine();
let downloadUrl = artifact.resource.data;
let artifactLocation = downloadUrl + '/' + artifact.name;
if (!fs.existsSync(artifactLocation)) {
console.log(tl.loc("ArtifactNameDirectoryNotFound", artifactLocation, downloadUrl));
artifactLocation = downloadUrl;
}
console.log(tl.loc("DownloadArtifacts", artifactLocation));
if (artifact.resource.type.toLowerCase() === "container") {
let downloader = new engine.ArtifactEngine();
var containerParts: string[] = artifact.resource.data.split('/', 3);
if (containerParts.length !== 3) {
throw new Error(tl.loc("FileContainerInvalidArtifactData"));
}
var containerId: number = parseInt(containerParts[1]);
var containerPath: string = containerParts[2];
var itemsUrl = endpointUrl + "/_apis/resources/Containers/" + containerId + "?itemPath=" + encodeURIComponent(containerPath) + "&isShallow=true&api-version=4.1-preview.4";
console.log(tl.loc("DownloadArtifacts", itemsUrl));
var variables = {};
var handler = new webHandlers.PersonalAccessTokenCredentialHandler(accessToken);
var webProvider = new providers.WebProvider(itemsUrl, templatePath, variables, handler);
var fileSystemProvider = new providers.FilesystemProvider(downloadPath);
downloadPromises.push(downloader.processItems(webProvider, fileSystemProvider, downloaderOptions).catch((reason) => {
reject(reason);
}));
}
else if (artifact.resource.type.toLowerCase() === "filepath") {
let downloader = new engine.ArtifactEngine();
let downloadUrl = artifact.resource.data;
let artifactLocation = downloadUrl + '/' + artifact.name;
if (!fs.existsSync(artifactLocation)) {
console.log(tl.loc("ArtifactNameDirectoryNotFound", artifactLocation, downloadUrl));
artifactLocation = downloadUrl;
}
var containerId = parseInt(containerParts[1]);
var containerPath = containerParts.slice(2, containerParts.length).join('/');
if (containerPath == "/") {
//container REST api oddity. Passing '/' as itemPath downloads the first file instead of returning the meta data about the all the files in the root level.
//This happens only if the first item is a file.
containerPath = ""
}
var itemsUrl = endpointUrl + "/_apis/resources/Containers/" + containerId + "?itemPath=" + encodeURIComponent(containerPath) + "&isShallow=true&api-version=4.1-preview.4";
console.log(tl.loc("DownloadArtifacts", artifact.name, itemsUrl));
var variables = {};
var webProvider = new providers.WebProvider(itemsUrl, templatePath, variables, handler);
var fileSystemProvider = new providers.FilesystemProvider(downloadPath);
downloadPromises.push(downloader.processItems(webProvider, fileSystemProvider, downloaderOptions).catch((reason) => {
reject(reason);
}));
}
}
else if (artifact.resource.type.toLowerCase() === "filepath") {
let downloader = new engine.ArtifactEngine();
let downloadUrl = artifact.resource.data;
let artifactName = artifact.name.replace('/', '\\');
let artifactLocation = path.join(downloadUrl, artifactName);
if (!fs.existsSync(artifactLocation)) {
console.log(tl.loc("ArtifactNameDirectoryNotFound", artifactLocation, downloadUrl));
artifactLocation = downloadUrl;
}
async function getArtifactsFromUrl(artifactQueryUrl: string, strictSSL: boolean, localPathRoot: string, itemPattern: string, handler: handlers.BasicCredentialHandler, variables: { [key: string]: any }) {
console.log(tl.loc('ArtifactDownloadUrl', artifactQueryUrl));
var templatePath = path.join(__dirname, 'jenkins.handlebars.txt');
var webProvider = new providers.WebProvider(artifactQueryUrl, templatePath, variables, handler, { ignoreSslError: !strictSSL });
var localFileProvider = new providers.FilesystemProvider(localPathRoot);
var downloaderOptions = configureDownloaderOptions();
var downloader = new engine.ArtifactEngine();
await downloader.processItems(webProvider, localFileProvider, downloaderOptions);
}
console.log(tl.loc("DownloadArtifacts", artifactName, artifactLocation));
if (!fs.existsSync(artifactLocation)) {
console.log(tl.loc("ArtifactNameDirectoryNotFound", artifactLocation, downloadUrl));
artifactLocation = downloadUrl;
}
let downloaderOptions = new engine.ArtifactEngineOptions();
downloaderOptions.itemPattern = itemPattern;
downloaderOptions.verbose = isVerbose;
if (parallelLimit) {
downloaderOptions.parallelProcessingLimit = parallelLimit;
}
let fileShareProvider = new providers.FilesystemProvider(artifactLocation, artifactName);
let fileSystemProvider = new providers.FilesystemProvider(downloadPath);
let downloadPromise = downloader.processItems(fileShareProvider, fileSystemProvider, downloaderOptions);
downloadPromise.then(() => {
console.log(tl.loc('ArtifactsSuccessfullyDownloaded', downloadPath));
resolve();
}).catch((error) => {
reject(error);
});
});
reject(reason);
}));
}
}
else if (artifact.resource.type.toLowerCase() === "filepath") {
let downloader = new engine.ArtifactEngine();
let downloadUrl = artifact.resource.data;
let artifactName = artifact.name.replace('/', '\\');
let artifactLocation = path.join(downloadUrl, artifactName);
if (!fs.existsSync(artifactLocation)) {
console.log(tl.loc("ArtifactNameDirectoryNotFound", artifactLocation, downloadUrl));
artifactLocation = downloadUrl;
}
console.log(tl.loc("DownloadArtifacts", artifact.name, artifactLocation));
var fileShareProvider = new providers.FilesystemProvider(artifactLocation, artifactName);
var fileSystemProvider = new providers.FilesystemProvider(downloadPath);
downloadPromises.push(downloader.processItems(fileShareProvider, fileSystemProvider, downloaderOptions).catch((reason) => {
reject(reason);
}));
}
else {
console.log(tl.loc("UnsupportedArtifactType", artifact.resource.type));
}
});
async function getZipFromUrl(artifactArchiveUrl: string, strictSSL: boolean, localPathRoot: string, handler: handlers.BasicCredentialHandler) {
console.log(tl.loc('ArtifactDownloadUrl', artifactArchiveUrl));
var downloaderOptions = configureDownloaderOptions();
var downloader = new engine.ArtifactEngine();
var zipProvider = new providers.ZipProvider(artifactArchiveUrl, handler, { ignoreSslError: !strictSSL });
var filesystemProvider = new providers.FilesystemProvider(localPathRoot);
await downloader.processItems(zipProvider, filesystemProvider, downloaderOptions)
}