diff --git a/controllers/player.py b/controllers/player.py index e7b1106bf7b65d0b6253df57e749ee799224d082..329b2495b8deefc2aeb7d455276193f201730523 100644 --- a/controllers/player.py +++ b/controllers/player.py @@ -79,6 +79,15 @@ def submit(): new_input = {"submit": parameters["submit"]} if JSON_CONTAINS(parameters, [('inputs', dict)]): + + #Load role definitions for additional validation (e.g. maxlength) + elements = B64_TO_JSON(room_record.roles)[player_record.role]["elements"] + input_definitions = {} + for element in elements: + if element["type"] == "input": + input_definitions[element["name"]] = element + + inputs = parameters["inputs"] for key in inputs: @@ -87,6 +96,9 @@ def submit(): if (not isinstance(inputs[key], str)) or (keytest != key): return(FAIL(CODE_MISSING)) + if input_definitions[key]["length"] and len(inputs[key]) > input_definitions[key]["length"]: + return(FAIL(CODE_MISSING)) + inputs[key] = ''.join(c for c in inputs[key] if (c.isalnum() or c == " ")) new_input["inputs"] = inputs diff --git a/static/game/debug/renderer.js b/static/game/debug/renderer.js index c4c971cce938426a1e790b16624e22bd5c2cd8c2..def0bac34cee64f070ea49ef3bcea5b9cdbbc113 100644 --- a/static/game/debug/renderer.js +++ b/static/game/debug/renderer.js @@ -63,6 +63,7 @@ function renderRole(_definition, _roleIdle) { var c = element["class"]; var name = element["name"]; var value = element["value"]; + var length = element["length"]; if(prompt){ for(var varname in prompt){ @@ -81,6 +82,9 @@ function renderRole(_definition, _roleIdle) { case "input": e = $("<input class='game_input' type='text'/>"); e.attr("placeholder", value); + if(length) { + e.attr("maxlength", length); + } if(!prompt) { e.attr("disabled", "true"); }