From 333db25c065537bf207d16c830b78cc2d983dd65 Mon Sep 17 00:00:00 2001 From: Zack Koppert Date: Wed, 12 Jun 2024 11:47:08 -0700 Subject: [PATCH 1/3] fix: Enforce repository name length limit in dialogs Signed-off-by: Zack Koppert --- src/app/components/dialog/CreateMirrorDialog.tsx | 1 + src/app/components/dialog/EditMirrorDialog.tsx | 1 + src/server/repos/schema.ts | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/components/dialog/CreateMirrorDialog.tsx b/src/app/components/dialog/CreateMirrorDialog.tsx index 779105d..9238ba8 100644 --- a/src/app/components/dialog/CreateMirrorDialog.tsx +++ b/src/app/components/dialog/CreateMirrorDialog.tsx @@ -63,6 +63,7 @@ export const CreateMirrorDialog = ({ onChange={(e) => setRepoName(e.target.value)} block placeholder="e.g. repository-name" + maxLength={100} /> This is a private mirror of{' '} diff --git a/src/app/components/dialog/EditMirrorDialog.tsx b/src/app/components/dialog/EditMirrorDialog.tsx index e0b30da..8b76dd7 100644 --- a/src/app/components/dialog/EditMirrorDialog.tsx +++ b/src/app/components/dialog/EditMirrorDialog.tsx @@ -75,6 +75,7 @@ export const EditMirrorDialog = ({ onChange={(e) => setNewMirrorName(e.target.value)} block placeholder="e.g. repository-name" + maxLength={100} /> This is a private mirror of{' '} diff --git a/src/server/repos/schema.ts b/src/server/repos/schema.ts index 6f20814..5f74f59 100644 --- a/src/server/repos/schema.ts +++ b/src/server/repos/schema.ts @@ -5,7 +5,7 @@ export const CreateMirrorSchema = z.object({ forkRepoOwner: z.string(), forkRepoName: z.string(), forkId: z.string(), - newRepoName: z.string(), + newRepoName: z.string().max(100), newBranchName: z.string(), }) @@ -17,7 +17,7 @@ export const ListMirrorsSchema = z.object({ export const EditMirrorSchema = z.object({ orgId: z.string(), mirrorName: z.string(), - newMirrorName: z.string(), + newMirrorName: z.string().max(100), }) export const DeleteMirrorSchema = z.object({ From cc79061862aa4c8d9bb418f23321eb948c5be671 Mon Sep 17 00:00:00 2001 From: Zack Koppert Date: Wed, 12 Jun 2024 14:59:12 -0700 Subject: [PATCH 2/3] test: Add test for rejecting char limit on repo name Signed-off-by: Zack Koppert --- test/server/repos.test.ts | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/server/repos.test.ts b/test/server/repos.test.ts index 1491c19..4125223 100644 --- a/test/server/repos.test.ts +++ b/test/server/repos.test.ts @@ -263,4 +263,35 @@ describe('Repos router', () => { }) expect(stubbedGit.clone).toHaveBeenCalledTimes(1) }) + + it('reject repository names over the character limit', async () => { + const caller = reposRouter.createCaller(createTestContext()) + + await caller + .createMirror({ + forkId: 'test', + orgId: 'test', + forkRepoName: 'fork-test', + forkRepoOwner: 'github', + newBranchName: 'test', + newRepoName: 'a'.repeat(101), + }) + .catch((error) => { + expect(error.message).toEqual( + '[\n\ + {\n\ + "code": "too_big",\n\ + "maximum": 100,\n\ + "type": "string",\n\ + "inclusive": true,\n\ + "exact": false,\n\ + "message": "String must contain at most 100 character(s)",\n\ + "path": [\n\ + "newRepoName"\n\ + ]\n\ + }\n\ +]', + ) + }) + }) }) From b37f33c9a0d84ce65292b078e10ab0453ca968c0 Mon Sep 17 00:00:00 2001 From: Zack Koppert Date: Wed, 12 Jun 2024 15:13:27 -0700 Subject: [PATCH 3/3] chore: more readable test expect statement Signed-off-by: Zack Koppert --- test/server/repos.test.ts | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/test/server/repos.test.ts b/test/server/repos.test.ts index 4125223..58db84b 100644 --- a/test/server/repos.test.ts +++ b/test/server/repos.test.ts @@ -277,20 +277,8 @@ describe('Repos router', () => { newRepoName: 'a'.repeat(101), }) .catch((error) => { - expect(error.message).toEqual( - '[\n\ - {\n\ - "code": "too_big",\n\ - "maximum": 100,\n\ - "type": "string",\n\ - "inclusive": true,\n\ - "exact": false,\n\ - "message": "String must contain at most 100 character(s)",\n\ - "path": [\n\ - "newRepoName"\n\ - ]\n\ - }\n\ -]', + expect(error.message).toMatch( + /String must contain at most 100 character\(s\)/, ) }) })