mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-06 03:26:59 +03:00
Add seperate type for dearrow warning
Also add dearrow warning reason as option for user info
This commit is contained in:
7
databases/_upgrade_sponsorTimes_36.sql
Normal file
7
databases/_upgrade_sponsorTimes_36.sql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
ALTER TABLE "warnings" ADD "type" INTEGER default 0;
|
||||||
|
|
||||||
|
UPDATE "config" SET value = 36 WHERE key = 'version';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
@@ -78,6 +78,16 @@ async function dbGetWarningsForUser(userID: HashedUserID): Promise<number> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function dbGetDeArrowWarningReasonForUser(userID: HashedUserID): Promise<number> {
|
||||||
|
try {
|
||||||
|
const row = await db.prepare("get", `SELECT reason FROM "warnings" WHERE "userID" = ? AND "enabled" = 1 AND "type" = 1`, [userID], { useReplica: true });
|
||||||
|
return row?.reason ?? 0;
|
||||||
|
} catch (err) /* istanbul ignore next */ {
|
||||||
|
Logger.error(`Couldn't get warnings for user ${userID}. returning 0`);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function dbGetLastSegmentForUser(userID: HashedUserID): Promise<SegmentUUID> {
|
async function dbGetLastSegmentForUser(userID: HashedUserID): Promise<SegmentUUID> {
|
||||||
try {
|
try {
|
||||||
const row = await db.prepare("get", `SELECT "UUID" FROM "sponsorTimes" WHERE "userID" = ? ORDER BY "timeSubmitted" DESC LIMIT 1`, [userID], { useReplica: true });
|
const row = await db.prepare("get", `SELECT "UUID" FROM "sponsorTimes" WHERE "userID" = ? ORDER BY "timeSubmitted" DESC LIMIT 1`, [userID], { useReplica: true });
|
||||||
@@ -153,6 +163,7 @@ const dbGetValue = (userID: HashedUserID, property: string): Promise<string|Segm
|
|||||||
ignoredViewCount: () => dbGetIgnoredViewsForUser(userID),
|
ignoredViewCount: () => dbGetIgnoredViewsForUser(userID),
|
||||||
warnings: () => dbGetWarningsForUser(userID),
|
warnings: () => dbGetWarningsForUser(userID),
|
||||||
warningReason: () => dbGetActiveWarningReasonForUser(userID),
|
warningReason: () => dbGetActiveWarningReasonForUser(userID),
|
||||||
|
deArrowWarningReason: () => dbGetDeArrowWarningReasonForUser(userID),
|
||||||
banned: () => dbGetBanned(userID),
|
banned: () => dbGetBanned(userID),
|
||||||
reputation: () => getReputation(userID),
|
reputation: () => getReputation(userID),
|
||||||
vip: () => isUserVIP(userID),
|
vip: () => isUserVIP(userID),
|
||||||
@@ -171,7 +182,7 @@ async function getUserInfo(req: Request, res: Response): Promise<Response> {
|
|||||||
"viewCount", "ignoredViewCount", "warnings", "warningReason", "reputation",
|
"viewCount", "ignoredViewCount", "warnings", "warningReason", "reputation",
|
||||||
"vip", "lastSegmentID"];
|
"vip", "lastSegmentID"];
|
||||||
const allProperties: string[] = [...defaultProperties, "banned", "permissions", "freeChaptersAccess",
|
const allProperties: string[] = [...defaultProperties, "banned", "permissions", "freeChaptersAccess",
|
||||||
"ignoredSegmentCount", "titleSubmissionCount", "thumbnailSubmissionCount"];
|
"ignoredSegmentCount", "titleSubmissionCount", "thumbnailSubmissionCount", "deArrowWarningReason"];
|
||||||
let paramValues: string[] = req.query.values
|
let paramValues: string[] = req.query.values
|
||||||
? JSON.parse(req.query.values as string)
|
? JSON.parse(req.query.values as string)
|
||||||
: req.query.value
|
: req.query.value
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ async function checkUserActiveWarning(userID: HashedUserID): Promise<CheckResult
|
|||||||
const warnings = (await db.prepare("all",
|
const warnings = (await db.prepare("all",
|
||||||
`SELECT "reason"
|
`SELECT "reason"
|
||||||
FROM warnings
|
FROM warnings
|
||||||
WHERE "userID" = ? AND "issueTime" > ? AND enabled = 1
|
WHERE "userID" = ? AND "issueTime" > ? AND enabled = 1 AND type = 0
|
||||||
ORDER BY "issueTime" DESC`,
|
ORDER BY "issueTime" DESC`,
|
||||||
[
|
[
|
||||||
userID,
|
userID,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { getHashCache } from "../utils/getHashCache";
|
|||||||
import { HashedUserID, UserID } from "../types/user.model";
|
import { HashedUserID, UserID } from "../types/user.model";
|
||||||
import { config } from "../config";
|
import { config } from "../config";
|
||||||
import { generateWarningDiscord, warningData, dispatchEvent } from "../utils/webhookUtils";
|
import { generateWarningDiscord, warningData, dispatchEvent } from "../utils/webhookUtils";
|
||||||
|
import { WarningType } from "../types/warning.model";
|
||||||
|
|
||||||
type warningEntry = {
|
type warningEntry = {
|
||||||
userID: HashedUserID,
|
userID: HashedUserID,
|
||||||
@@ -32,6 +33,7 @@ export async function postWarning(req: Request, res: Response): Promise<Response
|
|||||||
const issueTime = new Date().getTime();
|
const issueTime = new Date().getTime();
|
||||||
const enabled: boolean = req.body.enabled ?? true;
|
const enabled: boolean = req.body.enabled ?? true;
|
||||||
const reason: string = req.body.reason ?? "";
|
const reason: string = req.body.reason ?? "";
|
||||||
|
const type: WarningType = req.body.type ?? WarningType.SponsorBlock;
|
||||||
|
|
||||||
if ((!issuerUserID && enabled) || (issuerUserID && !await isUserVIP(issuerUserID))) {
|
if ((!issuerUserID && enabled) || (issuerUserID && !await isUserVIP(issuerUserID))) {
|
||||||
Logger.warn(`Permission violation: User ${issuerUserID} attempted to warn user ${userID}.`);
|
Logger.warn(`Permission violation: User ${issuerUserID} attempted to warn user ${userID}.`);
|
||||||
@@ -46,8 +48,8 @@ export async function postWarning(req: Request, res: Response): Promise<Response
|
|||||||
if (!previousWarning) {
|
if (!previousWarning) {
|
||||||
await db.prepare(
|
await db.prepare(
|
||||||
"run",
|
"run",
|
||||||
'INSERT INTO "warnings" ("userID", "issueTime", "issuerUserID", "enabled", "reason") VALUES (?, ?, ?, 1, ?)',
|
'INSERT INTO "warnings" ("userID", "issueTime", "issuerUserID", "enabled", "reason", "type") VALUES (?, ?, ?, 1, ?, ?)',
|
||||||
[userID, issueTime, issuerUserID, reason]
|
[userID, issueTime, issuerUserID, reason, type]
|
||||||
);
|
);
|
||||||
resultStatus = "issued to";
|
resultStatus = "issued to";
|
||||||
// check if warning is still within issue time and warning is not enabled
|
// check if warning is still within issue time and warning is not enabled
|
||||||
@@ -61,7 +63,7 @@ export async function postWarning(req: Request, res: Response): Promise<Response
|
|||||||
return res.sendStatus(409);
|
return res.sendStatus(409);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await db.prepare("run", 'UPDATE "warnings" SET "enabled" = 0 WHERE "userID" = ?', [userID]);
|
await db.prepare("run", 'UPDATE "warnings" SET "enabled" = 0 WHERE "userID" = ? AND "type" = ?', [userID, type]);
|
||||||
resultStatus = "removed from";
|
resultStatus = "removed from";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -366,7 +366,7 @@ export async function vote(ip: IPAddress, UUID: SegmentUUID, paramUserID: UserID
|
|||||||
|
|
||||||
const MILLISECONDS_IN_HOUR = 3600000;
|
const MILLISECONDS_IN_HOUR = 3600000;
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const warnings = (await db.prepare("all", `SELECT "reason" FROM warnings WHERE "userID" = ? AND "issueTime" > ? AND enabled = 1`,
|
const warnings = (await db.prepare("all", `SELECT "reason" FROM warnings WHERE "userID" = ? AND "issueTime" > ? AND enabled = 1 AND type = 0`,
|
||||||
[nonAnonUserID, Math.floor(now - (config.hoursAfterWarningExpires * MILLISECONDS_IN_HOUR))],
|
[nonAnonUserID, Math.floor(now - (config.hoursAfterWarningExpires * MILLISECONDS_IN_HOUR))],
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|||||||
4
src/types/warning.model.ts
Normal file
4
src/types/warning.model.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export enum WarningType {
|
||||||
|
SponsorBlock = 0,
|
||||||
|
DeArrow = 1
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@ import { client } from "../utils/httpClient";
|
|||||||
describe("postWarning", () => {
|
describe("postWarning", () => {
|
||||||
// constants
|
// constants
|
||||||
const endpoint = "/api/warnUser";
|
const endpoint = "/api/warnUser";
|
||||||
const getWarning = (userID: string) => db.prepare("get", `SELECT "userID", "issueTime", "issuerUserID", enabled, "reason" FROM warnings WHERE "userID" = ?`, [userID]);
|
const getWarning = (userID: string, type = 0) => db.prepare("get", `SELECT "userID", "issueTime", "issuerUserID", enabled, "reason" FROM warnings WHERE "userID" = ? AND "type" = ?`, [userID, type]);
|
||||||
|
|
||||||
const warneduserID = "warning-0";
|
const warneduserID = "warning-0";
|
||||||
const warnedUserPublicID = getHash(warneduserID);
|
const warnedUserPublicID = getHash(warneduserID);
|
||||||
|
|||||||
Reference in New Issue
Block a user