diff --git a/src/user/categories.js b/src/user/categories.js index 137cf595e3..38770138a9 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -4,19 +4,25 @@ const _ = require('lodash'); const db = require('../database'); const categories = require('../categories'); -const activitypub = require('../activitypub'); const plugins = require('../plugins'); +const utils = require('../utils'); module.exports = function (User) { 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; } + const isStateValid = Object.values(categories.watchStates).includes(parseInt(state, 10)); if (!isStateValid) { 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); if (exists.includes(false)) { throw new Error('[[error:no-category]]');