mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-07 03:57:06 +03:00
Add another validity filter
This commit is contained in:
@@ -71,6 +71,7 @@ addDefaults(config, {
|
|||||||
},
|
},
|
||||||
validityCheck: {
|
validityCheck: {
|
||||||
userAgent: null,
|
userAgent: null,
|
||||||
|
userAgentR: null,
|
||||||
},
|
},
|
||||||
userCounterURL: null,
|
userCounterURL: null,
|
||||||
userCounterRatio: 10,
|
userCounterRatio: 10,
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export async function postBranding(req: Request, res: Response) {
|
|||||||
const hashedIP = await getHashCache(getIP(req) + config.globalSalt as IPAddress);
|
const hashedIP = await getHashCache(getIP(req) + config.globalSalt as IPAddress);
|
||||||
const isBanned = await checkBanStatus(hashedUserID, hashedIP);
|
const isBanned = await checkBanStatus(hashedUserID, hashedIP);
|
||||||
|
|
||||||
if (!validSubmittedData(userAgent)) {
|
if (!validSubmittedData(userAgent, req.headers["user-agent"])) {
|
||||||
Logger.warn(`Rejecting submission based on invalid data: ${hashedUserID} ${videoID} ${videoDuration} ${userAgent} ${req.headers["user-agent"]}`);
|
Logger.warn(`Rejecting submission based on invalid data: ${hashedUserID} ${videoID} ${videoDuration} ${userAgent} ${req.headers["user-agent"]}`);
|
||||||
res.status(200).send("OK");
|
res.status(200).send("OK");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
|
|||||||
}
|
}
|
||||||
const userID: HashedUserID = await getHashCache(paramUserID);
|
const userID: HashedUserID = await getHashCache(paramUserID);
|
||||||
|
|
||||||
if (!validSubmittedData(userAgent)) {
|
if (!validSubmittedData(userAgent, req.headers["user-agent"])) {
|
||||||
Logger.warn(`Rejecting submission based on invalid data: ${userID} ${videoID} ${videoDurationParam} ${userAgent} ${req.headers["user-agent"]}`);
|
Logger.warn(`Rejecting submission based on invalid data: ${userID} ${videoID} ${videoDurationParam} ${userAgent} ${req.headers["user-agent"]}`);
|
||||||
return res.status(200).send("OK");
|
return res.status(200).send("OK");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ export interface SBSConfig {
|
|||||||
};
|
};
|
||||||
validityCheck: {
|
validityCheck: {
|
||||||
userAgent: string | null;
|
userAgent: string | null;
|
||||||
|
userAgentR: string | null;
|
||||||
}
|
}
|
||||||
minimumPrefix?: string;
|
minimumPrefix?: string;
|
||||||
maximumPrefix?: string;
|
maximumPrefix?: string;
|
||||||
|
|||||||
@@ -108,12 +108,32 @@ export async function canSubmit(userID: HashedUserID, category: Category): Promi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function validSubmittedData(userAgent: string): boolean {
|
export function validSubmittedData(userAgent: string, userAgentR: string): boolean {
|
||||||
if (!config.validityCheck.userAgent) {
|
if (!config.validityCheck.userAgent) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !new RegExp(config.validityCheck.userAgent).test(userAgent);
|
for (const key of Object.keys(config.validityCheck)) {
|
||||||
|
const check = (config.validityCheck as Record<string, string | null>)[key];
|
||||||
|
if (check === null) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
switch (key) {
|
||||||
|
case "userAgent":
|
||||||
|
if (!userAgent.match(check)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "userAgentR":
|
||||||
|
if (!userAgentR.match(new RegExp(check))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function canSubmitGlobal(userID: HashedUserID): Promise<CanSubmitGlobalResult> {
|
export async function canSubmitGlobal(userID: HashedUserID): Promise<CanSubmitGlobalResult> {
|
||||||
|
|||||||
Reference in New Issue
Block a user