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
2020export 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+ */
32+function slugify(text) {
33+ return lodash.deburr(String(text ?? '').toLowerCase().trim()).replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
34+}
35+
2236router.post('/get', requireAdminMiddleware, async (_request, response) => {
2337 try {
2438 /** @type {import('../users.js').User[]} */
@@ -163,7 +177,7 @@ router.post('/create', requireAdminMiddleware, async (request, response) => {
163177 }
164178
165179 const handles = await getAllUserHandles();
166180 const handle = lodash.kebabCase(Stringslugify(request.body.handle).toLowerCase().trim());
167181
168182 if (!handle) {
169183 console.warn('Create user failed: Invalid handle');
@@ -241,7 +255,7 @@ router.post('/slugify', requireAdminMiddleware, async (request, response) => {
241255 return response.status(400).json({ error: 'Missing required fields' });
242256 }
243257
244258 const text = lodash.kebabCase(Stringslugify(request.body.text).toLowerCase().trim());
245259
246260 return response.send(text);
247261 } catch (error) {