From e9dbb88f26f417cab0717daeac457b66164b6014 Mon Sep 17 00:00:00 2001 From: salman Date: Mon, 2 Sep 2024 22:24:22 +0300 Subject: [PATCH 1/8] Refactoring the flag.validate function to reduce complexity --- src/flags.js | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/flags.js b/src/flags.js index 00bce1d9bd..298db9215b 100644 --- a/src/flags.js +++ b/src/flags.js @@ -273,6 +273,8 @@ Flags.sort = async function (flagIds, sort) { return flagIds; }; +// help from ChatGPT + Flags.validate = async function (payload) { const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), @@ -281,19 +283,22 @@ Flags.validate = async function (payload) { if (!target) { throw new Error('[[error:invalid-data]]'); - } else if (target.deleted) { + } + if (target.deleted) { throw new Error('[[error:post-deleted]]'); - } else if (!reporter || !reporter.userslug) { + } + if (!reporter || !reporter.userslug) { throw new Error('[[error:no-user]]'); - } else if (reporter.banned) { + } + if (reporter.banned) { throw new Error('[[error:user-banned]]'); } - // Disallow flagging of profiles/content of privileged users const [targetPrivileged, reporterPrivileged] = await Promise.all([ user.isPrivileged(target.uid), user.isPrivileged(reporter.uid), ]); + if (targetPrivileged && !reporterPrivileged) { throw new Error('[[error:cant-flag-privileged]]'); } @@ -303,7 +308,10 @@ Flags.validate = async function (payload) { if (!editable.flag && !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']}]]`); } - } else if (payload.type === 'user') { + return; + } + + if (payload.type === 'user') { if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { throw new Error('[[error:cant-flag-self]]'); } @@ -311,11 +319,14 @@ Flags.validate = async function (payload) { 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']}]]`); } - } else { - throw new Error('[[error:invalid-data]]'); + return; } + + throw new Error('[[error:invalid-data]]'); }; + + Flags.getNotes = async function (flagId) { let notes = await db.getSortedSetRevRangeWithScores(`flag:${flagId}:notes`, 0, -1); notes = await modifyNotes(notes); From 185b0f8aed476839e158924f467e2455b2d5b055 Mon Sep 17 00:00:00 2001 From: salman Date: Tue, 3 Sep 2024 15:06:43 +0300 Subject: [PATCH 2/8] Add print statement to flag.js --- src/flags.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/flags.js b/src/flags.js index 298db9215b..3b5c0731e2 100644 --- a/src/flags.js +++ b/src/flags.js @@ -276,6 +276,7 @@ Flags.sort = async function (flagIds, sort) { // help from ChatGPT Flags.validate = async function (payload) { + console.log('Salman Al-Saigh'); const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), user.getUserData(payload.uid), From 15d9ca4e7ee593929e90778969d18596c881e36b Mon Sep 17 00:00:00 2001 From: salman Date: Tue, 3 Sep 2024 16:56:21 +0300 Subject: [PATCH 3/8] Split the validate function into multiple parts --- src/flags.js | 95 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 71 insertions(+), 24 deletions(-) diff --git a/src/flags.js b/src/flags.js index 3b5c0731e2..2e5c08056e 100644 --- a/src/flags.js +++ b/src/flags.js @@ -273,15 +273,35 @@ Flags.sort = async function (flagIds, sort) { return flagIds; }; -// help from ChatGPT +// Help from chatgpt Flags.validate = async function (payload) { - console.log('Salman Al-Saigh'); const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), user.getUserData(payload.uid), ]); + validateTargetAndReporter(target, reporter); + + const [targetPrivileged, reporterPrivileged] = await Promise.all([ + user.isPrivileged(target.uid), + user.isPrivileged(reporter.uid), + ]); + + if (targetPrivileged && !reporterPrivileged) { + throw new Error('[[error:cant-flag-privileged]]'); + } + + if (payload.type === 'post') { + await validatePost(payload, reporter); + } else if (payload.type === 'user') { + await validateUser(payload, reporter); + } else { + throw new Error('[[error:invalid-data]]'); + } +}; + +function validateTargetAndReporter(target, reporter) { if (!target) { throw new Error('[[error:invalid-data]]'); } @@ -294,38 +314,65 @@ Flags.validate = async function (payload) { if (reporter.banned) { throw new Error('[[error:user-banned]]'); } +} - const [targetPrivileged, reporterPrivileged] = await Promise.all([ - user.isPrivileged(target.uid), - user.isPrivileged(reporter.uid), - ]); +async function validatePost(payload, reporter) { + const editable = await privileges.posts.canEdit(payload.id, payload.uid); + if (!editable.flag && !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']}]]`); + } +} - if (targetPrivileged && !reporterPrivileged) { - throw new Error('[[error:cant-flag-privileged]]'); +async function validateUser(payload, reporter) { + if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { + throw new Error('[[error:cant-flag-self]]'); + } + 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']}]]`); } +} - if (payload.type === 'post') { - const editable = await privileges.posts.canEdit(payload.id, payload.uid); - if (!editable.flag && !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']}]]`); - } - return; + + +Flags.getNotes = async function (flagId) { + let notes = await db.getSortedSetRevRangeWithScores(`flag:${flagId}:notes`, 0, -1); + notes = await modifyNotes(notes); + return notes; +}; + +Flags.getNote = async function (flagId, datetime) { + datetime = parseInt(datetime, 10); + if (isNaN(datetime)) { + throw new Error('[[error:invalid-data]]'); } - if (payload.type === 'user') { - if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { - throw new Error('[[error:cant-flag-self]]'); - } - 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']}]]`); - } - return; + let notes = await db.getSortedSetRangeByScoreWithScores(`flag:${flagId}:notes`, 0, 1, datetime, datetime); + if (!notes.length) { + throw new Error('[[error:invalid-data]]'); } - throw new Error('[[error:invalid-data]]'); + notes = await modifyNotes(notes); + return notes[0]; }; +Flags.getFlagIdByTarget = async function (type, id) { + let method; + switch (type) { + case 'post': + method = posts.getPostField; + break; + + case 'user': + method = user.getUserField; + break; + + default: + throw new Error('[[error:invalid-data]]'); + } + + return await method(id, 'flagId'); +}; Flags.getNotes = async function (flagId) { From 1583d7ed5f676171dca3a90dc67c16ea3beea1a4 Mon Sep 17 00:00:00 2001 From: salman Date: Wed, 4 Sep 2024 13:32:28 +0300 Subject: [PATCH 4/8] Test the origninal file --- src/flags.js | 101 +++++++++++---------------------------------------- 1 file changed, 22 insertions(+), 79 deletions(-) diff --git a/src/flags.js b/src/flags.js index 2e5c08056e..6249c9ee63 100644 --- a/src/flags.js +++ b/src/flags.js @@ -273,107 +273,50 @@ Flags.sort = async function (flagIds, sort) { return flagIds; }; -// Help from chatgpt - +// Chatgpt Assisted Code Flags.validate = async function (payload) { const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), user.getUserData(payload.uid), ]); - validateTargetAndReporter(target, reporter); + if (!target) { + throw new Error('[[error:invalid-data]]'); + } else if (target.deleted) { + throw new Error('[[error:post-deleted]]'); + } else if (!reporter || !reporter.userslug) { + throw new Error('[[error:no-user]]'); + } else if (reporter.banned) { + throw new Error('[[error:user-banned]]'); + } + // Disallow flagging of profiles/content of privileged users const [targetPrivileged, reporterPrivileged] = await Promise.all([ user.isPrivileged(target.uid), user.isPrivileged(reporter.uid), ]); - if (targetPrivileged && !reporterPrivileged) { throw new Error('[[error:cant-flag-privileged]]'); } if (payload.type === 'post') { - await validatePost(payload, reporter); + const editable = await privileges.posts.canEdit(payload.id, payload.uid); + if (!editable.flag && !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']}]]`); + } } else if (payload.type === 'user') { - await validateUser(payload, reporter); + if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { + throw new Error('[[error:cant-flag-self]]'); + } + 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']}]]`); + } } else { throw new Error('[[error:invalid-data]]'); } }; -function validateTargetAndReporter(target, reporter) { - if (!target) { - throw new Error('[[error:invalid-data]]'); - } - if (target.deleted) { - throw new Error('[[error:post-deleted]]'); - } - if (!reporter || !reporter.userslug) { - throw new Error('[[error:no-user]]'); - } - if (reporter.banned) { - throw new Error('[[error:user-banned]]'); - } -} - -async function validatePost(payload, reporter) { - const editable = await privileges.posts.canEdit(payload.id, payload.uid); - if (!editable.flag && !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']}]]`); - } -} - -async function validateUser(payload, reporter) { - if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { - throw new Error('[[error:cant-flag-self]]'); - } - 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']}]]`); - } -} - - - -Flags.getNotes = async function (flagId) { - let notes = await db.getSortedSetRevRangeWithScores(`flag:${flagId}:notes`, 0, -1); - notes = await modifyNotes(notes); - return notes; -}; - -Flags.getNote = async function (flagId, datetime) { - datetime = parseInt(datetime, 10); - if (isNaN(datetime)) { - throw new Error('[[error:invalid-data]]'); - } - - let notes = await db.getSortedSetRangeByScoreWithScores(`flag:${flagId}:notes`, 0, 1, datetime, datetime); - if (!notes.length) { - throw new Error('[[error:invalid-data]]'); - } - - notes = await modifyNotes(notes); - return notes[0]; -}; - -Flags.getFlagIdByTarget = async function (type, id) { - let method; - switch (type) { - case 'post': - method = posts.getPostField; - break; - - case 'user': - method = user.getUserField; - break; - - default: - throw new Error('[[error:invalid-data]]'); - } - - return await method(id, 'flagId'); -}; - Flags.getNotes = async function (flagId) { let notes = await db.getSortedSetRevRangeWithScores(`flag:${flagId}:notes`, 0, -1); From 8457952bcb3b4676d7eba1b29a28aa0dc0ac5c95 Mon Sep 17 00:00:00 2001 From: salman Date: Wed, 4 Sep 2024 20:50:36 +0300 Subject: [PATCH 5/8] Return back to the second commit --- src/flags.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/flags.js b/src/flags.js index 6249c9ee63..ade04d16b9 100644 --- a/src/flags.js +++ b/src/flags.js @@ -275,22 +275,23 @@ Flags.sort = async function (flagIds, sort) { // Chatgpt Assisted Code Flags.validate = async function (payload) { + console.log('Salman Al-Saigh'); const [target, reporter] = await Promise.all([ Flags.getTarget(payload.type, payload.id, payload.uid), user.getUserData(payload.uid), ]); - if (!target) { throw new Error('[[error:invalid-data]]'); - } else if (target.deleted) { + } + if (target.deleted) { throw new Error('[[error:post-deleted]]'); - } else if (!reporter || !reporter.userslug) { + } + if (!reporter || !reporter.userslug) { throw new Error('[[error:no-user]]'); - } else if (reporter.banned) { + } + if (reporter.banned) { throw new Error('[[error:user-banned]]'); } - - // Disallow flagging of profiles/content of privileged users const [targetPrivileged, reporterPrivileged] = await Promise.all([ user.isPrivileged(target.uid), user.isPrivileged(reporter.uid), @@ -298,13 +299,14 @@ Flags.validate = async function (payload) { if (targetPrivileged && !reporterPrivileged) { throw new Error('[[error:cant-flag-privileged]]'); } - if (payload.type === 'post') { const editable = await privileges.posts.canEdit(payload.id, payload.uid); if (!editable.flag && !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']}]]`); } - } else if (payload.type === 'user') { + return; + } + if (payload.type === 'user') { if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { throw new Error('[[error:cant-flag-self]]'); } @@ -312,12 +314,13 @@ Flags.validate = async function (payload) { 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']}]]`); } - } else { - throw new Error('[[error:invalid-data]]'); + return; } + throw new Error('[[error:invalid-data]]'); }; + Flags.getNotes = async function (flagId) { let notes = await db.getSortedSetRevRangeWithScores(`flag:${flagId}:notes`, 0, -1); notes = await modifyNotes(notes); From 032614c9684e0986ffadbc0445b531c58c422445 Mon Sep 17 00:00:00 2001 From: salman Date: Thu, 5 Sep 2024 11:04:03 +0300 Subject: [PATCH 6/8] Increased the code coverage --- dump.rdb | Bin 0 -> 57123 bytes test/flags.js | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 dump.rdb diff --git a/dump.rdb b/dump.rdb new file mode 100644 index 0000000000000000000000000000000000000000..4795fc378c338b0465170b4e1a66241ff63972bc GIT binary patch literal 57123 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 TDqml&{oNDfPZribyyyP`J(qi- literal 0 HcmV?d00001 diff --git a/test/flags.js b/test/flags.js index ee150a10c4..5aae05490a 100644 --- a/test/flags.js +++ b/test/flags.js @@ -754,6 +754,33 @@ describe('Flags', () => { done(); }); }); + + //ChatGPT Assisted from below this comment + + it('should error out if a 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(); + }); + }); + + + + + + //Above is chatgpt assisted code above + + + + + + + }); describe('.appendNote()', () => { From 9b304041db437f0a915d501a720eaf4ae8d0936c Mon Sep 17 00:00:00 2001 From: salman Date: Thu, 5 Sep 2024 11:10:53 +0300 Subject: [PATCH 7/8] fix the lint issues --- test/flags.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/test/flags.js b/test/flags.js index 5aae05490a..555d3bc4ae 100644 --- a/test/flags.js +++ b/test/flags.js @@ -755,13 +755,13 @@ describe('Flags', () => { }); }); - //ChatGPT Assisted from below this comment + // ChatGPT Assisted from below this comment it('should error out if a user tries to flag themselves', (done) => { Flags.validate({ type: 'user', - id: 1, - uid: 1, + id: 1, + uid: 1, }, (err) => { assert.ok(err); assert.strictEqual('[[error:cant-flag-self]]', err.message); @@ -770,17 +770,10 @@ describe('Flags', () => { }); - - - - //Above is chatgpt assisted code above - - - - + // Above is chatgpt assisted code above }); describe('.appendNote()', () => { From fceff4fdb59bca91ebf9636aa79f25c75cb8349b Mon Sep 17 00:00:00 2001 From: salman Date: Thu, 5 Sep 2024 14:28:40 +0300 Subject: [PATCH 8/8] Test the coverage --- dump.rdb | Bin 57123 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 dump.rdb diff --git a/dump.rdb b/dump.rdb deleted file mode 100644 index 4795fc378c338b0465170b4e1a66241ff63972bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57123 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 TDqml&{oNDfPZribyyyP`J(qi-