mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-02-04 04:51:16 +08:00
logging validation errors and anticheat events
This commit is contained in:
parent
efcc2cd3a8
commit
8d53fe9521
2 changed files with 44 additions and 9 deletions
|
@ -47,6 +47,7 @@ class ResultController {
|
|||
const { uid } = req.decodedToken;
|
||||
const { result } = req.body;
|
||||
result.testDuration = parseFloat(result.testDuration);
|
||||
result.uid = uid;
|
||||
if (validateObjectValues(result) > 0)
|
||||
return res.status(400).json({ message: "Bad input" });
|
||||
if (
|
||||
|
@ -159,6 +160,19 @@ class ResultController {
|
|||
(result.wpm > 200 && result.consistency < 70)
|
||||
) {
|
||||
//possible bot
|
||||
Logger.log(
|
||||
"anticheat_triggered",
|
||||
{
|
||||
durationSD: result.keyDurationStats.sd,
|
||||
durationAvg: result.keyDurationStats.average,
|
||||
spacingSD: result.keySpacingStats.sd,
|
||||
spacingAvg: result.keySpacingStats.average,
|
||||
wpm: result.wpm,
|
||||
acc: result.acc,
|
||||
consistency: result.consistency,
|
||||
},
|
||||
uid
|
||||
);
|
||||
return res.status(400).json({ message: "Possible bot detected" });
|
||||
}
|
||||
if (
|
||||
|
@ -170,6 +184,19 @@ class ResultController {
|
|||
result.keyDurationStats.average <= 20)
|
||||
) {
|
||||
//close to the bot detection threshold
|
||||
Logger.log(
|
||||
"anticheat_close",
|
||||
{
|
||||
durationSD: result.keyDurationStats.sd,
|
||||
durationAvg: result.keyDurationStats.average,
|
||||
spacingSD: result.keySpacingStats.sd,
|
||||
spacingAvg: result.keySpacingStats.average,
|
||||
wpm: result.wpm,
|
||||
acc: result.acc,
|
||||
consistency: result.consistency,
|
||||
},
|
||||
uid
|
||||
);
|
||||
}
|
||||
} else {
|
||||
return res.status(400).json({ message: "Missing key data" });
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const MonkeyError = require("./error");
|
||||
|
||||
const Logger = require("../../handlers/logger");
|
||||
const { roundTo2 } = require("./misc");
|
||||
|
||||
function isUsernameValid(name) {
|
||||
|
@ -13,8 +13,10 @@ function isUsernameValid(name) {
|
|||
|
||||
function validateResult(result) {
|
||||
if (result.wpm > result.rawWpm) {
|
||||
console.error(
|
||||
`Could not validate result for ${result.uid}. ${result.wpm} > ${result.rawWpm}`
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`${result.wpm} wpm > ${result.rawWpm} raw`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
@ -23,8 +25,10 @@ function validateResult(result) {
|
|||
wpm < result.wpm - result.wpm * 0.01 ||
|
||||
wpm > result.wpm + result.wpm * 0.01
|
||||
) {
|
||||
console.error(
|
||||
`Could not validate result for ${result.uid}. wpm ${wpm} != ${result.wpm}`
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`wpm ${wpm} != ${result.wpm}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
@ -37,8 +41,10 @@ function validateResult(result) {
|
|||
keyPressTimeSum < result.testDuration - 1 ||
|
||||
keyPressTimeSum > result.testDuration + 1
|
||||
) {
|
||||
console.error(
|
||||
`Could not validate key spacing sum for ${result.uid}. ${keyPressTimeSum} !~ ${result.testDuration}`
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`key spacing sum ${keyPressTimeSum} !~ ${result.testDuration}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
@ -47,8 +53,10 @@ function validateResult(result) {
|
|||
result.testDuration < result.mode2 - 1 ||
|
||||
result.testDuration > result.mode2 + 1
|
||||
) {
|
||||
console.error(
|
||||
`Could not validate test duration for ${result.uid}. ${result.testDuration} !~ ${result.mode2}`
|
||||
Logger.log(
|
||||
"result_validation_error",
|
||||
`test duration ${result.testDuration} !~ ${result.mode2}`,
|
||||
result.uid
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue