mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2024-09-20 04:54:00 +02:00
Move shadow ban list to public db
Warning: Migration is not automatic
This commit is contained in:
parent
f45241d494
commit
48d88614fb
10 changed files with 35 additions and 26 deletions
|
@ -1,8 +1,5 @@
|
||||||
BEGIN TRANSACTION;
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS "shadowBannedUsers" (
|
|
||||||
"userID" TEXT NOT NULL
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS "votes" (
|
CREATE TABLE IF NOT EXISTS "votes" (
|
||||||
"UUID" TEXT NOT NULL,
|
"UUID" TEXT NOT NULL,
|
||||||
"userID" TEXT NOT NULL,
|
"userID" TEXT NOT NULL,
|
||||||
|
|
|
@ -64,3 +64,10 @@ CREATE INDEX IF NOT EXISTS "categoryVotes_UUID_public"
|
||||||
ON public."categoryVotes" USING btree
|
ON public."categoryVotes" USING btree
|
||||||
("UUID" COLLATE pg_catalog."default" ASC NULLS LAST, category COLLATE pg_catalog."default" ASC NULLS LAST)
|
("UUID" COLLATE pg_catalog."default" ASC NULLS LAST, category COLLATE pg_catalog."default" ASC NULLS LAST)
|
||||||
TABLESPACE pg_default;
|
TABLESPACE pg_default;
|
||||||
|
|
||||||
|
-- shadowBannedUsers
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS "shadowBannedUsers_index"
|
||||||
|
ON public."shadowBannedUsers" USING btree
|
||||||
|
("userID" COLLATE pg_catalog."default" ASC NULLS LAST)
|
||||||
|
TABLESPACE pg_default;
|
9
databases/_upgrade_sponsorTimes_14.sql
Normal file
9
databases/_upgrade_sponsorTimes_14.sql
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS "shadowBannedUsers" (
|
||||||
|
"userID" TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
UPDATE "config" SET value = 14 WHERE key = 'version';
|
||||||
|
|
||||||
|
COMMIT;
|
|
@ -29,8 +29,8 @@ async function generateTopUsersStats(sortBy: string, categoryStatsEnabled: boole
|
||||||
SUM("votes") as "userVotes", ` +
|
SUM("votes") as "userVotes", ` +
|
||||||
additionalFields +
|
additionalFields +
|
||||||
`IFNULL("userNames"."userName", "sponsorTimes"."userID") as "userName" FROM "sponsorTimes" LEFT JOIN "userNames" ON "sponsorTimes"."userID"="userNames"."userID"
|
`IFNULL("userNames"."userName", "sponsorTimes"."userID") as "userName" FROM "sponsorTimes" LEFT JOIN "userNames" ON "sponsorTimes"."userID"="userNames"."userID"
|
||||||
LEFT JOIN "privateDB"."shadowBannedUsers" ON "sponsorTimes"."userID"="privateDB"."shadowBannedUsers"."userID"
|
LEFT JOIN "shadowBannedUsers" ON "sponsorTimes"."userID"="shadowBannedUsers"."userID"
|
||||||
WHERE "sponsorTimes"."votes" > -1 AND "sponsorTimes"."shadowHidden" != 1 AND "privateDB"."shadowBannedUsers"."userID" IS NULL
|
WHERE "sponsorTimes"."votes" > -1 AND "sponsorTimes"."shadowHidden" != 1 AND "shadowBannedUsers"."userID" IS NULL
|
||||||
GROUP BY IFNULL("userName", "sponsorTimes"."userID") HAVING "userVotes" > 20
|
GROUP BY IFNULL("userName", "sponsorTimes"."userID") HAVING "userVotes" > 20
|
||||||
ORDER BY "${sortBy}" DESC LIMIT 100`, []);
|
ORDER BY "${sortBy}" DESC LIMIT 100`, []);
|
||||||
|
|
||||||
|
@ -71,10 +71,6 @@ export async function getTopUsers(req: Request, res: Response) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: remove. This is broken for now
|
|
||||||
res.status(200).send();
|
|
||||||
return;
|
|
||||||
|
|
||||||
//setup which sort type to use
|
//setup which sort type to use
|
||||||
let sortBy = '';
|
let sortBy = '';
|
||||||
if (sortType == 0) {
|
if (sortType == 0) {
|
||||||
|
|
|
@ -485,7 +485,7 @@ export async function postSkipSegments(req: Request, res: Response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//check to see if this user is shadowbanned
|
//check to see if this user is shadowbanned
|
||||||
const shadowBanRow = await privateDB.prepare('get', `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
const shadowBanRow = await db.prepare('get', `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
||||||
|
|
||||||
let shadowBanned = shadowBanRow.userCount;
|
let shadowBanned = shadowBanRow.userCount;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {db, privateDB} from '../databases/databases';
|
import {db} from '../databases/databases';
|
||||||
import {getHash} from '../utils/getHash';
|
import {getHash} from '../utils/getHash';
|
||||||
import {Request, Response} from 'express';
|
import {Request, Response} from 'express';
|
||||||
import { config } from '../config';
|
import { config } from '../config';
|
||||||
|
@ -39,13 +39,13 @@ export async function shadowBanUser(req: Request, res: Response) {
|
||||||
|
|
||||||
if (userID) {
|
if (userID) {
|
||||||
//check to see if this user is already shadowbanned
|
//check to see if this user is already shadowbanned
|
||||||
const row = await privateDB.prepare('get', `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
const row = await db.prepare('get', `SELECT count(*) as "userCount" FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
||||||
|
|
||||||
if (enabled && row.userCount == 0) {
|
if (enabled && row.userCount == 0) {
|
||||||
//add them to the shadow ban list
|
//add them to the shadow ban list
|
||||||
|
|
||||||
//add it to the table
|
//add it to the table
|
||||||
await privateDB.prepare('run', `INSERT INTO "shadowBannedUsers" VALUES(?)`, [userID]);
|
await db.prepare('run', `INSERT INTO "shadowBannedUsers" VALUES(?)`, [userID]);
|
||||||
|
|
||||||
//find all previous submissions and hide them
|
//find all previous submissions and hide them
|
||||||
if (unHideOldSubmissions) {
|
if (unHideOldSubmissions) {
|
||||||
|
@ -62,7 +62,7 @@ export async function shadowBanUser(req: Request, res: Response) {
|
||||||
}
|
}
|
||||||
} else if (!enabled && row.userCount > 0) {
|
} else if (!enabled && row.userCount > 0) {
|
||||||
//remove them from the shadow ban list
|
//remove them from the shadow ban list
|
||||||
await privateDB.prepare('run', `DELETE FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
await db.prepare('run', `DELETE FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
||||||
|
|
||||||
//find all previous submissions and unhide them
|
//find all previous submissions and unhide them
|
||||||
if (unHideOldSubmissions) {
|
if (unHideOldSubmissions) {
|
||||||
|
@ -106,7 +106,7 @@ export async function shadowBanUser(req: Request, res: Response) {
|
||||||
}
|
}
|
||||||
} /*else if (!enabled && row.userCount > 0) {
|
} /*else if (!enabled && row.userCount > 0) {
|
||||||
// //remove them from the shadow ban list
|
// //remove them from the shadow ban list
|
||||||
// await privateDB.prepare('run', "DELETE FROM shadowBannedUsers WHERE userID = ?", [userID]);
|
// await db.prepare('run', "DELETE FROM shadowBannedUsers WHERE userID = ?", [userID]);
|
||||||
|
|
||||||
// //find all previous submissions and unhide them
|
// //find all previous submissions and unhide them
|
||||||
// if (unHideOldSubmissions) {
|
// if (unHideOldSubmissions) {
|
||||||
|
|
|
@ -404,7 +404,7 @@ export async function voteOnSponsorTime(req: Request, res: Response) {
|
||||||
const ableToVote = isVIP
|
const ableToVote = isVIP
|
||||||
|| (!(isOwnSubmission && incrementAmount > 0)
|
|| (!(isOwnSubmission && incrementAmount > 0)
|
||||||
&& (await db.prepare("get", `SELECT "userID" FROM "sponsorTimes" WHERE "userID" = ?`, [nonAnonUserID])) !== undefined
|
&& (await db.prepare("get", `SELECT "userID" FROM "sponsorTimes" WHERE "userID" = ?`, [nonAnonUserID])) !== undefined
|
||||||
&& (await privateDB.prepare("get", `SELECT "userID" FROM "shadowBannedUsers" WHERE "userID" = ?`, [nonAnonUserID])) === undefined
|
&& (await db.prepare("get", `SELECT "userID" FROM "shadowBannedUsers" WHERE "userID" = ?`, [nonAnonUserID])) === undefined
|
||||||
&& (await privateDB.prepare("get", `SELECT "UUID" FROM "votes" WHERE "UUID" = ? AND "hashedIP" = ? AND "userID" != ?`, [UUID, hashedIP, userID])) === undefined)
|
&& (await privateDB.prepare("get", `SELECT "UUID" FROM "votes" WHERE "UUID" = ? AND "hashedIP" = ? AND "userID" != ?`, [UUID, hashedIP, userID])) === undefined)
|
||||||
&& !finalResponse.blockVote
|
&& !finalResponse.blockVote
|
||||||
&& finalResponse.finalStatus === 200;
|
&& finalResponse.finalStatus === 200;
|
||||||
|
|
|
@ -17,7 +17,7 @@ describe('shadowBanUser', () => {
|
||||||
db.prepare("run", startOfQuery + "('testtesttest', 1, 11, 2, 0, 'shadow-3-uuid-0', 'shadowBanned3', 0, 50, 'sponsor', 'YouTube', 100, 0, 1, '" + getHash('testtesttest', 1) + "')");
|
db.prepare("run", startOfQuery + "('testtesttest', 1, 11, 2, 0, 'shadow-3-uuid-0', 'shadowBanned3', 0, 50, 'sponsor', 'YouTube', 100, 0, 1, '" + getHash('testtesttest', 1) + "')");
|
||||||
db.prepare("run", startOfQuery + "('testtesttest2', 1, 11, 2, 0, 'shadow-3-uuid-0-1', 'shadowBanned3', 0, 50, 'sponsor', 'PeerTube', 120, 0, 1, '" + getHash('testtesttest2', 1) + "')");
|
db.prepare("run", startOfQuery + "('testtesttest2', 1, 11, 2, 0, 'shadow-3-uuid-0-1', 'shadowBanned3', 0, 50, 'sponsor', 'PeerTube', 120, 0, 1, '" + getHash('testtesttest2', 1) + "')");
|
||||||
db.prepare("run", startOfQuery + "('testtesttest', 20, 33, 2, 0, 'shadow-3-uuid-2', 'shadowBanned3', 0, 50, 'intro', 'YouTube', 101, 0, 1, '" + getHash('testtesttest', 1) + "')");
|
db.prepare("run", startOfQuery + "('testtesttest', 20, 33, 2, 0, 'shadow-3-uuid-2', 'shadowBanned3', 0, 50, 'intro', 'YouTube', 101, 0, 1, '" + getHash('testtesttest', 1) + "')");
|
||||||
privateDB.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('shadowBanned3')`);
|
db.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('shadowBanned3')`);
|
||||||
|
|
||||||
db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("shadow-ban-vip") + "')");
|
db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("shadow-ban-vip") + "')");
|
||||||
});
|
});
|
||||||
|
@ -31,7 +31,7 @@ describe('shadowBanUser', () => {
|
||||||
if (res.status !== 200) done("Status code was: " + res.status);
|
if (res.status !== 200) done("Status code was: " + res.status);
|
||||||
else {
|
else {
|
||||||
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned", 1]);
|
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned", 1]);
|
||||||
const shadowRow = await privateDB.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned"]);
|
const shadowRow = await db.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned"]);
|
||||||
|
|
||||||
if (shadowRow && videoRow?.length === 3) {
|
if (shadowRow && videoRow?.length === 3) {
|
||||||
done();
|
done();
|
||||||
|
@ -51,7 +51,7 @@ describe('shadowBanUser', () => {
|
||||||
if (res.status !== 200) done("Status code was: " + res.status);
|
if (res.status !== 200) done("Status code was: " + res.status);
|
||||||
else {
|
else {
|
||||||
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned", 1]);
|
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned", 1]);
|
||||||
const shadowRow = await privateDB.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned"]);
|
const shadowRow = await db.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned"]);
|
||||||
|
|
||||||
if (!shadowRow && videoRow?.length === 3) {
|
if (!shadowRow && videoRow?.length === 3) {
|
||||||
done();
|
done();
|
||||||
|
@ -71,7 +71,7 @@ describe('shadowBanUser', () => {
|
||||||
if (res.status !== 200) done("Status code was: " + res.status);
|
if (res.status !== 200) done("Status code was: " + res.status);
|
||||||
else {
|
else {
|
||||||
const videoRow: {category: string, shadowHidden: number}[] = (await db.prepare('all', `SELECT "shadowHidden", "category" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned2", 1]));
|
const videoRow: {category: string, shadowHidden: number}[] = (await db.prepare('all', `SELECT "shadowHidden", "category" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned2", 1]));
|
||||||
const shadowRow = await privateDB.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned2"]);
|
const shadowRow = await db.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned2"]);
|
||||||
|
|
||||||
if (shadowRow && 2 == videoRow?.length && 2 === videoRow?.filter((elem) => elem?.category === "sponsor")?.length) {
|
if (shadowRow && 2 == videoRow?.length && 2 === videoRow?.filter((elem) => elem?.category === "sponsor")?.length) {
|
||||||
done();
|
done();
|
||||||
|
@ -91,7 +91,7 @@ describe('shadowBanUser', () => {
|
||||||
if (res.status !== 200) done("Status code was: " + res.status);
|
if (res.status !== 200) done("Status code was: " + res.status);
|
||||||
else {
|
else {
|
||||||
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned2", 1]);
|
const videoRow = await db.prepare('all', `SELECT "shadowHidden" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned2", 1]);
|
||||||
const shadowRow = await privateDB.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned2"]);
|
const shadowRow = await db.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned2"]);
|
||||||
|
|
||||||
if (!shadowRow && videoRow?.length === 0) {
|
if (!shadowRow && videoRow?.length === 0) {
|
||||||
done();
|
done();
|
||||||
|
@ -111,7 +111,7 @@ describe('shadowBanUser', () => {
|
||||||
if (res.status !== 200) done("Status code was: " + res.status);
|
if (res.status !== 200) done("Status code was: " + res.status);
|
||||||
else {
|
else {
|
||||||
const videoRow = await db.prepare('all', `SELECT "shadowHidden", "category" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned3", 1]);
|
const videoRow = await db.prepare('all', `SELECT "shadowHidden", "category" FROM "sponsorTimes" WHERE "userID" = ? AND "shadowHidden" = ?`, ["shadowBanned3", 1]);
|
||||||
const shadowRow = await privateDB.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned3"]);
|
const shadowRow = await db.prepare('get', `SELECT * FROM "shadowBannedUsers" WHERE "userID" = ?`, ["shadowBanned3"]);
|
||||||
|
|
||||||
if (!shadowRow && videoRow?.length === 1 && videoRow[0]?.category === "intro") {
|
if (!shadowRow && videoRow?.length === 1 && videoRow[0]?.category === "intro") {
|
||||||
done();
|
done();
|
||||||
|
|
|
@ -8,9 +8,9 @@ import { Logger } from '../../src/utils/logger.js';
|
||||||
|
|
||||||
describe('unBan', () => {
|
describe('unBan', () => {
|
||||||
before(async () => {
|
before(async () => {
|
||||||
await privateDB.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testMan-unBan')`);
|
await db.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testMan-unBan')`);
|
||||||
await privateDB.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testWoman-unBan')`);
|
await db.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testWoman-unBan')`);
|
||||||
await privateDB.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testEntity-unBan')`);
|
await db.prepare("run", `INSERT INTO "shadowBannedUsers" VALUES('testEntity-unBan')`);
|
||||||
|
|
||||||
await db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("VIPUser-unBan") + "')");
|
await db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("VIPUser-unBan") + "')");
|
||||||
await db.prepare("run", `INSERT INTO "lockCategories" ("userID", "videoID", "category") VALUES ('` + getHash("VIPUser-unBan") + "', 'unBan-videoID-1', 'sponsor')");
|
await db.prepare("run", `INSERT INTO "lockCategories" ("userID", "videoID", "category") VALUES ('` + getHash("VIPUser-unBan") + "', 'unBan-videoID-1', 'sponsor')");
|
||||||
|
|
|
@ -57,7 +57,7 @@ describe('voteOnSponsorTime', () => {
|
||||||
|
|
||||||
|
|
||||||
await db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("VIPUser") + "')");
|
await db.prepare("run", `INSERT INTO "vipUsers" ("userID") VALUES ('` + getHash("VIPUser") + "')");
|
||||||
await privateDB.prepare("run", `INSERT INTO "shadowBannedUsers" ("userID") VALUES ('` + getHash("randomID4") + "')");
|
await db.prepare("run", `INSERT INTO "shadowBannedUsers" ("userID") VALUES ('` + getHash("randomID4") + "')");
|
||||||
|
|
||||||
await db.prepare("run", `INSERT INTO "lockCategories" ("videoID", "userID", "category") VALUES ('no-sponsor-segments-video', 'someUser', 'sponsor')`);
|
await db.prepare("run", `INSERT INTO "lockCategories" ("videoID", "userID", "category") VALUES ('no-sponsor-segments-video', 'someUser', 'sponsor')`);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue