From d4bbde7deb31142d06dec69c964b15415f82f9e3 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Wed, 6 May 2026 08:50:30 +0200 Subject: [PATCH] feat: add local user creation --- packages/hoppscotch-sh-admin/locales/en.json | 10 ++ packages/hoppscotch-sh-admin/locales/fr.json | 12 ++ .../hoppscotch-sh-admin/src/helpers/auth.ts | 13 ++ .../src/helpers/backend/rest/authQuery.ts | 6 + .../src/pages/users/index.vue | 148 ++++++++++++++++-- 5 files changed, 177 insertions(+), 12 deletions(-) diff --git a/packages/hoppscotch-sh-admin/locales/en.json b/packages/hoppscotch-sh-admin/locales/en.json index 2d88b1b6..11f3503e 100644 --- a/packages/hoppscotch-sh-admin/locales/en.json +++ b/packages/hoppscotch-sh-admin/locales/en.json @@ -477,6 +477,8 @@ "created_on": "Created On", "copy_invite_link": "Copy Invite Link", "copy_link": "Copy Link", + "confirm_password": "Confirm Password", + "create_local_user": "Create Local User", "date": "Date", "delete": "Delete", "delete_user": "Delete User", @@ -498,6 +500,8 @@ "last_active_on": "Last Active", "load_info_error": "Unable to load user info", "load_list_error": "Unable to Load Users List", + "local_user_create_failed": "Failed to create local user", + "local_user_created": "Local user created", "make_admin": "Make Admin", "name": "Name", "new_user_added": "New User Added", @@ -508,6 +512,9 @@ "not_found": "User not found", "pending_invites": "Pending Invites", "pending_invites_description": "Manage and track pending user invitations with clear status and actions.", + "password": "Password", + "password_min_length": "Password must be at least 12 characters.", + "password_mismatch": "Passwords do not match.", "remove_admin_privilege": "Remove Admin Privilege", "remove_admin_status": "Remove Admin Status", "rename": "Rename", @@ -517,6 +524,9 @@ "show_more": "Show more", "uid": "UID", "unnamed": "(Unnamed User)", + "username": "Username", + "username_format": "Username can only contain letters, numbers, dots, dashes, and underscores.", + "username_min_length": "Username must be at least 3 characters.", "user_not_found": "User not found in the infra!!", "users": "Users", "valid_email": "Please enter a valid email address" diff --git a/packages/hoppscotch-sh-admin/locales/fr.json b/packages/hoppscotch-sh-admin/locales/fr.json index 9bf82e5a..7b4a08b1 100644 --- a/packages/hoppscotch-sh-admin/locales/fr.json +++ b/packages/hoppscotch-sh-admin/locales/fr.json @@ -20,5 +20,17 @@ "password": "Mot de passe", "sign_in": "Se connecter", "username": "Identifiant" + }, + "users": { + "confirm_password": "Confirmer le mot de passe", + "create_local_user": "Créer un utilisateur local", + "local_user_create_failed": "Impossible de créer l’utilisateur local", + "local_user_created": "Utilisateur local créé", + "password": "Mot de passe", + "password_min_length": "Le mot de passe doit contenir au moins 12 caractères.", + "password_mismatch": "Les mots de passe ne correspondent pas.", + "username": "Identifiant", + "username_format": "L’identifiant ne peut contenir que des lettres, chiffres, points, tirets et underscores.", + "username_min_length": "L’identifiant doit contenir au moins 3 caractères." } } diff --git a/packages/hoppscotch-sh-admin/src/helpers/auth.ts b/packages/hoppscotch-sh-admin/src/helpers/auth.ts index 5a7c38d7..7900a01a 100644 --- a/packages/hoppscotch-sh-admin/src/helpers/auth.ts +++ b/packages/hoppscotch-sh-admin/src/helpers/auth.ts @@ -227,6 +227,19 @@ export const auth = { await setInitialUser(); }, + createLocalUser: async ( + username: string, + password: string, + displayName?: string, + ) => { + const res = await authQuery.createLocalUser( + username, + password, + displayName, + ); + return res.data; + }, + performAuthRefresh: async () => { const isRefreshSuccess = await refreshToken(); diff --git a/packages/hoppscotch-sh-admin/src/helpers/backend/rest/authQuery.ts b/packages/hoppscotch-sh-admin/src/helpers/backend/rest/authQuery.ts index 2b07fd87..ab99b01e 100644 --- a/packages/hoppscotch-sh-admin/src/helpers/backend/rest/authQuery.ts +++ b/packages/hoppscotch-sh-admin/src/helpers/backend/rest/authQuery.ts @@ -39,6 +39,12 @@ export default { username, password, }), + createLocalUser: (username: string, password: string, displayName?: string) => + restApi.post('/auth/local/users', { + username, + password, + displayName, + }), getFirstTimeInfraSetupStatus: () => restApi.get('/site/setup'), updateFirstTimeInfraSetupStatus: () => restApi.put('/site/setup'), addOnBoardingConfigs: (config: Record) => diff --git a/packages/hoppscotch-sh-admin/src/pages/users/index.vue b/packages/hoppscotch-sh-admin/src/pages/users/index.vue index a971a46d..8b6d40ae 100644 --- a/packages/hoppscotch-sh-admin/src/pages/users/index.vue +++ b/packages/hoppscotch-sh-admin/src/pages/users/index.vue @@ -11,6 +11,12 @@ @click="showInviteUserModal = true" :icon="IconAddUser" /> +
+ + + +