diff --git a/package-lock.json b/package-lock.json index 8b38674..fc9a58d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "ora": "^5.4.1", "prettier": "^2.6.2", "snyk-api-ts-client": "^1.11.2", - "snyk-request-manager": "^1.8.2", + "snyk-request-manager": "^1.8.4", "yargs": "^17.5.1" }, "bin": { @@ -2974,9 +2974,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -5683,20 +5683,21 @@ } }, "node_modules/snyk-request-manager": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/snyk-request-manager/-/snyk-request-manager-1.8.2.tgz", - "integrity": "sha512-Bhh2ozu67RWLEgeoJee7KwA4vtPJQsy0KfBGdfK6g1N9R7oLE/rzG/Fc3ifFE03wvULQy5An3ua4gLdAsiMRRg==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/snyk-request-manager/-/snyk-request-manager-1.8.4.tgz", + "integrity": "sha512-Iz5zJVrPAh5CO5M62/2JbTDF2Phd/fsrhe1Rw71PfzWCUXF/sFVHxx5k/1QJLma0soXui66YzpEL5dF9TLgysw==", "dependencies": { "@snyk/configstore": "^3.2.0-rc1", "@types/babel__traverse": "7.17.1", "@types/debug": "^4.1.7", "@types/uuid": "^7.0.3", - "axios": "0.27.2", + "axios": "1.6.7", "chalk": "^4.0.0", "debug": "^4.1.1", "global-agent": "3.0.0", "leaky-bucket-queue": "0.0.2", "lodash": "4.17.21", + "proxy-from-env": "^1.1.0", "snyk-config": "^5.0.1", "source-map-support": "^0.5.16", "tslib": "^1.10.0", @@ -5715,12 +5716,13 @@ } }, "node_modules/snyk-request-manager/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/snyk-request-manager/node_modules/form-data": { diff --git a/package.json b/package.json index 542af15..4dd4f4b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "ora": "^5.4.1", "prettier": "^2.6.2", "snyk-api-ts-client": "^1.11.2", - "snyk-request-manager": "^1.8.2", + "snyk-request-manager": "^1.8.4", "yargs": "^17.5.1" }, "devDependencies": { diff --git a/src/cmds/azure-devops.ts b/src/cmds/azure-devops.ts index 3901a89..1385b39 100644 --- a/src/cmds/azure-devops.ts +++ b/src/cmds/azure-devops.ts @@ -26,6 +26,11 @@ export const builder = { default: undefined, desc: 'Your Org name in Azure Devops e.g. https://dev.azure.com/{OrgName}', }, + url: { + required: false, + default: 'https://dev.azure.com/', + desc: '[Optional] Your Azure DevOps host URL e.g. https://your.company.azure.com/\n', + }, projectKeys: { required: false, default: undefined, @@ -107,6 +112,7 @@ export async function handler(argv: { skipSnykMonitoredRepos: boolean; importConfDir: string; importFileRepoType: string; + url: string; }): Promise { if (process.env.DEBUG) { debug('DEBUG MODE ENABLED \n'); @@ -144,6 +150,7 @@ export async function handler(argv: { OrgName: argv.org, projectKeys: argv.projectKeys?.toString().split(','), repo: argv.repo, + url: argv.url }; const azureDevopsTask = new AzureDevops(scmTarget); diff --git a/src/lib/azure-devops/azure-devops-contributors.ts b/src/lib/azure-devops/azure-devops-contributors.ts index d508bee..636037f 100644 --- a/src/lib/azure-devops/azure-devops-contributors.ts +++ b/src/lib/azure-devops/azure-devops-contributors.ts @@ -46,7 +46,7 @@ export const fetchAzureDevopsContributors = async ( azureInfo.projectKeys = []; projectList = projectList.concat( await fetchAzureProjects( - azureDefaultUrl, + azureInfo.url ? azureInfo.url : azureDefaultUrl, azureInfo.OrgName, azureInfo.token, ), @@ -127,8 +127,9 @@ export const fetchAzureContributorsForRepo = async ( debug( `Fetching single repo contributor from Azure Devops. Project ${repo.project.key} - Repo ${repo.name}\n`, ); + const azureUrl = AzureInfo.url ? AzureInfo.url : azureDefaultUrl; const response = await getRepoCommits( - azureDefaultUrl + AzureInfo.OrgName, + azureUrl + AzureInfo.OrgName, repo.project.key, repo.name, AzureInfo.token, @@ -217,8 +218,9 @@ export const fetchAzureReposForProjects = async ( if (AzureInfo.projectKeys) { try { for (let i = 0; i < AzureInfo.projectKeys.length; i++) { + const azureUrl = AzureInfo.url ? AzureInfo.url : azureDefaultUrl const repos = await getReposPerProjects( - azureDefaultUrl + AzureInfo.OrgName, + azureUrl + AzureInfo.OrgName, AzureInfo.projectKeys[i], AzureInfo.token, ); @@ -256,13 +258,13 @@ export const fetchAzureReposForProjects = async ( }; export const fetchAzureProjects = async ( - azureDefaultUrl: string, + azureUrl: string, OrgName: string, token: string, ): Promise => { const projectList: Project[] = []; try { - const projects = await getProjects(azureDefaultUrl, OrgName, token); + const projects = await getProjects(azureUrl, OrgName, token); const result = await projects.text(); const parsedResponse = JSON.parse(result).value; parsedResponse.map((project: { name: string; id: string }) => { diff --git a/src/lib/types.ts b/src/lib/types.ts index 58be212..cc492a8 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -49,6 +49,7 @@ export interface AzureDevopsTarget { OrgName: string; projectKeys?: string[]; repo?: string; + url?: string; } export interface BitbucketCloudTarget {