mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-06 19:47:00 +03:00
Parse user agent header
This commit is contained in:
@@ -18,6 +18,7 @@ import { getReputation } from "../utils/reputation";
|
||||
import { APIVideoData, APIVideoInfo } from "../types/youtubeApi.model";
|
||||
import { UserID } from "../types/user.model";
|
||||
import { isUserVIP } from "../utils/isUserVIP";
|
||||
import { parseUserAgent } from "../utils/userAgent";
|
||||
|
||||
type CheckResult = {
|
||||
pass: boolean,
|
||||
@@ -550,8 +551,7 @@ function preprocessInput(req: Request) {
|
||||
}
|
||||
});
|
||||
|
||||
const userAgentAsArray = req.get("user-agent");
|
||||
const userAgent = userAgentAsArray || "";
|
||||
const userAgent = req.get("user-agent") ?? parseUserAgent(req.get("User-Agent")) ?? "";
|
||||
|
||||
return {videoID, userID, service, videoDuration, videoDurationParam, segments, userAgent};
|
||||
}
|
||||
|
||||
13
src/utils/userAgent.ts
Normal file
13
src/utils/userAgent.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
export function parseUserAgent(userAgent: string): string {
|
||||
const ua = userAgent.toLowerCase();
|
||||
|
||||
if (ua.includes("com.google.android.youtube/") || ua.includes("com.vanced.android.youtube/")) {
|
||||
return `Vanced/${ua.match(/.android.youtube\/([^\s]+)/)[1]}`;
|
||||
}
|
||||
|
||||
if (ua.includes("mpv_sponsorblock/")) {
|
||||
return ua;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
@@ -867,7 +867,7 @@ describe("postSkipSegments", () => {
|
||||
const row = await db.prepare("get", `SELECT "startTime", "endTime", "locked", "category", "userAgent" FROM "sponsorTimes" WHERE "videoID" = ?`, ["userAgent-1"]);
|
||||
assert.strictEqual(row.startTime, 0);
|
||||
assert.strictEqual(row.endTime, 10);
|
||||
assert.strictEqual(row.userAgent, "MeaBot");
|
||||
assert.strictEqual(row.userAgent, "MeaBot/5.0");
|
||||
done();
|
||||
})
|
||||
.catch(err => done(err));
|
||||
|
||||
20
test/cases/userAgentTest.ts
Normal file
20
test/cases/userAgentTest.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import assert from "assert";
|
||||
import { parseUserAgent } from "../../src/utils/userAgent";
|
||||
|
||||
describe("userAgent", () => {
|
||||
it ("Works for Vanced package", () => {
|
||||
assert.strictEqual("Vanced/1521081792", parseUserAgent("com.vanced.android.youtube/1521081792 (Linux; U; Android 10)"));
|
||||
});
|
||||
|
||||
it ("Works for Android package (root)", () => {
|
||||
assert.strictEqual("Vanced/1521081792", parseUserAgent("com.google.android.youtube/1521081792 (Linux; U; Android 10)"));
|
||||
});
|
||||
|
||||
it ("Works MPV", () => {
|
||||
assert.strictEqual("mpv_sponsorblock/1.0 (https://github.com/po5/mpv_sponsorblock)", parseUserAgent("mpv_sponsorblock/1.0 (https://github.com/po5/mpv_sponsorblock)"));
|
||||
});
|
||||
|
||||
it ("Blank for anything else", () => {
|
||||
assert.strictEqual("", parseUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user