mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-25 16:28:04 +08:00
moved anticheat to its own private repository
This commit is contained in:
parent
f5778a457a
commit
274f06b461
3 changed files with 25 additions and 72 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -94,3 +94,5 @@ backend/.env
|
|||
|
||||
static/adtest.html
|
||||
backend/migrationStats.txt
|
||||
|
||||
backend/anticheat
|
||||
|
|
@ -2,14 +2,21 @@ const ResultDAO = require("../../dao/result");
|
|||
const UserDAO = require("../../dao/user");
|
||||
const PublicStatsDAO = require("../../dao/public-stats");
|
||||
const BotDAO = require("../../dao/bot");
|
||||
const {
|
||||
validateObjectValues,
|
||||
validateResult,
|
||||
} = require("../../handlers/validation");
|
||||
const { validateObjectValues } = require("../../handlers/validation");
|
||||
const { stdDev, roundTo2 } = require("../../handlers/misc");
|
||||
const objecthash = require("object-hash");
|
||||
const Logger = require("../../handlers/logger");
|
||||
|
||||
let validateResult;
|
||||
try {
|
||||
validateResult = require("../../anticheat/anticheat").validateResult;
|
||||
if (!validateResult) throw new Error("validateResult is not defined");
|
||||
} catch (e) {
|
||||
console.error("==============================");
|
||||
console.error("No anticheat module found, results will not be validated!");
|
||||
console.error("==============================");
|
||||
}
|
||||
|
||||
class ResultController {
|
||||
static async getResults(req, res, next) {
|
||||
try {
|
||||
|
|
@ -89,10 +96,18 @@ class ResultController {
|
|||
) {
|
||||
return res.status(400).json({ message: "Test too short" });
|
||||
}
|
||||
if (!validateResult(result)) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ message: "Result data doesn't make sense" });
|
||||
if (validateResult) {
|
||||
if (!validateResult(result)) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ message: "Result data doesn't make sense" });
|
||||
}
|
||||
} else {
|
||||
console.error("==============================");
|
||||
console.error(
|
||||
"No anticheat module found, results will not be validated!"
|
||||
);
|
||||
console.error("==============================");
|
||||
}
|
||||
|
||||
let resulthash = result.hash;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
const MonkeyError = require("./error");
|
||||
const Logger = require("../handlers/logger");
|
||||
const { roundTo2 } = require("./misc");
|
||||
|
||||
function isUsernameValid(name) {
|
||||
if (name === null || name === undefined || name === "") return false;
|
||||
|
|
@ -17,67 +15,6 @@ function isUsernameValid(name) {
|
|||
return /^[0-9a-zA-Z_.-]+$/.test(name);
|
||||
}
|
||||
|
||||
function validateResult(result) {
|
||||
if (result.wpm > result.rawWpm) {
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`${result.wpm} wpm > ${result.rawWpm} raw`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
let wpm = roundTo2((result.charStats[0] * (60 / result.testDuration)) / 5);
|
||||
if (
|
||||
isNaN(wpm) ||
|
||||
wpm < result.wpm - result.wpm * 0.01 ||
|
||||
wpm > result.wpm + result.wpm * 0.01
|
||||
) {
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`wpm ${wpm} != ${result.wpm}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
if (result.mode === "time" && (result.mode2 === 15 || result.mode2 === 60)) {
|
||||
let keyPressTimeSum =
|
||||
result.keySpacing.reduce((total, val) => {
|
||||
return total + val;
|
||||
}) / 1000;
|
||||
if (
|
||||
keyPressTimeSum < result.testDuration - 1 ||
|
||||
keyPressTimeSum > result.testDuration + 1
|
||||
) {
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`key spacing sum ${keyPressTimeSum} !~ ${result.testDuration}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
result.testDuration < result.mode2 - 1 ||
|
||||
result.testDuration > result.mode2 + 1
|
||||
) {
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`test duration ${result.testDuration} !~ ${result.mode2}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.chartData.raw !== undefined) {
|
||||
if (result.chartData.raw.filter((w) => w > 350).length > 0) return false;
|
||||
}
|
||||
|
||||
if (result.wpm > 100 && result.consistency < 10) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function isTagPresetNameValid(name) {
|
||||
if (name === null || name === undefined || name === "") return false;
|
||||
if (name.length > 16) return false;
|
||||
|
|
@ -153,7 +90,6 @@ function validateObjectValues(val) {
|
|||
|
||||
module.exports = {
|
||||
isUsernameValid,
|
||||
validateResult,
|
||||
isTagPresetNameValid,
|
||||
validateConfig,
|
||||
validateObjectValues,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue