mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 17:16:14 +01:00
fix: #13087, disallow following cid -1
This commit is contained in:
@@ -4,19 +4,25 @@ const _ = require('lodash');
|
|||||||
|
|
||||||
const db = require('../database');
|
const db = require('../database');
|
||||||
const categories = require('../categories');
|
const categories = require('../categories');
|
||||||
const activitypub = require('../activitypub');
|
|
||||||
const plugins = require('../plugins');
|
const plugins = require('../plugins');
|
||||||
|
const utils = require('../utils');
|
||||||
|
|
||||||
module.exports = function (User) {
|
module.exports = function (User) {
|
||||||
User.setCategoryWatchState = async function (uid, cids, state) {
|
User.setCategoryWatchState = async function (uid, cids, state) {
|
||||||
if (!activitypub.helpers.isUri(uid) && !(parseInt(uid, 10) > 0)) {
|
if (utils.isNumber(uid) && parseInt(uid, 10) <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10));
|
const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10));
|
||||||
if (!isStateValid) {
|
if (!isStateValid) {
|
||||||
throw new Error('[[error:invalid-watch-state]]');
|
throw new Error('[[error:invalid-watch-state]]');
|
||||||
}
|
}
|
||||||
cids = Array.isArray(cids) ? cids : [cids];
|
|
||||||
|
cids = new Set(Array.isArray(cids) ? cids : [cids]);
|
||||||
|
cids.delete(-1); // cannot watch cid -1
|
||||||
|
cids.delete('-1');
|
||||||
|
cids = Array.from(cids);
|
||||||
|
|
||||||
const exists = await categories.exists(cids);
|
const exists = await categories.exists(cids);
|
||||||
if (exists.includes(false)) {
|
if (exists.includes(false)) {
|
||||||
throw new Error('[[error:no-category]]');
|
throw new Error('[[error:no-category]]');
|
||||||
|
|||||||
Reference in New Issue
Block a user