diff --git a/src/routes/postBranding.ts b/src/routes/postBranding.ts index fe7f8b4..1b482b2 100644 --- a/src/routes/postBranding.ts +++ b/src/routes/postBranding.ts @@ -18,7 +18,7 @@ import { checkBanStatus } from "../utils/checkBan"; import axios from "axios"; import { getMaxResThumbnail } from "../utils/youtubeApi"; import { getVideoDetails } from "../utils/getVideoDetails"; -import { canSubmitGlobal } from "../utils/permissions"; +import { canSubmitDeArrow } from "../utils/permissions"; enum BrandingType { Title, @@ -56,7 +56,7 @@ export async function postBranding(req: Request, res: Response) { const hashedIP = await getHashCache(getIP(req) + config.globalSalt as IPAddress); const isBanned = await checkBanStatus(hashedUserID, hashedIP); - const permission = await canSubmitGlobal(hashedUserID); + const permission = await canSubmitDeArrow(hashedUserID); if (!permission.canSubmit) { res.status(403).send(permission.reason); return; diff --git a/src/routes/postCasual.ts b/src/routes/postCasual.ts index 8429185..fae7471 100644 --- a/src/routes/postCasual.ts +++ b/src/routes/postCasual.ts @@ -13,7 +13,7 @@ import crypto from "crypto"; import { QueryCacher } from "../utils/queryCacher"; import { acquireLock } from "../utils/redisLock"; import { checkBanStatus } from "../utils/checkBan"; -import { canSubmitGlobal } from "../utils/permissions"; +import { canSubmitDeArrow } from "../utils/permissions"; interface ExistingVote { UUID: BrandingUUID; @@ -42,7 +42,7 @@ export async function postCasual(req: Request, res: Response) { const hashedIP = await getHashCache(getIP(req) + config.globalSalt as IPAddress); const isBanned = await checkBanStatus(hashedUserID, hashedIP); - const permission = await canSubmitGlobal(hashedUserID); + const permission = await canSubmitDeArrow(hashedUserID); if (!permission.canSubmit) { res.status(403).send(permission.reason); return; diff --git a/src/routes/voteOnSponsorTime.ts b/src/routes/voteOnSponsorTime.ts index 55c108b..1eb7c9a 100644 --- a/src/routes/voteOnSponsorTime.ts +++ b/src/routes/voteOnSponsorTime.ts @@ -17,7 +17,7 @@ import { getVideoDetails, videoDetails } from "../utils/getVideoDetails"; import { deleteLockCategories } from "./deleteLockCategories"; import { acquireLock } from "../utils/redisLock"; import { checkBanStatus } from "../utils/checkBan"; -import { canSubmitGlobal } from "../utils/permissions"; +import { canVote } from "../utils/permissions"; const voteTypes = { normal: 0, @@ -343,7 +343,7 @@ export async function vote(ip: IPAddress, UUID: SegmentUUID, paramUserID: UserID const nonAnonUserID = await getHashCache(paramUserID); const userID = await getHashCache(paramUserID + UUID); - const permission = await canSubmitGlobal(nonAnonUserID); + const permission = await canVote(nonAnonUserID); if (!permission.canSubmit) { return { status: 403, diff --git a/src/utils/permissions.ts b/src/utils/permissions.ts index fe3a188..fcb4860 100644 --- a/src/utils/permissions.ts +++ b/src/utils/permissions.ts @@ -26,6 +26,13 @@ async function oldSubmitter(userID: HashedUserID): Promise { return result.submissionCount > 1; } +async function oldDeArrowSubmitter(userID: HashedUserID): Promise { + const result = await db.prepare("get", `SELECT count(*) as "submissionCount" FROM "titles" WHERE "userID" = ? AND "timeSubmitted" < 1743827196000` + , [userID], { useReplica: true }); + + return result.submissionCount > 1; +} + export async function canSubmit(userID: HashedUserID, category: Category): Promise { switch (category) { case "chapter": @@ -42,16 +49,25 @@ export async function canSubmit(userID: HashedUserID, category: Category): Promi canSubmit: await oneOf([isUserVIP(userID), oldSubmitter(userID) ]), - reason: "We are currently experiencing a mass spam attack" + reason: "We are currently experiencing a mass spam attack, we are restricting submissions for now" }; } } -export async function canSubmitGlobal(userID: HashedUserID): Promise { +export async function canVote(userID: HashedUserID): Promise { return { canSubmit: await oneOf([isUserVIP(userID), oldSubmitter(userID) ]), - reason: "We are currently experiencing a mass spam attack" + reason: "We are currently experiencing a mass spam attack, we are restricting submissions for now" + }; +} + +export async function canSubmitDeArrow(userID: HashedUserID): Promise { + return { + canSubmit: await oneOf([isUserVIP(userID), + oldDeArrowSubmitter(userID) + ]), + reason: "We are currently experiencing a mass spam attack, we are restricting submissions for now" }; } \ No newline at end of file