From a31afc5b6218c76bca95a06285ed4e03714091c6 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 6 Oct 2021 16:42:03 +0200 Subject: [PATCH 1/3] Replace slash stripping regexp with trimEnd Signed-off-by: Johan Haals --- .changeset/purple-dodos-glow.md | 9 +++++++++ .../backend-common/src/reading/BitbucketUrlReader.ts | 3 ++- packages/backend-common/src/reading/GitlabUrlReader.ts | 3 ++- packages/integration/package.json | 3 ++- packages/integration/src/bitbucket/config.ts | 2 +- packages/integration/src/github/config.ts | 5 +++-- packages/integration/src/gitlab/config.ts | 5 +++-- packages/integration/src/helpers.ts | 8 +++++--- plugins/catalog-backend-module-ldap/src/ldap/config.ts | 3 ++- .../src/microsoftGraph/config.ts | 10 ++++++---- 10 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 .changeset/purple-dodos-glow.md diff --git a/.changeset/purple-dodos-glow.md b/.changeset/purple-dodos-glow.md new file mode 100644 index 0000000000..4c21866af6 --- /dev/null +++ b/.changeset/purple-dodos-glow.md @@ -0,0 +1,9 @@ +--- +'@backstage/integration': patch +'@backstage/backend-common': patch +'@backstage/integration': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +--- + +Replace slash stripping regexp with trimEnd to remove CodeQL warning diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.ts b/packages/backend-common/src/reading/BitbucketUrlReader.ts index 611e94f0db..4ae0ea37a8 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.ts @@ -25,6 +25,7 @@ import { } from '@backstage/integration'; import fetch from 'cross-fetch'; import parseGitUrl from 'git-url-parse'; +import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { @@ -149,7 +150,7 @@ export class BitbucketUrlReader implements UrlReader { // a future improvement, we could be smart and try to deduce that non-glob // prefixes (like for filepaths such as some-prefix/**/a.yaml) can be used // to get just that part of the repo. - const treeUrl = url.replace(filepath, '').replace(/\/+$/, ''); + const treeUrl = trimEnd(url.replace(filepath, ''), '/'); const tree = await this.readTree(treeUrl, { etag: options?.etag, diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index b78add6916..3fc9673e8b 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -37,6 +37,7 @@ import { ReadUrlResponse, ReadUrlOptions, } from './types'; +import { trimEnd } from 'lodash'; /** @public */ export class GitlabUrlReader implements UrlReader { @@ -186,7 +187,7 @@ export class GitlabUrlReader implements UrlReader { // a future improvement, we could be smart and try to deduce that non-glob // prefixes (like for filepaths such as some-prefix/**/a.yaml) can be used // to get just that part of the repo. - const treeUrl = url.replace(filepath, '').replace(/\/+$/, ''); + const treeUrl = trimEnd(url.replace(filepath, ''), '/'); const tree = await this.readTree(treeUrl, { etag: options?.etag, diff --git a/packages/integration/package.json b/packages/integration/package.json index f99b905617..dcb2091a2c 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -35,7 +35,8 @@ "git-url-parse": "^11.6.0", "@octokit/rest": "^18.5.3", "@octokit/auth-app": "^3.4.0", - "luxon": "^2.0.2" + "luxon": "^2.0.2", + "lodash": "^4.17.21" }, "devDependencies": { "@backstage/cli": "^0.7.14", diff --git a/packages/integration/src/bitbucket/config.ts b/packages/integration/src/bitbucket/config.ts index b2ddfa3532..3b4a9df162 100644 --- a/packages/integration/src/bitbucket/config.ts +++ b/packages/integration/src/bitbucket/config.ts @@ -83,7 +83,7 @@ export function readBitbucketIntegrationConfig( } if (apiBaseUrl) { - apiBaseUrl = apiBaseUrl.replace(/\/+$/, ''); + apiBaseUrl = trimEnd(apiBaseUrl, '/'); } else if (host === BITBUCKET_HOST) { apiBaseUrl = BITBUCKET_API_BASE_URL; } diff --git a/packages/integration/src/github/config.ts b/packages/integration/src/github/config.ts index 4ecac99295..49674681f1 100644 --- a/packages/integration/src/github/config.ts +++ b/packages/integration/src/github/config.ts @@ -15,6 +15,7 @@ */ import { Config } from '@backstage/config'; +import { trimEnd } from 'lodash'; import { isValidHost } from '../helpers'; const GITHUB_HOST = 'github.com'; @@ -133,13 +134,13 @@ export function readGitHubIntegrationConfig( } if (apiBaseUrl) { - apiBaseUrl = apiBaseUrl.replace(/\/+$/, ''); + apiBaseUrl = trimEnd(apiBaseUrl, '/'); } else if (host === GITHUB_HOST) { apiBaseUrl = GITHUB_API_BASE_URL; } if (rawBaseUrl) { - rawBaseUrl = rawBaseUrl.replace(/\/+$/, ''); + rawBaseUrl = trimEnd(rawBaseUrl, '/'); } else if (host === GITHUB_HOST) { rawBaseUrl = GITHUB_RAW_BASE_URL; } diff --git a/packages/integration/src/gitlab/config.ts b/packages/integration/src/gitlab/config.ts index 3bc8f76d44..7471ba0078 100644 --- a/packages/integration/src/gitlab/config.ts +++ b/packages/integration/src/gitlab/config.ts @@ -15,6 +15,7 @@ */ import { Config } from '@backstage/config'; +import { trimEnd } from 'lodash'; import { isValidHost, isValidUrl } from '../helpers'; const GITLAB_HOST = 'gitlab.com'; @@ -67,13 +68,13 @@ export function readGitLabIntegrationConfig( let baseUrl = config.getOptionalString('baseUrl'); if (apiBaseUrl) { - apiBaseUrl = apiBaseUrl.replace(/\/+$/, ''); + apiBaseUrl = trimEnd(apiBaseUrl, '/'); } else if (host === GITLAB_HOST) { apiBaseUrl = GITLAB_API_BASE_URL; } if (baseUrl) { - baseUrl = baseUrl.replace(/\/+$/, ''); + baseUrl = trimEnd(baseUrl, '/'); } else { baseUrl = `https://${host}`; } diff --git a/packages/integration/src/helpers.ts b/packages/integration/src/helpers.ts index dc1ce1a502..52d2cf6571 100644 --- a/packages/integration/src/helpers.ts +++ b/packages/integration/src/helpers.ts @@ -15,6 +15,7 @@ */ import parseGitUrl from 'git-url-parse'; +import { trimEnd } from 'lodash'; import { ScmIntegration, ScmIntegrationsGroup } from './types'; /** Checks whether the given argument is a valid URL hostname */ @@ -83,9 +84,10 @@ export function defaultScmResolveUrl(options: { // If it is an absolute path, move relative to the repo root const { filepath } = parseGitUrl(base); updated = new URL(base); - const repoRootPath = updated.pathname - .substring(0, updated.pathname.length - filepath.length) - .replace(/\/+$/, ''); + const repoRootPath = trimEnd( + updated.pathname.substring(0, updated.pathname.length - filepath.length), + '/', + ); updated.pathname = `${repoRootPath}${url}`; } else { // For relative URLs, just let the default URL constructor handle the diff --git a/plugins/catalog-backend-module-ldap/src/ldap/config.ts b/plugins/catalog-backend-module-ldap/src/ldap/config.ts index eefe43f97a..6dad7e087f 100644 --- a/plugins/catalog-backend-module-ldap/src/ldap/config.ts +++ b/plugins/catalog-backend-module-ldap/src/ldap/config.ts @@ -18,6 +18,7 @@ import { Config, JsonValue } from '@backstage/config'; import { SearchOptions } from 'ldapjs'; import mergeWith from 'lodash/mergeWith'; import { RecursivePartial } from '@backstage/plugin-catalog-backend'; +import { trimEnd } from 'lodash'; /** * The configuration parameters for a single LDAP provider. @@ -286,7 +287,7 @@ export function readLdapConfig(config: Config): LdapProviderConfig[] { const providerConfigs = config.getOptionalConfigArray('providers') ?? []; return providerConfigs.map(c => { const newConfig = { - target: c.getString('target').replace(/\/+$/, ''), + target: trimEnd(c.getString('target'), '/'), bind: readBindConfig(c.getOptionalConfig('bind')), users: readUserConfig(c.getConfig('users')), groups: readGroupConfig(c.getConfig('groups')), diff --git a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts index 591df9baf7..fe0678372a 100644 --- a/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts +++ b/plugins/catalog-backend-module-msgraph/src/microsoftGraph/config.ts @@ -15,6 +15,7 @@ */ import { Config } from '@backstage/config'; +import { trimEnd } from 'lodash'; /** * The configuration parameters for a single Microsoft Graph provider. @@ -72,10 +73,11 @@ export function readMicrosoftGraphConfig( const providerConfigs = config.getOptionalConfigArray('providers') ?? []; for (const providerConfig of providerConfigs) { - const target = providerConfig.getString('target').replace(/\/+$/, ''); - const authority = - providerConfig.getOptionalString('authority')?.replace(/\/+$/, '') || - 'https://login.microsoftonline.com'; + const target = trimEnd(providerConfig.getString('target'), '/'); + + const authority = providerConfig.getOptionalString('authority') + ? trimEnd(providerConfig.getOptionalString('authority'), '/') + : 'https://login.microsoftonline.com'; const tenantId = providerConfig.getString('tenantId'); const clientId = providerConfig.getString('clientId'); const clientSecret = providerConfig.getString('clientSecret'); From 1a26a18f7fbd5161c76c9254c9adf582ca022146 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 7 Oct 2021 09:08:00 +0200 Subject: [PATCH 2/3] integration: Add missing lodash import Signed-off-by: Johan Haals --- packages/integration/src/bitbucket/config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/integration/src/bitbucket/config.ts b/packages/integration/src/bitbucket/config.ts index 3b4a9df162..e2758952e9 100644 --- a/packages/integration/src/bitbucket/config.ts +++ b/packages/integration/src/bitbucket/config.ts @@ -15,6 +15,7 @@ */ import { Config } from '@backstage/config'; +import { trimEnd } from 'lodash'; import { isValidHost } from '../helpers'; const BITBUCKET_HOST = 'bitbucket.org'; From 05e835b9f129e74e4bca5040ef29200388c0242c Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 7 Oct 2021 09:21:00 +0200 Subject: [PATCH 3/3] catalog-import: replace trailing slash regexp with trimEnd Signed-off-by: Johan Haals --- .changeset/purple-dodos-glow.md | 1 + .../PreviewCatalogInfoComponent.tsx | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.changeset/purple-dodos-glow.md b/.changeset/purple-dodos-glow.md index 4c21866af6..23030c686c 100644 --- a/.changeset/purple-dodos-glow.md +++ b/.changeset/purple-dodos-glow.md @@ -4,6 +4,7 @@ '@backstage/integration': patch '@backstage/plugin-catalog-backend-module-ldap': patch '@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-import': patch --- Replace slash stripping regexp with trimEnd to remove CodeQL warning diff --git a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx index 0327b7e792..d0f29c00e2 100644 --- a/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx +++ b/plugins/catalog-import/src/components/StepPrepareCreatePullRequest/PreviewCatalogInfoComponent.tsx @@ -19,6 +19,7 @@ import { Card, CardContent, CardHeader } from '@material-ui/core'; import React from 'react'; import YAML from 'yaml'; import { CodeSnippet } from '@backstage/core-components'; +import { trimEnd } from 'lodash'; type Props = { repositoryUrl: string; @@ -35,10 +36,7 @@ export const PreviewCatalogInfoComponent = ({ {`${repositoryUrl.replace( - /[\/]*$/, - '', - )}/catalog-info.yaml`} + {`${trimEnd(repositoryUrl, '/')}/catalog-info.yaml`} } />