cache account info in redis db

merge-requests/208/head
some random guy 4 years ago
parent cd789dba0c
commit 5dc3fe9504
  1. 47
      db/accounts.js
  2. 1
      gulpfile.js
  3. 7
      helpers/sessionrefresh.js

@ -2,7 +2,8 @@
const Mongo = require(__dirname+'/db.js')
, db = Mongo.client.db('jschan').collection('accounts')
, bcrypt = require('bcrypt');
, bcrypt = require('bcrypt')
, cache = require(__dirname+'/../redis.js');
module.exports = {
@ -32,7 +33,7 @@ module.exports = {
// hash the password
const passwordHash = await bcrypt.hash(password, 12);
//add to db
return db.insertOne({
const res = await db.insertOne({
'_id': username,
original,
authLevel,
@ -40,17 +41,21 @@ module.exports = {
'ownedBoards': [],
'modBoards': []
});
cache.del(`users:${username}`);
return res;
},
changePassword: async (username, newPassword) => {
const passwordHash = await bcrypt.hash(newPassword, 12);
return db.updateOne({
const res = await db.updateOne({
'_id': username
}, {
'$set': {
'passwordHash': passwordHash
}
});
cache.del(`users:${username}`);
return res;
},
find: (filter, skip=0, limit=0) => {
@ -63,36 +68,42 @@ module.exports = {
}).skip(skip).limit(limit).toArray();
},
deleteMany: (usernames) => {
return db.deleteMany({
deleteMany: async (usernames) => {
const res = await db.deleteMany({
'_id': {
'$in': usernames
}
});
cache.del(usernames.map(n => `users:${n}`));
return res;
},
addOwnedBoard: (username, board) => {
return db.updateOne({
addOwnedBoard: async (username, board) => {
const res = await db.updateOne({
'_id': username
}, {
'$addToSet': {
'ownedBoards': board
}
});
cache.del(`users:${username}`);
return res;
},
removeOwnedBoard: (username, board) => {
return db.updateOne({
removeOwnedBoard: async (username, board) => {
const res = await db.updateOne({
'_id': username
}, {
'$pull': {
'ownedBoards': board
}
});
cache.del(`users:${username}`);
return res;
},
addModBoard: (usernames, board) => {
return db.updateMany({
addModBoard: async (usernames, board) => {
const res = await db.updateMany({
'_id': {
'$in': usernames
}
@ -101,10 +112,12 @@ module.exports = {
'modBoards': board
}
});
cache.del(`users:${username}`);
return res;
},
removeModBoard: (usernames, board) => {
return db.updateMany({
removeModBoard: async (usernames, board) => {
const res = await db.updateMany({
'_id': {
'$in': usernames
}
@ -113,6 +126,8 @@ module.exports = {
'modBoards': board
}
});
cache.del(`users:${username}`);
return res;
},
getOwnedOrModBoards: (usernames) => {
@ -140,9 +155,9 @@ module.exports = {
}).toArray();
},
setLevel: (usernames, level) => {
setLevel: async (usernames, level) => {
//increase users auth level
return db.updateMany({
const res = await db.updateMany({
'_id': {
'$in': usernames
}
@ -151,6 +166,8 @@ module.exports = {
'authLevel': level
}
});
cache.del(`users:${username}`);
return res;
},
deleteAll: () => {

@ -164,6 +164,7 @@ async function cache() {
Redis.deletePattern('boards:listed'),
Redis.deletePattern('board:*'),
Redis.deletePattern('banners:*'),
Redis.deletePattern('users:*'),
Redis.deletePattern('blacklisted:*'),
]);
Redis.redisClient.quit();

@ -1,10 +1,10 @@
'use strict';
const { Accounts } = require(__dirname+'/../db/');
const { Accounts } = require(__dirname+'/../db/')
, cache = require(__dirname+'/../redis.js');
module.exports = async (req, res, next) => {
if (req.session && req.session.user) {
// keeping session updated incase user updated on global manage
if (req.session && req.session.user && !res.locals.user) {
const account = await Accounts.findOne(req.session.user);
if (!account) {
req.session.destroy();
@ -15,6 +15,7 @@ module.exports = async (req, res, next) => {
'modBoards': account.modBoards,
'ownedBoards': account.ownedBoards,
};
cache.set(`users:${req.session.user}`, res.locals.user, 3600);
}
}
next();

Loading…
Cancel
Save