From 48b3a8fc9eaece2d5aeb6aa29e8944eaae5b3c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 20 May 2020 10:55:42 +0200 Subject: [PATCH] Make namespace schema stricter (according to k8s) --- .../descriptors/DescriptorEnvelopeParser.ts | 2 +- .../KubernetesValidatorFunctions.test.ts | 19 +++++++++++++++++++ .../KubernetesValidatorFunctions.ts | 4 ++++ .../src/validation/makeValidator.ts | 1 + .../catalog-backend/src/validation/types.ts | 1 + 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend/src/ingestion/descriptors/DescriptorEnvelopeParser.ts b/plugins/catalog-backend/src/ingestion/descriptors/DescriptorEnvelopeParser.ts index 634041d8a3..443b20a02a 100644 --- a/plugins/catalog-backend/src/ingestion/descriptors/DescriptorEnvelopeParser.ts +++ b/plugins/catalog-backend/src/ingestion/descriptors/DescriptorEnvelopeParser.ts @@ -72,7 +72,7 @@ export class DescriptorEnvelopeParser { .test( 'metadata.namespace', 'The namespace is malformed', - value => value === undefined || validators.isValidEntityName(value), + value => value === undefined || validators.isValidNamespace(value), ); const labelsSchema = yup diff --git a/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.test.ts b/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.test.ts index 946888dc91..38484bd614 100644 --- a/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.test.ts +++ b/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.test.ts @@ -83,6 +83,25 @@ describe('KubernetesValidatorFunctions', () => { expect(KubernetesValidatorFunctions.isValidObjectName(value)).toBe(matches); }); + it.each([ + [7, false], + [null, false], + ['', false], + ['a', true], + ['AZ09', false], + ['a'.repeat(63), true], + ['a'.repeat(64), false], + ['a/b', false], + ['a-b', true], + ['-a-b', false], + ['a-b-', false], + ['a--b', false], + ['a_b', false], + ['a.b', false], + ])('isValidNamespace', (value, matches) => { + expect(KubernetesValidatorFunctions.isValidNamespace(value)).toBe(matches); + }); + it.each([ [7, false], [null, false], diff --git a/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.ts b/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.ts index dff3216969..fa938f5fcb 100644 --- a/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.ts +++ b/plugins/catalog-backend/src/validation/KubernetesValidatorFunctions.ts @@ -52,6 +52,10 @@ export class KubernetesValidatorFunctions { ); } + static isValidNamespace(value: any): boolean { + return CommonValidatorFunctions.isValidDnsLabel(value); + } + static isValidLabelKey(value: any): boolean { return CommonValidatorFunctions.isValidPrefixAndOrSuffix( value, diff --git a/plugins/catalog-backend/src/validation/makeValidator.ts b/plugins/catalog-backend/src/validation/makeValidator.ts index 3f538c23e7..b65862046f 100644 --- a/plugins/catalog-backend/src/validation/makeValidator.ts +++ b/plugins/catalog-backend/src/validation/makeValidator.ts @@ -22,6 +22,7 @@ const defaultValidators: Validators = { isValidApiVersion: KubernetesValidatorFunctions.isValidApiVersion, isValidKind: KubernetesValidatorFunctions.isValidKind, isValidEntityName: KubernetesValidatorFunctions.isValidObjectName, + isValidNamespace: KubernetesValidatorFunctions.isValidNamespace, normalizeEntityName: CommonValidatorFunctions.normalizeToLowercaseAlphanum, isValidLabelKey: KubernetesValidatorFunctions.isValidLabelKey, isValidLabelValue: KubernetesValidatorFunctions.isValidLabelValue, diff --git a/plugins/catalog-backend/src/validation/types.ts b/plugins/catalog-backend/src/validation/types.ts index f659d41da9..81209bfb75 100644 --- a/plugins/catalog-backend/src/validation/types.ts +++ b/plugins/catalog-backend/src/validation/types.ts @@ -18,6 +18,7 @@ export type Validators = { isValidApiVersion(value: any): boolean; isValidKind(value: any): boolean; isValidEntityName(value: any): boolean; + isValidNamespace(value: any): boolean; normalizeEntityName(value: string): string; isValidLabelKey(value: any): boolean; isValidLabelValue(value: any): boolean;