moved anticheat to its own private repository

This commit is contained in:
Miodec 2022-01-07 15:31:18 +01:00
parent f5778a457a
commit 274f06b461
3 changed files with 25 additions and 72 deletions

2
.gitignore vendored
View file

@ -94,3 +94,5 @@ backend/.env
static/adtest.html
backend/migrationStats.txt
backend/anticheat

View file

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

View file

@ -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,