From 99ebdc046361eed0cc1a191bf42b38cd6f3ecf38 Mon Sep 17 00:00:00 2001 From: Cheyu Tu Date: Sat, 21 Sep 2024 18:30:30 -0400 Subject: [PATCH] refactor Flag.validate() --- .eslintrc | 5 +- .mocharc.yml | 2 +- dump.rdb | Bin 0 -> 47969 bytes nodebb-theme-mytheme/topic.tpl | 125 +++++++++++++++++++++++++++++++++ src/flags.js | 13 ++-- test/flags.js | 31 ++++++++ 6 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 dump.rdb create mode 100644 nodebb-theme-mytheme/topic.tpl diff --git a/.eslintrc b/.eslintrc index abd292af1b..c1f471f32c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,3 +1,6 @@ { - "extends": "nodebb" + "extends": "nodebb", + "parserOptions": { + "ecmaVersion": 2020 // This change in configuration is suggested by Copilot + } } diff --git a/.mocharc.yml b/.mocharc.yml index 16d8518d1b..b9246aa609 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,4 +1,4 @@ reporter: dot timeout: 25000 exit: true -bail: true +bail: false diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..336c3c46017755497dfdb6dfd93183a0241163e8 GIT binary patch literal 47969 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 z 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 literal 0 HcmV?d00001 diff --git a/nodebb-theme-mytheme/topic.tpl b/nodebb-theme-mytheme/topic.tpl new file mode 100644 index 0000000000..7d9639d9ad --- /dev/null +++ b/nodebb-theme-mytheme/topic.tpl @@ -0,0 +1,125 @@ + +{{{ if config.theme.enableBreadcrumbs }}} + +{{{ end }}} +{{{ if widgets.header.length }}} +
+{{{each widgets.header}}} +{{widgets.header.html}} +{{{end}}} +
+{{{ end }}} + +
+ + + + + + + +

Hahahahaha

+ +
+
+
+

+ {title} +

+ +
+ + + [[topic:scheduled]] + + + {{{ if !pinExpiry }}}[[topic:pinned]]{{{ else }}}[[topic:pinned-with-expiry, {isoTimeToLocaleString(./pinExpiryISO, config.userLang)}]]{{{ end }}} + + + [[topic:locked]] + + + {{{ if privileges.isAdminOrMod }}}[[topic:moved-from, {oldCategory.name}]]{{{ else }}}[[topic:moved]]{{{ end }}} + + {{{each icons}}}{@value}{{{end}}} + + {function.buildCategoryLabel, category, "a", "border"} + + +
+
+
+
+ +
+
+ + {{{ if merger }}} + + {{{ end }}} + {{{ if forker }}} + + {{{ end }}} + {{{ if !scheduled }}} + + {{{ end }}} + +
+
+
    + {{{ each posts }}} +
  • > + + + {{{ if ./editedISO }}} + + {{{ end }}} + + +
  • + {{{ if (config.topicPostSort != "most_votes") }}} + {{{ each ./events}}}{{{ end }}} + {{{ end }}} + {{{ end }}} +
+ {{{ if browsingUsers }}} +
+ +
+
+ {{{ end }}} + {{{ if config.theme.enableQuickReply }}} + + {{{ end }}} +
+ + +
+ + {{{ if config.usePagination }}} + + {{{ end }}} +
+
+ {{{each widgets.sidebar}}} + {{widgets.sidebar.html}} + {{{end}}} +
+
+
+
+ +
+{{{each widgets.footer}}} +{{widgets.footer.html}} +{{{end}}} +
+ +{{{ if !config.usePagination }}} + +{{{ end }}} \ No newline at end of file diff --git a/src/flags.js b/src/flags.js index 00bce1d9bd..3786b2796a 100644 --- a/src/flags.js +++ b/src/flags.js @@ -273,6 +273,13 @@ Flags.sort = async function (flagIds, sort) { return flagIds; }; +function checkSelfFlagError(payload) { + console.log('CHEYU TU - checkSelfFlagError'); + if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { + throw new Error('[[error:cant-flag-self]]'); + } +} + Flags.validate = async function (payload) { const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), @@ -283,7 +290,7 @@ Flags.validate = async function (payload) { throw new Error('[[error:invalid-data]]'); } else if (target.deleted) { throw new Error('[[error:post-deleted]]'); - } else if (!reporter || !reporter.userslug) { + } else if (!reporter?.userslug) { throw new Error('[[error:no-user]]'); } else if (reporter.banned) { throw new Error('[[error:user-banned]]'); @@ -304,9 +311,7 @@ Flags.validate = async function (payload) { throw new Error(`[[error:not-enough-reputation-to-flag, ${meta.config['min:rep:flag']}]]`); } } else if (payload.type === 'user') { - if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { - throw new Error('[[error:cant-flag-self]]'); - } + checkSelfFlagError(payload); const editable = await privileges.users.canEdit(payload.uid, payload.id); if (!editable && !meta.config['reputation:disabled'] && reporter.reputation < meta.config['min:rep:flag']) { throw new Error(`[[error:not-enough-reputation-to-flag, ${meta.config['min:rep:flag']}]]`); diff --git a/test/flags.js b/test/flags.js index ee150a10c4..6b772ceb73 100644 --- a/test/flags.js +++ b/test/flags.js @@ -754,6 +754,37 @@ describe('Flags', () => { done(); }); }); + + function validateUserFlag(done) { + Flags.validate({ + type: 'user', + id: 1, + uid: 3, + }, (err) => { + assert.ok(err); + assert.strictEqual('[[error:not-enough-reputation-to-flag, 50]]', err.message); + Meta.configs.set('min:rep:flag', 0, done); + }); + } + + it('should not pass validation if type is user, flag threshold is set and user rep does not meet it', (done) => { + Meta.configs.set('min:rep:flag', '50', (err) => { + assert.ifError(err); + validateUserFlag(done); + }); + }); + + it('should throw an error if user tries to flag themselves', (done) => { + Flags.validate({ + type: 'user', + id: 1, + uid: 1, + }, (err) => { + assert.ok(err); + assert.strictEqual('[[error:cant-flag-self]]', err.message); + done(); + }); + }); }); describe('.appendNote()', () => {