jschan - Anonymous imageboard software. Classic look, modern features and feel. Works without JavaScript and supports Tor, I2P, Lokinet, etc.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

90 lines
1.9 KiB

'use strict';
const Mongo = require(__dirname+'/db.js')
, cache = require(__dirname+'/../lib/redis/redis.js')
, db = Mongo.db.collection('filters');
module.exports = {
db,
// null board retrieves global filters only
findForBoard: async (board=null, limit=0) => {
let filters = await cache.get(`filters:${board}`);
if (filters) {
return filters === 'no_exist' ? [] : filters;
} else {
filters = await db.find({
'board': board
}).sort({
'_id': -1
})
.limit(limit)
.toArray();
if (filters) {
cache.set(`filters:${board}`, filters, 3600);
} else {
cache.set(`filters:${board}`, 'no_exist', 600);
}
}
return filters;
},
count: (board=null) => {
return db.countDocuments({'board': board});
},
findOne: (board=null, id) => {
return db.findOne({
'_id': id,
'board': board,
});
},
updateOne: async (board=null, id, filters, strictFiltering, filterMode, filterMessage, filterBanDuration, filterBanAppealable) => {
const updatedFilter = await db.updateOne({
'_id': id,
'board': board,
}, {
'$set': {
'filters': filters,
'strictFiltering': strictFiltering,
'filterMode': filterMode,
'filterMessage': filterMessage,
'filterBanDuration': filterBanDuration,
'filterBanAppealable': filterBanAppealable,
}
});
await cache.del(`filters:${board}`);
return updatedFilter;
},
insertOne: async (filter) => {
const insertedFilter = await db.insertOne(filter);
await cache.del(`filters:${filter.board}`);
return insertedFilter;
},
deleteMany: async (board=null, ids) => {
const deletedFilter = await db.deleteMany({
'_id': {
'$in': ids
},
'board': board
});
await cache.del(`filters:${board}`);
return deletedFilter;
},
deleteBoard: async (board=null) => {
const deletedFilters = await db.deleteMany({ 'board': board });
await cache.del(`filters:${board}`);
return deletedFilters;
},
deleteAll: () => {
return db.deleteMany({});
},
};