From 98fdd2882d7cfb6c2a5a7258f60dec67c1003c8e Mon Sep 17 00:00:00 2001 From: Alexandre Combemorel Date: Thu, 20 Mar 2025 17:25:23 +0100 Subject: [PATCH 1/4] feat: add port regex sg --- packages/regex/src/index.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 6997ac154..2cad314ba 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -88,3 +88,7 @@ export const dashedIpv4 = export const pathSegment = /^[_a-zA-Z0-9]([-_.a-zA-Z0-9]*[_a-zA-Z0-9])?$/ export const absolutePath = /^\/(([\w. -]*)[^\s?]\/?)+$/ + +// A port range between 1 to 65535 separated by an hypen or a single number +export const sgPortRange = + /^(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5]?[0-9]{1,4})(-(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5]?[0-9]{1,4}))?$/ From 3963b54af1212fa104d9272d0dc310c8987318b9 Mon Sep 17 00:00:00 2001 From: Alexandre Combemorel Date: Thu, 20 Mar 2025 17:26:26 +0100 Subject: [PATCH 2/4] docs: changeset --- .changeset/rude-windows-return.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rude-windows-return.md diff --git a/.changeset/rude-windows-return.md b/.changeset/rude-windows-return.md new file mode 100644 index 000000000..eb6247024 --- /dev/null +++ b/.changeset/rude-windows-return.md @@ -0,0 +1,5 @@ +--- +"@scaleway/regex": minor +--- + +Add new regex for port security group handling From 07e119d36abe601e57766a191eb73d2f98fd2aed Mon Sep 17 00:00:00 2001 From: Alexandre Combemorel Date: Thu, 20 Mar 2025 17:35:11 +0100 Subject: [PATCH 3/4] feat: add test u --- packages/regex/src/__tests__/index.test.ts | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index 821b8ae37..be90ae414 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -44,6 +44,7 @@ import { phone, reverseDNS, s3BucketName, + sgPortRange, sixDigitsCode, spaces, uppercaseBasicDomain, @@ -1062,4 +1063,58 @@ describe('@regex', () => { expect(absolutePath.test(string)).toBe(expected) }) }) + + describe('sgPortRange', () => { + test.each([ + // Valid single ports + ['1', true], + ['80', true], + ['443', true], + ['8080', true], + ['65535', true], + + // Valid port ranges + ['1-80', true], + ['80-443', true], + ['1000-2000', true], + ['1-65535', true], + ['8080-8090', true], + + // Edge cases for valid ports + ['1-1', true], + ['65535-65535', true], + + // Invalid: Port 0 not allowed + ['0', true], + ['0-80', true], + ['80-0', true], + + // Invalid: Ports above 65535 + ['65536', false], + ['70000', false], + ['1-70000', false], + ['65536-65537', false], + + // Invalid formats + ['', false], + ['a', false], + ['1a', false], + ['a1', false], + ['1,2', false], + ['1:2', false], + ['1 - 2', false], + ['1~2', false], + ['1-2-3', false], + ['1-', false], + ['-1', false], + ['-', false], + ['1--2', false], + + // Edge cases + ['65534-65535', true], + ['65535-65535', true], + ])('should match regex %s to be %s', (string, expected) => { + expect(sgPortRange.test(string)).toBe(expected) + }) + }) }) From ce8f7cbdf51ddbb7bda98ca75bcc55bd2b58473e Mon Sep 17 00:00:00 2001 From: Alexandre Combemorel Date: Thu, 20 Mar 2025 17:38:37 +0100 Subject: [PATCH 4/4] fix: add comm --- packages/regex/src/__tests__/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index be90ae414..01242d819 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -1084,7 +1084,7 @@ describe('@regex', () => { ['1-1', true], ['65535-65535', true], - // Invalid: Port 0 not allowed + // Invalid: Port 0 not allowed => but regex was like that so product might accept it, keep it like that for now ['0', true], ['0-80', true], ['80-0', true],