diff --git a/src/routes/postSkipSegments.ts b/src/routes/postSkipSegments.ts index 0b34f6f1..df3427c9 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 | null { + 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({