From c46fc2a5bda32e5f36a0617144460d3dfed53c5a Mon Sep 17 00:00:00 2001 From: MartinBraquet Date: Sun, 15 Feb 2026 16:57:46 +0100 Subject: [PATCH] Prevent usernmaes ilike existing ones (case-insensitive) --- backend/shared/src/utils.ts | 2 +- web/components/required-profile-form.tsx | 27 +++++++++------ web/hooks/use-editable-user-info.ts | 43 ++++++++++++------------ 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/backend/shared/src/utils.ts b/backend/shared/src/utils.ts index 77b40f1..a18198a 100644 --- a/backend/shared/src/utils.ts +++ b/backend/shared/src/utils.ts @@ -41,7 +41,7 @@ export const getUserByUsername = async ( const res = await pg.oneOrNone( `select * from users - where username = $1`, + where username ilike $1`, username ) diff --git a/web/components/required-profile-form.tsx b/web/components/required-profile-form.tsx index 4c3032e..2e107c4 100644 --- a/web/components/required-profile-form.tsx +++ b/web/components/required-profile-form.tsx @@ -49,7 +49,7 @@ export const RequiredProfileUserForm = (props: { profileCreatedAlready?: boolean }) => { const {user, onSubmit, profileCreatedAlready, setProfile, profile, isSubmitting} = props - const {updateUsername, updateDisplayName, userInfo, updateUserState} = useEditableUserInfo(user) + const {updateDisplayName, userInfo, updateUserState, updateUsername} = useEditableUserInfo(user) const [step, setStep] = useState(0) const t = useT() @@ -100,7 +100,7 @@ export const RequiredProfileUserForm = (props: {
{t('profile.basics.subtitle', 'Write your own bio, your own way.')}
} - + {step === 0 && { - updateUserState({username: e.target.value || ''}) + updateUserState({username: e.target.value || '', errorUsername: ''}) }} - onBlur={updateUsername} /> {loadingUsername && } @@ -163,13 +162,19 @@ export const RequiredProfileUserForm = (props: { {onSubmit && (