From a1f50ededfc00e73d8cb98972e40a375bed31202 Mon Sep 17 00:00:00 2001 From: BANO Date: Fri, 7 Mar 2025 21:01:51 +0100 Subject: [PATCH 1/2] Reject unsupported services --- src/routes/postSkipSegments.ts | 7 ++++++- src/utils/getService.ts | 19 +++++++++++++++++++ test/cases/postSkipSegments.ts | 18 ++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/routes/postSkipSegments.ts b/src/routes/postSkipSegments.ts index 0b34f6f1..085cbcd3 100644 --- a/src/routes/postSkipSegments.ts +++ b/src/routes/postSkipSegments.ts @@ -17,7 +17,7 @@ import { HashedUserID, UserID } from "../types/user.model"; import { isUserVIP } from "../utils/isUserVIP"; import { isUserTempVIP } from "../utils/isUserTempVIP"; import { parseUserAgent } from "../utils/userAgent"; -import { getService } from "../utils/getService"; +import { getService, getUnsupportedService } from "../utils/getService"; import axios from "axios"; import { vote } from "./voteOnSponsorTime"; import { canSubmit } from "../utils/permissions"; @@ -500,6 +500,11 @@ export async function postSkipSegments(req: Request, res: Response): Promise(...value: T[]): Service { return Service.YouTube; } + +export function getUnsupportedService(...value: T[]): string | undefined { + const serviceByName = Object.values(Service).reduce((acc, serviceName) => { + acc[serviceName.toLowerCase()] = serviceName; + + return acc; + }, {} as Record); + + let unsupportedValue; + for (const name of value) { + const cleanName = name?.trim().toLowerCase() + if (cleanName in serviceByName) { + return null + } + if(cleanName) unsupportedValue = name + } + + return unsupportedValue +} diff --git a/test/cases/postSkipSegments.ts b/test/cases/postSkipSegments.ts index cf45bcaf..474bc6ad 100644 --- a/test/cases/postSkipSegments.ts +++ b/test/cases/postSkipSegments.ts @@ -351,6 +351,24 @@ describe("postSkipSegments", () => { .catch(err => done(err)); }); + it("Should not be able to submit with unknown service", (done) => { + const videoID = "colon-1"; + postSkipSegmentJSON({ + userID: submitUserOne, + videoID, + service:"Unsupported-xxx", + segments: [{ + segment: ["0", "3"], + category: "sponsor", + }] + }) + .then(res => { + assert.strictEqual(res.status, 400); + done(); + }) + .catch(err => done(err)); + }); + it("Should throw 409 on duplicate submission", (done) => { const videoID = "private-video"; postSkipSegmentParam({ From 7aa5ab53b6b749ae9997d0db52dbc7ddcd213728 Mon Sep 17 00:00:00 2001 From: BANO Date: Fri, 7 Mar 2025 21:16:15 +0100 Subject: [PATCH 2/2] Add semicolons and refactor name --- src/routes/postSkipSegments.ts | 6 +++--- src/utils/getService.ts | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/routes/postSkipSegments.ts b/src/routes/postSkipSegments.ts index 085cbcd3..df3427c9 100644 --- a/src/routes/postSkipSegments.ts +++ b/src/routes/postSkipSegments.ts @@ -500,9 +500,9 @@ export async function postSkipSegments(req: Request, res: Response): Promise(...value: T[]): Service { return Service.YouTube; } -export function getUnsupportedService(...value: T[]): string | undefined { +export function getUnsupportedService(...value: T[]): string | null { const serviceByName = Object.values(Service).reduce((acc, serviceName) => { acc[serviceName.toLowerCase()] = serviceName; @@ -25,12 +25,12 @@ export function getUnsupportedService(...value: T[]): string | let unsupportedValue; for (const name of value) { - const cleanName = name?.trim().toLowerCase() + const cleanName = name?.trim().toLowerCase(); if (cleanName in serviceByName) { - return null + return null; } - if(cleanName) unsupportedValue = name + if (cleanName) unsupportedValue = name; } - return unsupportedValue + return unsupportedValue; }