diff --git a/backend/package-lock.json b/backend/package-lock.json index 196042e6c..f5deaebe5 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10219,6 +10219,8 @@ }, "node_modules/ua-parser-js": { "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "funding": [ { "type": "opencollective", @@ -10229,7 +10231,6 @@ "url": "https://paypal.me/faisalman" } ], - "license": "MIT", "engines": { "node": "*" } @@ -17944,7 +17945,9 @@ "peer": true }, "ua-parser-js": { - "version": "0.7.28" + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" }, "uc.micro": { "version": "1.0.6", diff --git a/backend/src/anticheat/index.ts b/backend/src/anticheat/index.ts index 9b10df14e..4e3063dbf 100644 --- a/backend/src/anticheat/index.ts +++ b/backend/src/anticheat/index.ts @@ -2,7 +2,11 @@ export function implemented(): boolean { return false; } -export function validateResult(_result: object, _version: string): boolean { +export function validateResult( + _result: object, + _version: string, + _uaStringifiedObject: string +): boolean { return true; } diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index a35851667..918cea756 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -39,6 +39,7 @@ import { buildMonkeyMail } from "../../utils/monkey-mail"; import FunboxesMetadata from "../../constants/funbox"; import _ from "lodash"; import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard"; +import { UAParser } from "ua-parser-js"; try { if (anticheatImplemented() === false) throw new Error("undefined"); @@ -197,7 +198,13 @@ export async function addResult( } if (anticheatImplemented()) { - if (!validateResult(result, req.headers["client-version"] as string)) { + if ( + !validateResult( + result, + req.headers["client-version"] as string, + JSON.stringify(new UAParser(req.headers["user-agent"]).getResult()) + ) + ) { const status = MonkeyStatusCodes.RESULT_DATA_INVALID; throw new MonkeyError(status.code, "Result data doesn't make sense"); }