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>
Signed| @@ -19,6 +19,20 @@ import { DEFAULT_USER } from '../constants.js'; | ||
| 19 | 19 | |
| 20 | 20 | export const router = express.Router(); |
| 21 | 21 | |
| 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 | + | |
| 22 | 36 | router.post('/get', requireAdminMiddleware, async (_request, response) => { |
| 23 | 37 | try { |
| 24 | 38 | /** @type {import('../users.js').User[]} */ |
| @@ -163,7 +177,7 @@ router.post('/create', requireAdminMiddleware, async (request, response) => { | ||
| 163 | 177 | } |
| 164 | 178 | |
| 165 | 179 | const handles = await getAllUserHandles(); |
| 166 | 180 | const handle = lodash.kebabCase(Stringslugify(request.body.handle).toLowerCase().trim()); |
| 167 | 181 | |
| 168 | 182 | if (!handle) { |
| 169 | 183 | console.warn('Create user failed: Invalid handle'); |
| @@ -241,7 +255,7 @@ router.post('/slugify', requireAdminMiddleware, async (request, response) => { | ||
| 241 | 255 | return response.status(400).json({ error: 'Missing required fields' }); |
| 242 | 256 | } |
| 243 | 257 | |
| 244 | 258 | const text = lodash.kebabCase(Stringslugify(request.body.text).toLowerCase().trim()); |
| 245 | 259 | |
| 246 | 260 | return response.send(text); |
| 247 | 261 | } catch (error) { |