diff --git a/backend/src/ee/services/secret-scanning-v2/bitbucket/bitbucket-secret-scanning-factory.ts b/backend/src/ee/services/secret-scanning-v2/bitbucket/bitbucket-secret-scanning-factory.ts index 29ffaffaa..071133be8 100644 --- a/backend/src/ee/services/secret-scanning-v2/bitbucket/bitbucket-secret-scanning-factory.ts +++ b/backend/src/ee/services/secret-scanning-v2/bitbucket/bitbucket-secret-scanning-factory.ts @@ -83,7 +83,6 @@ export const BitBucketSecretScanningFactory = () => { })); }; - // TODO(andrey): Finish const getFullScanPath: TSecretScanningFactoryGetFullScanPath = async ({ dataSource, resourceName, @@ -131,8 +130,6 @@ export const BitBucketSecretScanningFactory = () => { } } = dataSource; - console.log("getDiffScanFindingsPayload"); - const { commits, repository } = payload; const allFindings: SecretMatch[] = []; @@ -175,16 +172,11 @@ export const BitBucketSecretScanningFactory = () => { } ); - console.log(1); - // eslint-disable-next-line no-continue if (!patch) continue; - console.log(2); // eslint-disable-next-line const findings = await scanContentAndGetFindings(replaceNonChangesWithNewlines(`\n${patch}`), configPath); - console.log(3); - console.log(findings); const adjustedFindings = findings.map((finding) => { const startLine = convertPatchLineToFileLineNumber(patch, finding.StartLine); @@ -195,9 +187,6 @@ export const BitBucketSecretScanningFactory = () => { const startColumn = finding.StartColumn - 1; // subtract 1 for + const endColumn = finding.EndColumn - 1; // subtract 1 for + - console.log("finding"); - console.log(finding.Link); - return { ...finding, StartLine: startLine, @@ -215,17 +204,11 @@ export const BitBucketSecretScanningFactory = () => { }; }); - console.log("adjusted"); - console.log(adjustedFindings); - allFindings.push(...adjustedFindings); } } } - console.log("HEREEE"); - console.log(allFindings); - return allFindings.map( ({ // discard match and secret as we don't want to store diff --git a/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-maps.ts b/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-maps.ts index d5668b06a..c876a1793 100644 --- a/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-maps.ts +++ b/backend/src/ee/services/secret-scanning-v2/secret-scanning-v2-maps.ts @@ -13,6 +13,5 @@ export const SECRET_SCANNING_DATA_SOURCE_CONNECTION_MAP: Record = { [SecretScanningDataSource.GitHub]: { verb: "push", noun: "repositories" }, - // TODO(andrey): May need change [SecretScanningDataSource.BitBucket]: { verb: "push", noun: "repositories" } }; diff --git a/backend/src/server/plugins/secret-scanner-v2.ts b/backend/src/server/plugins/secret-scanner-v2.ts index 466450180..6b47e324b 100644 --- a/backend/src/server/plugins/secret-scanner-v2.ts +++ b/backend/src/server/plugins/secret-scanner-v2.ts @@ -63,4 +63,6 @@ export const registerSecretScanningV2Webhooks = async (server: FastifyZodProvide return res.send("ok"); } }); + + // TODO(andrey): Register a webhook for BitBucket }; diff --git a/backend/src/services/app-connection/bitbucket/bitbucket-connection-fns.ts b/backend/src/services/app-connection/bitbucket/bitbucket-connection-fns.ts index 11e447443..5c82365c4 100644 --- a/backend/src/services/app-connection/bitbucket/bitbucket-connection-fns.ts +++ b/backend/src/services/app-connection/bitbucket/bitbucket-connection-fns.ts @@ -46,16 +46,29 @@ export const validateBitBucketConnectionCredentials = async (config: TBitBucketC export const listBitBucketRepositories = async (appConnection: TBitBucketConnection) => { const { email, apiToken } = appConnection.credentials; - // TODO(andrey): Support pagination for cases where a token has access to over 100 repos - const { data } = await request.get<{ values: TBitBucketRepo[] }>( - `${IntegrationUrls.BITBUCKET_API_URL}/2.0/repositories?role=member&pagelen=100`, - { - headers: { - Authorization: `Basic ${Buffer.from(`${email}:${apiToken}`).toString("base64")}`, - Accept: "application/json" - } - } - ); + const headers = { + Authorization: `Basic ${Buffer.from(`${email}:${apiToken}`).toString("base64")}`, + Accept: "application/json" + }; - return data.values; + let allRepos: TBitBucketRepo[] = []; + let nextUrl: string | undefined = `${IntegrationUrls.BITBUCKET_API_URL}/2.0/repositories?role=member&pagelen=100`; + let iterationCount = 0; + + // Limit to 10 iterations, fetching at most 10 * 100 = 1000 repositories + while (nextUrl && iterationCount < 10) { + // eslint-disable-next-line no-await-in-loop + const { data }: { data: { values: TBitBucketRepo[]; next?: string } } = await request.get<{ + values: TBitBucketRepo[]; + next?: string; + }>(nextUrl, { + headers + }); + + allRepos = allRepos.concat(data.values); + nextUrl = data.next; + iterationCount += 1; + } + + return allRepos; }; diff --git a/backend/src/services/app-connection/bitbucket/bitbucket-connection-service.ts b/backend/src/services/app-connection/bitbucket/bitbucket-connection-service.ts index 5b9c049f7..008797823 100644 --- a/backend/src/services/app-connection/bitbucket/bitbucket-connection-service.ts +++ b/backend/src/services/app-connection/bitbucket/bitbucket-connection-service.ts @@ -16,7 +16,6 @@ export const bitBucketConnectionService = (getAppConnection: TGetAppConnectionFu const repositories = await listBitBucketRepositories(appConnection); - // TODO(andrey): May need to change from slug to ID or something return repositories.map((repo) => ({ id: repo.slug, name: repo.full_name })); };