Store user-agent in postSkipSegment

This commit is contained in:
Haidang666 2021-07-30 13:44:37 +07:00
parent 2057b0cfa6
commit ce193b60f7
5 changed files with 102 additions and 5 deletions

View file

@ -43,6 +43,7 @@
| reputation | REAL | not null, default '0' |
| shadowHidden | INTEGER | not null |
| hashedVideoID | TEXT | not null, default '', sha256 |
| userAgent | TEXT | not null, default '' |
| index | field |
| -- | :--: |
@ -164,6 +165,7 @@
| reputation | REAL | not null, default '0' |
| shadowHidden | INTEGER | not null |
| hashedVideoID | TEXT | not null, default '', sha256 |
| userAgent | TEXT | not null, default '' |
# Private

View 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;

View file

@ -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> {
@ -559,7 +562,7 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
}
// 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);
if (!invalidCheckResult.pass) {
@ -636,9 +639,9 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
const startingLocked = isVIP ? 1 : 0;
try {
await db.prepare("run", `INSERT INTO "sponsorTimes"
("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "reputation", "shadowHidden", "hashedVideoID")
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
videoID, segmentInfo.segment[0], segmentInfo.segment[1], startingVotes, startingLocked, UUID, userID, timeSubmitted, 0, segmentInfo.category, segmentInfo.actionType, service, videoDuration, reputation, shadowBanned, hashedVideoID,
("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "reputation", "shadowHidden", "hashedVideoID", "userAgent")
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
videoID, segmentInfo.segment[0], segmentInfo.segment[1], startingVotes, startingLocked, UUID, userID, timeSubmitted, 0, segmentInfo.category, segmentInfo.actionType, service, videoDuration, reputation, shadowBanned, hashedVideoID, userAgent
],
);

View file

@ -61,6 +61,7 @@ export interface DBSegment {
reputation: number;
hashedVideoID: VideoIDHash;
timeSubmitted: number;
userAgent: string;
}
export interface OverlappingSegmentGroup {

View file

@ -845,4 +845,85 @@ describe("postSkipSegments", () => {
return e;
}
}).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));
});
});