From 4b4c66b689dc46f860621a193af1fbb4d8a0ab82 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sun, 11 Jan 2026 14:41:08 +0100 Subject: [PATCH] ci: fix wrong folder chmod --- .github/workflows/e2e.yml | 4 ++-- app/server/cli/commands/change-username.ts | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 747d5888..9bb4f948 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -56,8 +56,8 @@ jobs: timeout 30s bash -c 'until curl -f http://localhost:4096/healthcheck; do echo "Waiting for server..." && sleep 2; done' continue-on-error: false - - name: Make data directory writable - run: sudo chmod -R 777 data + - name: Make playwright directory writable + run: sudo chmod -R 777 playwright - name: Run Playwright tests run: bun run test:e2e diff --git a/app/server/cli/commands/change-username.ts b/app/server/cli/commands/change-username.ts index 8b297c47..7e13bb61 100644 --- a/app/server/cli/commands/change-username.ts +++ b/app/server/cli/commands/change-username.ts @@ -16,20 +16,22 @@ const changeUsername = async (oldUsername: string, newUsername: string) => { throw new Error(`User "${oldUsername}" not found`); } - const [existingUser] = await db.select().from(usersTable).where(eq(usersTable.username, newUsername)); + const normalizedUsername = newUsername.toLowerCase().trim(); + + const [existingUser] = await db.select().from(usersTable).where(eq(usersTable.username, normalizedUsername)); if (existingUser) { throw new Error(`Username "${newUsername}" is already taken`); } const usernameRegex = /^[a-z0-9_]{3,30}$/; - if (!usernameRegex.test(newUsername)) { + if (!usernameRegex.test(normalizedUsername)) { throw new Error( `Invalid username "${newUsername}". Usernames must be 3-30 characters long and can only contain lowercase letters, numbers, and underscores.`, ); } await db.transaction(async (tx) => { - await tx.update(usersTable).set({ username: newUsername.toLowerCase().trim() }).where(eq(usersTable.id, user.id)); + await tx.update(usersTable).set({ username: normalizedUsername }).where(eq(usersTable.id, user.id)); await tx.delete(sessionsTable).where(eq(sessionsTable.userId, user.id)); }); }; @@ -65,8 +67,14 @@ export const changeUsernameCommand = new Command("change-username") if (!newUsername) { newUsername = await input({ message: "Enter the new username:", - validate: (val) => (val.length > 0 ? true : "Username cannot be empty"), + validate: (val) => { + const usernameRegex = /^[a-z0-9_]{3,30}$/; + return usernameRegex.test(val) + ? true + : "Username must be 3-30 characters and contain only lowercase letters, numbers, or underscores"; + }, }); + newUsername = newUsername.toLowerCase().trim(); } await changeUsername(username, newUsername);