From dfbda08ec53a30960a74f42ed3842d4971090718 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Mon, 20 Oct 2025 17:17:46 -0400 Subject: [PATCH] Ensure admin whitelist respects moderation thresholds --- js/app.js | 9 ++------- js/feedEngine/stages.js | 23 ++++++----------------- tests/moderation-stage.test.mjs | 16 ++++++++-------- 3 files changed, 16 insertions(+), 32 deletions(-) diff --git a/js/app.js b/js/app.js index f4fd10e3..a567cbe1 100644 --- a/js/app.js +++ b/js/app.js @@ -5119,13 +5119,8 @@ class Application { : this.deriveModerationTrustedCount(summary, reportType); const thresholds = this.getActiveModerationThresholds(); - const adminWhitelistBypass = existingModeration.adminWhitelistBypass === true; - const computedBlockAutoplay = adminWhitelistBypass - ? false - : trustedCount >= thresholds.autoplayBlockThreshold; - const computedBlurThumbnail = adminWhitelistBypass - ? false - : trustedCount >= thresholds.blurThreshold; + const computedBlockAutoplay = trustedCount >= thresholds.autoplayBlockThreshold; + const computedBlurThumbnail = trustedCount >= thresholds.blurThreshold; const overrideEntry = getModerationOverride(video.id); const overrideActive = overrideEntry?.showAnyway === true; diff --git a/js/feedEngine/stages.js b/js/feedEngine/stages.js index 8c845590..47484c31 100644 --- a/js/feedEngine/stages.js +++ b/js/feedEngine/stages.js @@ -319,14 +319,6 @@ export function createModerationStage({ } : () => ({ hex: "", whitelisted: false, blacklisted: false }); - const feedName = - typeof context?.feedName === "string" ? context.feedName.trim().toLowerCase() : ""; - const runtimeVariant = - typeof context?.runtime?.feedVariant === "string" - ? context.runtime.feedVariant.trim().toLowerCase() - : ""; - const isDiscoveryFeed = feedName === "discovery" || runtimeVariant === "discovery"; - const results = []; for (const item of items) { @@ -470,13 +462,10 @@ export function createModerationStage({ trustedMuters = []; } - let blockAutoplay = trustedCount >= normalizedAutoplayThreshold; - let blurThumbnail = trustedCount >= normalizedBlurThreshold; - const adminWhitelistBypass = isDiscoveryFeed && adminStatus?.whitelisted === true; - if (adminWhitelistBypass) { - blockAutoplay = false; - blurThumbnail = false; - } + const blockAutoplay = trustedCount >= normalizedAutoplayThreshold; + const blurThumbnail = trustedCount >= normalizedBlurThreshold; + const adminWhitelist = adminStatus?.whitelisted === true; + const adminWhitelistBypass = false; if (!item.metadata || typeof item.metadata !== "object") { item.metadata = {}; @@ -495,7 +484,7 @@ export function createModerationStage({ metadataModeration.trustedReporters = Array.isArray(trustedReporters) ? trustedReporters.slice() : []; - metadataModeration.adminWhitelist = adminStatus?.whitelisted === true; + metadataModeration.adminWhitelist = adminWhitelist; metadataModeration.adminWhitelistBypass = adminWhitelistBypass; metadataModeration.trustedMuted = trustedMuted; metadataModeration.trustedMuters = trustedMuters.slice(); @@ -521,7 +510,7 @@ export function createModerationStage({ video.moderation.blurThumbnail = blurThumbnail; video.moderation.trustedCount = trustedCount; video.moderation.reportType = normalizedReportType; - video.moderation.adminWhitelist = adminStatus?.whitelisted === true; + video.moderation.adminWhitelist = adminWhitelist; video.moderation.adminWhitelistBypass = adminWhitelistBypass; video.moderation.trustedMuted = trustedMuted; if (trustedMuted) { diff --git a/tests/moderation-stage.test.mjs b/tests/moderation-stage.test.mjs index 0b62e44d..cb24b4e8 100644 --- a/tests/moderation-stage.test.mjs +++ b/tests/moderation-stage.test.mjs @@ -2,7 +2,7 @@ import test from "node:test"; import assert from "node:assert/strict"; import { createModerationStage } from "../js/feedEngine/stages.js"; -test("moderation stage enforces admin lists and whitelist bypass", async () => { +test("moderation stage enforces admin lists without whitelist bypass", async () => { const whitelistedHex = "1".repeat(64); const blockedHex = "2".repeat(64); const blacklistedHex = "3".repeat(64); @@ -88,11 +88,11 @@ test("moderation stage enforces admin lists and whitelist bypass", async () => { ); const whitelistedItem = result[0]; - assert.equal(whitelistedItem.video.moderation.blockAutoplay, false); - assert.equal(whitelistedItem.video.moderation.blurThumbnail, false); + assert.equal(whitelistedItem.video.moderation.blockAutoplay, true); + assert.equal(whitelistedItem.video.moderation.blurThumbnail, true); assert.equal(whitelistedItem.video.moderation.adminWhitelist, true); - assert.equal(whitelistedItem.video.moderation.adminWhitelistBypass, true); - assert.equal(whitelistedItem.metadata.moderation.adminWhitelistBypass, true); + assert.equal(whitelistedItem.video.moderation.adminWhitelistBypass, false); + assert.equal(whitelistedItem.metadata.moderation.adminWhitelistBypass, false); const normalItem = result[1]; assert.equal(normalItem.video.moderation.blockAutoplay, true); @@ -309,9 +309,9 @@ test("moderation stage propagates whitelist, muters, and threshold updates", asy assert.ok(mutedItem); assert.equal(whitelistedItem.metadata.moderation.adminWhitelist, true); - assert.equal(whitelistedItem.metadata.moderation.blockAutoplay, false); - assert.equal(whitelistedItem.metadata.moderation.blurThumbnail, false); - assert.equal(whitelistedItem.video.moderation.adminWhitelistBypass, true); + assert.equal(whitelistedItem.metadata.moderation.blockAutoplay, true); + assert.equal(whitelistedItem.metadata.moderation.blurThumbnail, true); + assert.equal(whitelistedItem.video.moderation.adminWhitelistBypass, false); assert.equal(mutedItem.metadata.moderation.trustedMuted, true); assert.deepEqual(mutedItem.metadata.moderation.trustedMuters, [muterHex]);