From a4fe4d3cf55a8b94705523c494e8684d002903d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 30 Nov 2020 11:08:00 -0500 Subject: [PATCH] fix: allow guests to see their replies immediately --- src/api/topics.js | 8 +++++++- src/socket.io/index.js | 5 +++-- src/user/online.js | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/api/topics.js b/src/api/topics.js index 10ef0a8809..98b87c95b6 100644 --- a/src/api/topics.js +++ b/src/api/topics.js @@ -8,6 +8,7 @@ const meta = require('../meta'); const apiHelpers = require('./helpers'); const doTopicAction = apiHelpers.doTopicAction; +const websockets = require('../socket.io'); const socketHelpers = require('../socket.io/helpers'); const topicsAPI = module.exports; @@ -72,7 +73,12 @@ topicsAPI.reply = async function (caller, data) { }; user.updateOnlineUsers(caller.uid); - socketHelpers.emitToUids('event:new_post', result, [caller.uid]); + if (caller.uid) { + socketHelpers.emitToUids('event:new_post', result, [caller.uid]); + } else if (caller.uid === 0 && caller.sessionID) { + websockets.in('sess_' + caller.sessionID).emit('event:new_post', result); + } + socketHelpers.notifyNew(caller.uid, 'newPost', result); return postObj[0]; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 9d57d08c68..952595f57a 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -198,14 +198,15 @@ async function authorize(socket, callback) { } await cookieParserAsync(request); - - const sessionData = await getSessionAsync(request.signedCookies[nconf.get('sessionKey')]); + const sid = request.signedCookies[nconf.get('sessionKey')]; + const sessionData = await getSessionAsync(sid); if (sessionData && sessionData.passport && sessionData.passport.user) { request.session = sessionData; socket.uid = parseInt(sessionData.passport.user, 10); } else { socket.uid = 0; } + socket.sessionID = sid; request.uid = socket.uid; callback(); } diff --git a/src/user/online.js b/src/user/online.js index a4c2be313c..fd144cad05 100644 --- a/src/user/online.js +++ b/src/user/online.js @@ -7,6 +7,9 @@ var meta = require('../meta'); module.exports = function (User) { User.updateLastOnlineTime = async function (uid) { + if (!(parseInt(uid, 10) > 0)) { + return; + } const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']); const now = Date.now(); if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) { @@ -16,6 +19,9 @@ module.exports = function (User) { }; User.updateOnlineUsers = async function (uid) { + if (!(parseInt(uid, 10) > 0)) { + return; + } const now = Date.now(); const userOnlineTime = await db.sortedSetScore('users:online', uid); if (now - parseInt(userOnlineTime, 10) < 300000) {