diff --git a/.changeset/eight-falcons-explode.md b/.changeset/eight-falcons-explode.md new file mode 100644 index 0000000000..d9a1a2fe1f --- /dev/null +++ b/.changeset/eight-falcons-explode.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Fixed an issue were the log redaction didn't properly escape RegExp characters. diff --git a/.changeset/flat-cups-itch.md b/.changeset/flat-cups-itch.md new file mode 100644 index 0000000000..250393c21a --- /dev/null +++ b/.changeset/flat-cups-itch.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +lock versions of `@rjsf/*-beta` packages diff --git a/packages/backend-app-api/src/logging/WinstonLogger.test.ts b/packages/backend-app-api/src/logging/WinstonLogger.test.ts new file mode 100644 index 0000000000..5d8cfc9c90 --- /dev/null +++ b/packages/backend-app-api/src/logging/WinstonLogger.test.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { WinstonLogger } from './WinstonLogger'; + +function msg(message: string) { + return { message, level: 'info' }; +} + +describe('WinstonLogger', () => { + it('redacter should redact and escape regex', () => { + const redacter = WinstonLogger.redacter(); + expect(redacter.format.transform(msg('hello (world)'))).toEqual( + msg('hello (world)'), + ); + redacter.add(['hello']); + expect(redacter.format.transform(msg('hello (world)'))).toEqual( + msg('[REDACTED] (world)'), + ); + redacter.add(['(world)']); + expect(redacter.format.transform(msg('hello (world)'))).toEqual( + msg('[REDACTED] [REDACTED]'), + ); + }); +}); diff --git a/packages/backend-app-api/src/logging/WinstonLogger.ts b/packages/backend-app-api/src/logging/WinstonLogger.ts index cfee65d053..d32b816523 100644 --- a/packages/backend-app-api/src/logging/WinstonLogger.ts +++ b/packages/backend-app-api/src/logging/WinstonLogger.ts @@ -27,6 +27,7 @@ import { transports, transport as Transport, } from 'winston'; +import { escapeRegExp } from '../lib/escapeRegExp'; /** * @public @@ -98,10 +99,10 @@ export class WinstonLogger implements RootLoggerService { } } if (added > 0) { - redactionPattern = new RegExp( - `(${Array.from(redactionSet).join('|')})`, - 'g', - ); + const redactions = Array.from(redactionSet) + .map(r => escapeRegExp(r)) + .join('|'); + redactionPattern = new RegExp(`(${redactions})`, 'g'); } }, }; diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index b115437e33..229d0dfd5c 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -47,11 +47,11 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@rjsf/core": "^3.2.1", - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.14", + "@rjsf/core-v5": "npm:@rjsf/core@5.0.0-beta.16", "@rjsf/material-ui": "^3.2.1", - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.14", - "@rjsf/utils": "^5.0.0-beta.14", - "@rjsf/validator-ajv6": "^5.0.0-beta.14", + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.0.0-beta.16", + "@rjsf/utils": "5.0.0-beta.16", + "@rjsf/validator-ajv6": "5.0.0-beta.16", "@types/json-schema": "^7.0.9", "classnames": "^2.2.6", "json-schema": "^0.4.0", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 2a113dea11..97ee629cfa 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -56,9 +56,9 @@ "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^20.0.0", "@rjsf/core": "^3.2.1", - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.14", + "@rjsf/core-v5": "npm:@rjsf/core@5.0.0-beta.16", "@rjsf/material-ui": "^3.2.1", - "@rjsf/utils": "^5.0.0-beta.14", + "@rjsf/utils": "5.0.0-beta.16", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", "git-url-parse": "^13.0.0", diff --git a/yarn.lock b/yarn.lock index 2e4348793d..bce9dd6418 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7247,11 +7247,11 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 "@rjsf/core": ^3.2.1 - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.14" + "@rjsf/core-v5": "npm:@rjsf/core@5.0.0-beta.16" "@rjsf/material-ui": ^3.2.1 - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.14" - "@rjsf/utils": ^5.0.0-beta.14 - "@rjsf/validator-ajv6": ^5.0.0-beta.14 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.0.0-beta.16" + "@rjsf/utils": 5.0.0-beta.16 + "@rjsf/validator-ajv6": 5.0.0-beta.16 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -7304,9 +7304,9 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@react-hookz/web": ^20.0.0 "@rjsf/core": ^3.2.1 - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.14" + "@rjsf/core-v5": "npm:@rjsf/core@5.0.0-beta.16" "@rjsf/material-ui": ^3.2.1 - "@rjsf/utils": ^5.0.0-beta.14 + "@rjsf/utils": 5.0.0-beta.16 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -12592,9 +12592,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/core-v5@npm:@rjsf/core@^5.0.0-beta.14": - version: 5.0.0-beta.14 - resolution: "@rjsf/core@npm:5.0.0-beta.14" +"@rjsf/core-v5@npm:@rjsf/core@5.0.0-beta.16": + version: 5.0.0-beta.16 + resolution: "@rjsf/core@npm:5.0.0-beta.16" dependencies: lodash: ^4.17.15 lodash-es: ^4.17.15 @@ -12603,7 +12603,7 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: 2e1a1ba4b4385401868628a127da72439a617abc72952c64e07dd1134f2252dcc13a4ec57876cb3bc44ab519e1d3c05eccfd3764eb76178526ebea051179a6ba + checksum: 38b0e02cfc394958d714f1c2b29262e95c5da01fbfffd657db7af8546ae5b00d1900fd0484be07be13d354dd1e48833cabcdcdaa8e9ffa0dfba63fba7e9556c3 languageName: node linkType: hard @@ -12626,16 +12626,16 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@^5.0.0-beta.14": - version: 5.0.0-beta.14 - resolution: "@rjsf/material-ui@npm:5.0.0-beta.14" +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.0.0-beta.16": + version: 5.0.0-beta.16 + resolution: "@rjsf/material-ui@npm:5.0.0-beta.16" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.0.0-beta.1 "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: 5abc14a274b97a29288abd489f80f9b3fca53e4429ff96f6c03368dfe625d34b3f66ec2e446a84a8a1874d9dc81cb62ef5a706fc1b200bbe1632c612960a9dc6 + checksum: b8252dd7edd07435c065393cf4a86f7a8db0224646f71206561f9d300fb8d39a658282b5181f1b0100b069f775620953c03f89818fecdf34c52076e39108b93f languageName: node linkType: hard @@ -12651,7 +12651,7 @@ __metadata: languageName: node linkType: hard -"@rjsf/utils@npm:^5.0.0-beta.14": +"@rjsf/utils@npm:5.0.0-beta.16": version: 5.0.0-beta.16 resolution: "@rjsf/utils@npm:5.0.0-beta.16" dependencies: @@ -12666,16 +12666,16 @@ __metadata: languageName: node linkType: hard -"@rjsf/validator-ajv6@npm:^5.0.0-beta.14": - version: 5.0.0-beta.15 - resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.15" +"@rjsf/validator-ajv6@npm:5.0.0-beta.16": + version: 5.0.0-beta.16 + resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.16" dependencies: ajv: ^6.7.0 lodash: ^4.17.15 lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 - checksum: ce6d2cd110eee21e37ae08e4081b0f0fd65ac22f8c94ceeaff9f9a9482072897c3f988de1bc770c25031932117e7f71dda0bd166c2bb953af420d0ce1fd255d0 + checksum: c4296e37608907c904424c46c884a15991101229e708caaa43e2e3c7d7e44a7e88ba206a902f80853f9a7f4c78d129fe47452ee5265cfd845b916051e99cd70d languageName: node linkType: hard