diff --git a/app/livechat/server/api/v1/room.js b/app/livechat/server/api/v1/room.js index eac9866fcb0..ed5c28f13ab 100644 --- a/app/livechat/server/api/v1/room.js +++ b/app/livechat/server/api/v1/room.js @@ -22,14 +22,20 @@ API.v1.addRoute('livechat/room', { const extraCheckParams = onCheckRoomParams(defaultCheckParams); - try { - check(this.queryParams, extraCheckParams); + check(this.queryParams, extraCheckParams); - const { token, rid: roomId, agentId, ...extraParams } = this.queryParams; + const { token, rid: roomId, agentId, ...extraParams } = this.queryParams; - const guest = findGuest(token); - if (!guest) { - throw new Meteor.Error('invalid-token'); + const guest = findGuest(token); + if (!guest) { + throw new Meteor.Error('invalid-token'); + } + + let room; + if (!roomId) { + room = LivechatRooms.findOneOpenByVisitorToken(token, {}); + if (room) { + return API.v1.success({ room, newRoom: false }); } let agent; @@ -39,13 +45,17 @@ API.v1.addRoute('livechat/room', { agent = { agentId, username }; } - const rid = roomId || Random.id(); - const room = Promise.await(getRoom({ guest, rid, agent, extraParams })); - + const rid = Random.id(); + room = Promise.await(getRoom({ guest, rid, agent, extraParams })); return API.v1.success(room); - } catch (e) { - return API.v1.failure(e); } + + room = LivechatRooms.findOneOpenByRoomIdAndVisitorToken(roomId, token, {}); + if (!room) { + throw new Meteor.Error('invalid-room'); + } + + return API.v1.success({ room, newRoom: false }); }, });