mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2024-11-10 01:02:30 +01:00
Store user-agent in postSkipSegment
This commit is contained in:
parent
2057b0cfa6
commit
ce193b60f7
5 changed files with 102 additions and 5 deletions
|
@ -43,6 +43,7 @@
|
||||||
| reputation | REAL | not null, default '0' |
|
| reputation | REAL | not null, default '0' |
|
||||||
| shadowHidden | INTEGER | not null |
|
| shadowHidden | INTEGER | not null |
|
||||||
| hashedVideoID | TEXT | not null, default '', sha256 |
|
| hashedVideoID | TEXT | not null, default '', sha256 |
|
||||||
|
| userAgent | TEXT | not null, default '' |
|
||||||
|
|
||||||
| index | field |
|
| index | field |
|
||||||
| -- | :--: |
|
| -- | :--: |
|
||||||
|
@ -164,6 +165,7 @@
|
||||||
| reputation | REAL | not null, default '0' |
|
| reputation | REAL | not null, default '0' |
|
||||||
| shadowHidden | INTEGER | not null |
|
| shadowHidden | INTEGER | not null |
|
||||||
| hashedVideoID | TEXT | not null, default '', sha256 |
|
| hashedVideoID | TEXT | not null, default '', sha256 |
|
||||||
|
| userAgent | TEXT | not null, default '' |
|
||||||
|
|
||||||
# Private
|
# Private
|
||||||
|
|
||||||
|
|
10
databases/_upgrade_sponsorTimes_22.sql
Normal file
10
databases/_upgrade_sponsorTimes_22.sql
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
/* Add hash field */
|
||||||
|
ALTER TABLE "sponsorTimes" ADD "userAgent" TEXT NOT NULL default '';
|
||||||
|
|
||||||
|
ALTER TABLE "archivedSponsorTimes" ADD "userAgent" TEXT NOT NULL default '';
|
||||||
|
|
||||||
|
UPDATE "config" SET value = 22 WHERE key = 'version';
|
||||||
|
|
||||||
|
COMMIT;
|
|
@ -550,7 +550,10 @@ function preprocessInput(req: Request) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return {videoID, userID, service, videoDuration, videoDurationParam, segments};
|
const userAgentAsArray = req.get("user-agent")?.split("/");
|
||||||
|
const userAgent = userAgentAsArray[0] || "";
|
||||||
|
|
||||||
|
return {videoID, userID, service, videoDuration, videoDurationParam, segments, userAgent};
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function postSkipSegments(req: Request, res: Response): Promise<Response> {
|
export async function postSkipSegments(req: Request, res: Response): Promise<Response> {
|
||||||
|
@ -559,7 +562,7 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line prefer-const
|
// eslint-disable-next-line prefer-const
|
||||||
let {videoID, userID, service, videoDuration, videoDurationParam, segments} = preprocessInput(req);
|
let {videoID, userID, service, videoDuration, videoDurationParam, segments, userAgent} = preprocessInput(req);
|
||||||
|
|
||||||
const invalidCheckResult = checkInvalidFields(videoID, userID, segments);
|
const invalidCheckResult = checkInvalidFields(videoID, userID, segments);
|
||||||
if (!invalidCheckResult.pass) {
|
if (!invalidCheckResult.pass) {
|
||||||
|
@ -636,9 +639,9 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
|
||||||
const startingLocked = isVIP ? 1 : 0;
|
const startingLocked = isVIP ? 1 : 0;
|
||||||
try {
|
try {
|
||||||
await db.prepare("run", `INSERT INTO "sponsorTimes"
|
await db.prepare("run", `INSERT INTO "sponsorTimes"
|
||||||
("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "reputation", "shadowHidden", "hashedVideoID")
|
("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "reputation", "shadowHidden", "hashedVideoID", "userAgent")
|
||||||
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
||||||
videoID, segmentInfo.segment[0], segmentInfo.segment[1], startingVotes, startingLocked, UUID, userID, timeSubmitted, 0, segmentInfo.category, segmentInfo.actionType, service, videoDuration, reputation, shadowBanned, hashedVideoID,
|
videoID, segmentInfo.segment[0], segmentInfo.segment[1], startingVotes, startingLocked, UUID, userID, timeSubmitted, 0, segmentInfo.category, segmentInfo.actionType, service, videoDuration, reputation, shadowBanned, hashedVideoID, userAgent
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ export interface DBSegment {
|
||||||
reputation: number;
|
reputation: number;
|
||||||
hashedVideoID: VideoIDHash;
|
hashedVideoID: VideoIDHash;
|
||||||
timeSubmitted: number;
|
timeSubmitted: number;
|
||||||
|
userAgent: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OverlappingSegmentGroup {
|
export interface OverlappingSegmentGroup {
|
||||||
|
|
|
@ -845,4 +845,85 @@ describe("postSkipSegments", () => {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}).timeout(5000);
|
}).timeout(5000);
|
||||||
|
|
||||||
|
it("Should be able to submit with custom user-agent 1", (done: Done) => {
|
||||||
|
fetch(`${getbaseURL()}/api/postVideoSponsorTimes`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"User-Agent": "MeaBot/5.0"
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
userID: "testtesttesttesttesttesttesttesttest",
|
||||||
|
videoID: "userAgent-1",
|
||||||
|
segments: [{
|
||||||
|
segment: [0, 10],
|
||||||
|
category: "sponsor",
|
||||||
|
}],
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then(async res => {
|
||||||
|
assert.strictEqual(res.status, 200);
|
||||||
|
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");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Should be able to submit with custom user-agent 2", (done: Done) => {
|
||||||
|
fetch(`${getbaseURL()}/api/postVideoSponsorTimes`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"User-Agent": "MeaBot"
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
userID: "testtesttesttesttesttesttesttesttest",
|
||||||
|
videoID: "userAgent-2",
|
||||||
|
segments: [{
|
||||||
|
segment: [0, 10],
|
||||||
|
category: "sponsor",
|
||||||
|
}],
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then(async res => {
|
||||||
|
assert.strictEqual(res.status, 200);
|
||||||
|
const row = await db.prepare("get", `SELECT "startTime", "endTime", "locked", "category", "userAgent" FROM "sponsorTimes" WHERE "videoID" = ?`, ["userAgent-2"]);
|
||||||
|
assert.strictEqual(row.startTime, 0);
|
||||||
|
assert.strictEqual(row.endTime, 10);
|
||||||
|
assert.strictEqual(row.userAgent, "MeaBot");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
|
||||||
|
it("Should be able to submit with empty user-agent", (done: Done) => {
|
||||||
|
fetch(`${getbaseURL()}/api/postVideoSponsorTimes`, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"User-Agent": ""
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
userID: "testtesttesttesttesttesttesttesttest",
|
||||||
|
videoID: "userAgent-3",
|
||||||
|
segments: [{
|
||||||
|
segment: [0, 10],
|
||||||
|
category: "sponsor",
|
||||||
|
}],
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then(async res => {
|
||||||
|
assert.strictEqual(res.status, 200);
|
||||||
|
const row = await db.prepare("get", `SELECT "startTime", "endTime", "locked", "category", "userAgent" FROM "sponsorTimes" WHERE "videoID" = ?`, ["userAgent-3"]);
|
||||||
|
assert.strictEqual(row.startTime, 0);
|
||||||
|
assert.strictEqual(row.endTime, 10);
|
||||||
|
assert.strictEqual(row.userAgent, "");
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue