From eaaa6246ea179ccb801b841bb441b11bc14951a5 Mon Sep 17 00:00:00 2001 From: zkldi Date: Fri, 21 May 2021 17:03:42 +0100 Subject: [PATCH] reject scores with invalid mods --- server/src/constants/usc-ir.ts | 6 +++++ .../file/eamusement-iidx-csv copy/parser.ts | 22 ---------------- .../import-types/ir/usc/converter.ts | 26 ++++++++++++++++++- server/src/test-utils/test-data/usc/base.json | 15 ++++++++--- 4 files changed, 42 insertions(+), 27 deletions(-) delete mode 100644 server/src/score-import/import-types/file/eamusement-iidx-csv copy/parser.ts diff --git a/server/src/constants/usc-ir.ts b/server/src/constants/usc-ir.ts index 8021e9403..334d1cf08 100644 --- a/server/src/constants/usc-ir.ts +++ b/server/src/constants/usc-ir.ts @@ -2,3 +2,9 @@ export const USCIR_ADJACENT_SCORE_N = 3; export const USCIR_MAX_LEADERBOARD_N = 10; + +export const USC_DEFAULT_PERFECT = 46; +export const USC_DEFAULT_NEAR = 150; +export const USC_DEFAULT_HOLD = 150; +export const USC_DEFAULT_MISS = 300; +export const USC_DEFAULT_SLAM = 84; diff --git a/server/src/score-import/import-types/file/eamusement-iidx-csv copy/parser.ts b/server/src/score-import/import-types/file/eamusement-iidx-csv copy/parser.ts deleted file mode 100644 index 552aaf2e1..000000000 --- a/server/src/score-import/import-types/file/eamusement-iidx-csv copy/parser.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { KtLogger } from "../../../../types"; -import GenericParseEamIIDXCSV from "../../common/eamusement-iidx-csv/parser"; -import { - IIDXEamusementCSVContext, - IIDXEamusementCSVData, -} from "../../common/eamusement-iidx-csv/types"; -import { ParserFunctionReturnsSync } from "../../common/types"; - -/** - * Parses a buffer of EamusementCSV data. - * @param fileData - The buffer to parse. - * @param body - The request body that made this file import request. Used to infer playtype. - */ -function ParseEamusementIIDXCSV( - fileData: Express.Multer.File, - body: Record, - logger: KtLogger -): ParserFunctionReturnsSync { - return GenericParseEamIIDXCSV(fileData, body, "e-amusement", logger); -} - -export default ParseEamusementIIDXCSV; diff --git a/server/src/score-import/import-types/ir/usc/converter.ts b/server/src/score-import/import-types/ir/usc/converter.ts index f2fae5bad..0679273b9 100644 --- a/server/src/score-import/import-types/ir/usc/converter.ts +++ b/server/src/score-import/import-types/ir/usc/converter.ts @@ -1,13 +1,20 @@ import { USCClientScore } from "../../../../api/ir/usc/common"; import { FindSongOnID } from "../../../../common/database-lookup/song"; import { KtLogger } from "../../../../types"; -import { InternalFailure } from "../../../framework/common/converter-failures"; +import { InternalFailure, InvalidScoreFailure } from "../../../framework/common/converter-failures"; import { GenericGetGradeAndPercent } from "../../../framework/common/score-utils"; import { IRUSCContext } from "./types"; import { Lamps } from "kamaitachi-common"; import uuid from "uuid"; import { ConverterFunction } from "../../common/types"; import { DryScore } from "../../../framework/common/types"; +import { + USC_DEFAULT_HOLD, + USC_DEFAULT_MISS, + USC_DEFAULT_NEAR, + USC_DEFAULT_PERFECT, + USC_DEFAULT_SLAM, +} from "../../../../constants/usc-ir"; function DeriveNoteMod(data: USCClientScore): "NORMAL" | "MIRROR" | "RANDOM" | "MIR-RAN" { if (data.options.mirror && data.options.random) { @@ -42,6 +49,23 @@ export const ConverterIRUSC: ConverterFunction = a importType, logger ) => { + if ( + data.windows.perfect !== USC_DEFAULT_PERFECT || + data.windows.good !== USC_DEFAULT_NEAR || + data.windows.hold !== USC_DEFAULT_HOLD || + data.windows.miss !== USC_DEFAULT_MISS || + data.windows.slam !== USC_DEFAULT_SLAM + ) { + logger.verbose(`Ignored score because hitWindows were modified.`); + throw new InvalidScoreFailure(`HitWindows have been modified - Score is invalid.`); + } + + // if any auto-like option is enabled, reject score. + if (data.options.autoFlags !== 0) { + logger.verbose(`Ignored score because autoplay was enabled.`); + throw new InvalidScoreFailure(`Autoplay was enabled - Score is invalid.`); + } + const song = await FindSongOnID("usc", context.chart.songID); if (!song) { diff --git a/server/src/test-utils/test-data/usc/base.json b/server/src/test-utils/test-data/usc/base.json index 95afc4243..26ca934d5 100644 --- a/server/src/test-utils/test-data/usc/base.json +++ b/server/src/test-utils/test-data/usc/base.json @@ -16,11 +16,18 @@ "score": 3157894, "gauge": 0.20073963701725006, "timestamp": 1607229633, + "options": { + "gaugeType": 0, + "mirror": false, + "random": false, + "autoFlags": 0 + }, "windows": { - "good": 92, - "hold": 138, - "miss": 250, - "perfect": 46 + "good": 150, + "hold": 150, + "miss": 300, + "perfect": 46, + "slam": 84 } } } \ No newline at end of file