Fix user handle naming logic (#4969) * Fix user handle naming logic * Extract slugify logic into a module func --------- Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>

f6a2def4037789551b8318afde5a0f22cf517431

allen9441 <72611024+allen9441@users.noreply.github.com>

Signed
1 files changed, +16 -2Showing whitespace changes
src/endpoints/users-admin.js+16 -2
@@ -19,6 +19,20 @@ import { DEFAULT_USER } from '../constants.js';
1919
20export const router = express.Router();20export const router = express.Router();
2121
22/**
23 * Slugifies a given text string.
24 * - Converts to lowercase
25 * - Trims whitespace
26 * - Replaces spaces and special characters with hyphens
27 * - Removes leading and trailing hyphens
28 * - Uses lodash.deburr to remove diacritical marks
29 * @param {string} text Text to slugify
30 * @returns {string} Slugified text
31 */
32function slugify(text) {
33 return lodash.deburr(String(text ?? '').toLowerCase().trim()).replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
34}
35
22router.post('/get', requireAdminMiddleware, async (_request, response) => {36router.post('/get', requireAdminMiddleware, async (_request, response) => {
23 try {37 try {
24 /** @type {import('../users.js').User[]} */38 /** @type {import('../users.js').User[]} */
@@ -163,7 +177,7 @@ router.post('/create', requireAdminMiddleware, async (request, response) => {
163 }177 }
164178
165 const handles = await getAllUserHandles();179 const handles = await getAllUserHandles();
166 const handle = lodash.kebabCase(String(request.body.handle).toLowerCase().trim());180 const handle = slugify(request.body.handle);
167181
168 if (!handle) {182 if (!handle) {
169 console.warn('Create user failed: Invalid handle');183 console.warn('Create user failed: Invalid handle');
@@ -241,7 +255,7 @@ router.post('/slugify', requireAdminMiddleware, async (request, response) => {
241 return response.status(400).json({ error: 'Missing required fields' });255 return response.status(400).json({ error: 'Missing required fields' });
242 }256 }
243257
244 const text = lodash.kebabCase(String(request.body.text).toLowerCase().trim());258 const text = slugify(request.body.text);
245259
246 return response.send(text);260 return response.send(text);
247 } catch (error) {261 } catch (error) {