116 lines
3.2 KiB
JavaScript
116 lines
3.2 KiB
JavaScript
const keys = require("../config/keys");
|
|
const UserStatus = require("../models/userStatus");
|
|
const {
|
|
format
|
|
} = require("date-format-parse")
|
|
const {
|
|
customAlphabet
|
|
} = require("nanoid");
|
|
const nanoid = customAlphabet("1234567890abcdefghijklmnopqrstuvwxyz", 10);
|
|
|
|
// Not used
|
|
// module.exports.getUserStatus = async (req, res, next) => {
|
|
// const userStatus = await UserStatus.findOne({
|
|
// username: req.params.username
|
|
// });
|
|
// res.json({
|
|
// userStatus
|
|
// });
|
|
// }
|
|
|
|
module.exports.checkStatus = async (req, res, next) => {
|
|
const userStatus = await UserStatus.findOne({
|
|
username: req.params.username
|
|
});
|
|
var lastPingTs = (format(userStatus?.lastSeen, "x"));
|
|
var currentTs = (format(new Date(), "x"));
|
|
// var diff = currentTs - lastPingTs;
|
|
// console.log(diff/60000);
|
|
if (currentTs - lastPingTs > 240000) {
|
|
const updateUserStatusUpdt = await UserStatus.findOneAndUpdate({
|
|
username: req.params.username
|
|
}, {
|
|
amIOnline: false,
|
|
status: {
|
|
type: "offline",
|
|
updatedBy: "i-am-online-server",
|
|
via: "web",
|
|
heartbeat: {
|
|
key: null
|
|
}
|
|
},
|
|
lastSeen: userStatus.lastSeen
|
|
});
|
|
res.json({
|
|
updateUserStatusUpdt
|
|
});
|
|
} else {
|
|
const updateUserStatusUpdt = await UserStatus.findOneAndUpdate({
|
|
username: req.params.username
|
|
}, {
|
|
amIOnline: true,
|
|
status: {
|
|
type: "online",
|
|
updatedBy: "i-am-online-client",
|
|
via: "desktop",
|
|
heartbeat: {
|
|
key: "self"
|
|
}
|
|
},
|
|
lastSeen: userStatus.lastSeen
|
|
});
|
|
res.json({
|
|
updateUserStatusUpdt
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports.reportUserStatus = async (req, res, next) => {
|
|
if(req.query.auth != keys.pingAuthKey){
|
|
return res.json({
|
|
error: "Invalid auth key"
|
|
});
|
|
}
|
|
const checkIfUserExists = await UserStatus.findOne({
|
|
username: req.params.username
|
|
});
|
|
if (checkIfUserExists) {
|
|
const updateUserStatus = await UserStatus.findOneAndUpdate({
|
|
username: req.params.username
|
|
}, {
|
|
status: {
|
|
type: "online",
|
|
updatedBy: "i-am-online-client",
|
|
via: "desktop",
|
|
heartbeat: {
|
|
key: nanoid(),
|
|
},
|
|
},
|
|
amIOnline: true,
|
|
lastSeen: new Date()
|
|
}, {
|
|
new: true
|
|
});
|
|
res.json({
|
|
updateUserStatus
|
|
});
|
|
} else {
|
|
const userStatus = new UserStatus({
|
|
username: req.params.username,
|
|
status: {
|
|
type: "online",
|
|
via: "desktop",
|
|
updatedBy: "i-am-online-client",
|
|
heartbeat: {
|
|
key: nanoid(),
|
|
},
|
|
amIOnline: true,
|
|
lastSeen: new Date()
|
|
},
|
|
});
|
|
await userStatus.save();
|
|
res.json({
|
|
userStatus
|
|
});
|
|
}
|
|
}; |