X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fdata%2FchallengeCheck.js;h=db205ac7b8953cd31bd908d868f160175f39e17e;hp=c533b11d6bebc8342103389566dbcea6b554a64a;hb=4f298adbee00942323fc7ec517117552aeb5a08a;hpb=03608482744c433ad284f4b61e85b2e8cff4f5f3 diff --git a/client/src/data/challengeCheck.js b/client/src/data/challengeCheck.js index c533b11d..db205ac7 100644 --- a/client/src/data/challengeCheck.js +++ b/client/src/data/challengeCheck.js @@ -1,80 +1,29 @@ - - -function timeUnitToSeconds(value, unit) -{ - let seconds = value; - switch (unit) - { - case 'd': - seconds *= 24; - case 'h': - seconds *= 60; - case 'm': - seconds *= 60; - } - return seconds; -} - -function isLargerUnit(unit1, unit2) -{ - return (unit1 == 'd' && unit2 != 'd') - || (unit1 == 'h' && ['s','m'].includes(unit2)) - || (unit1 == 'm' && unit2 == 's'); -} +import { extractTime } from "@/utils/timeControl"; export function checkChallenge(c) { - const vid = parseInt(c.vid); - if (isNaN(vid) || vid <= 0) - return "Please select a variant"; + const vid = parseInt(c.vid); + if (isNaN(vid) || vid <= 0) + return "Please select a variant"; - const tcParts = c.timeControl.replace(/ /g,"").split('+'); - const mainTime = tcParts[0].match(/([0-9]+)([smhd])/); - if (!mainTime) + const tc = extractTime(c.timeControl); + if (!tc) return "Wrong time control"; - const mainTimeValue = parseInt(mainTime[1]); - const mainTimeUnit = mainTime[2]; - if (isNaN(mainTimeValue) || mainTimeValue <= 0) - return "Main time should be strictly positive"; - c.mainTime = timeUnitToSeconds(mainTimeValue, mainTimeUnit); - if (tcParts.length >= 2) + + // Basic alphanumeric check for opponent name + if (!!c.to) { - const increment = tcParts[1].match(/([0-9]+)([smhd])/); - if (!increment) - return "Wrong time control"; - const incrementValue = parseInt(increment[1]); - const incrementUnit = increment[2]; - if (isLargerUnit(incrementUnit, mainTimeUnit)) - return "Increment unit cannot be larger than main unit"; - if (isNaN(incrementValue) || incrementValue < 0) - return "Increment must be positive"; - c.increment = timeUnitToSeconds(incrementValue, incrementUnit); + // NOTE: slightly redundant (see data/userCheck.js) + if (!c.to.match(/^[\w]+$/)) + return "Wrong characters in opponent name"; } - else - c.increment = 0; - - // Basic alphanumeric check for players names - let playerCount = 0; - for (const p of c.to) - { - if (p.name.length > 0) - { - // TODO: slightly redundant (see data/userCheck.js) - if (!p.name.match(/^[\w]+$/)) - return "Wrong characters in players names"; - playerCount++; - } - } - - if (playerCount > 0 && playerCount != c.nbPlayers-1) - return "None, or all of the opponent names must be filled" // Allow custom FEN (and check it) only for individual challenges - if (c.fen.length > 0 && playerCount > 0) + if (c.fen.length > 0 && !!c.to) { if (!V.IsGoodFen(c.fen)) return "Bad FEN string"; } - else //generate a FEN - c.fen = V.GenRandInitFen(); + else + c.fen = ""; }