diff --git a/server/config/bbb.js b/server/config/bbb.js index 4a9ff82..7f49d8f 100644 --- a/server/config/bbb.js +++ b/server/config/bbb.js @@ -74,7 +74,7 @@ export async function createMeeting(room, logoutURL, loginURL = null, presentati const params = { meetingID: room.uid, - name: room.name, + name: room.name.length >= 2 ? room.name : room.name.padEnd(2, ' '), attendeePW, moderatorPW, welcome, diff --git a/server/routes/rooms.js b/server/routes/rooms.js index 0261d9c..b35d550 100644 --- a/server/routes/rooms.js +++ b/server/routes/rooms.js @@ -166,6 +166,9 @@ router.post('/', authenticateToken, async (req, res) => { if (!name || name.trim().length === 0) { return res.status(400).json({ error: 'Room name is required' }); } + if (name.trim().length < 2) { + return res.status(400).json({ error: 'Room name must be at least 2 characters' }); + } // M7: field length limits if (name.trim().length > 100) { @@ -243,6 +246,9 @@ router.put('/:uid', authenticateToken, async (req, res) => { } = req.body; // M12: field length limits (same as create) + if (name && name.trim().length < 2) { + return res.status(400).json({ error: 'Room name must be at least 2 characters' }); + } if (name && name.trim().length > 100) { return res.status(400).json({ error: 'Room name must not exceed 100 characters' }); } diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx index d5f7eab..4c1a9b4 100644 --- a/src/pages/Dashboard.jsx +++ b/src/pages/Dashboard.jsx @@ -205,6 +205,7 @@ export default function Dashboard() { className="input-field" placeholder={t('dashboard.roomNamePlaceholder')} required + minLength={2} /> diff --git a/src/pages/RoomDetail.jsx b/src/pages/RoomDetail.jsx index 3b22ae8..14e2c98 100644 --- a/src/pages/RoomDetail.jsx +++ b/src/pages/RoomDetail.jsx @@ -502,6 +502,7 @@ export default function RoomDetail() { onChange={e => setEditRoom({ ...editRoom, name: e.target.value })} className="input-field" required + minLength={2} />