From 81b293a5a68122ffb41fa42ec03a20bcdc8cb9dc Mon Sep 17 00:00:00 2001 From: slawkens Date: Wed, 20 Jan 2021 18:02:07 +0100 Subject: [PATCH] Fixes to character name validation Admin should be able to create any name Also fixes to config.character_name_min_length being ignored --- system/libs/CreateCharacter.php | 9 ++++++++- system/libs/validator.php | 16 ++++++---------- system/pages/account/create_character.php | 4 ++++ tools/validate.php | 17 ++++++++++++++--- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/system/libs/CreateCharacter.php b/system/libs/CreateCharacter.php index 8a57d604..f2e7687e 100644 --- a/system/libs/CreateCharacter.php +++ b/system/libs/CreateCharacter.php @@ -35,6 +35,13 @@ class CreateCharacter } } + $player = new OTS_Player(); + $player->find($name); + if($player->isLoaded()) { + $errors['name'] = 'Character with this name already exist.'; + return false; + } + if(empty($sex) && $sex != "0") $errors['sex'] = 'Please select the sex for your character!'; @@ -214,4 +221,4 @@ class CreateCharacter $account->logAction('Created character ' . $name . '.'); return true; } -} \ No newline at end of file +} diff --git a/system/libs/validator.php b/system/libs/validator.php index 421d5fe6..484f1854 100644 --- a/system/libs/validator.php +++ b/system/libs/validator.php @@ -180,14 +180,17 @@ class Validator return false; } + $minLength = config('character_name_min_length'); + $maxLength = config('character_name_max_length'); + $length = strlen($name); - if($length < 3) + if($length < $minLength) { self::$lastError = 'Character name is too short. Min. length 3 characters.'; return false; } - if($length > 25) + if($length > $maxLength) { self::$lastError = 'Character name is too long. Max. length 25 characters.'; return false; @@ -201,7 +204,7 @@ class Validator if(preg_match('/ {2,}/', $name)) { - self::$lastError = 'Invalid character name format. Use only A-Z and numbers 0-9 and no double spaces.'; + self::$lastError = 'Invalid character name format. Use only A-Z and no double spaces.'; return false; } @@ -289,13 +292,6 @@ class Validator } } - $player = new OTS_Player(); - $player->find($name); - if($player->isLoaded()) { - self::$lastError = 'Character with this name already exist.'; - return false; - } - //check if was namelocked previously if($db->hasTable('player_namelocks') && $db->hasColumn('player_namelocks', 'name')) { $namelock = $db->query('SELECT `player_id` FROM `player_namelocks` WHERE `name` = ' . $db->quote($name)); diff --git a/system/pages/account/create_character.php b/system/pages/account/create_character.php index f3a82568..c25b8ea6 100644 --- a/system/pages/account/create_character.php +++ b/system/pages/account/create_character.php @@ -15,6 +15,10 @@ $character_sex = isset($_POST['sex']) ? (int)$_POST['sex'] : null; $character_vocation = isset($_POST['vocation']) ? (int)$_POST['vocation'] : null; $character_town = isset($_POST['town']) ? (int)$_POST['town'] : null; +if (!admin() && !empty($character_name)) { + $character_name = ucwords(strtolower($character_name)); +} + $character_created = false; $save = isset($_POST['save']) && $_POST['save'] == 1; $errors = array(); diff --git a/tools/validate.php b/tools/validate.php index 48536c72..b805778e 100644 --- a/tools/validate.php +++ b/tools/validate.php @@ -13,6 +13,7 @@ require '../common.php'; require SYSTEM . 'functions.php'; require SYSTEM . 'init.php'; +require SYSTEM . 'login.php'; $error = ''; if(isset($_GET['account'])) @@ -54,14 +55,24 @@ else if(isset($_GET['email'])) } else if(isset($_GET['name'])) { - $name = strtolower(stripslashes($_GET['name'])); + $name = $_GET['name']; + if(!admin()) { + $name = strtolower(stripslashes($name)); + } + if(!Validator::characterName($name)) error_(Validator::getLastError()); - if(!Validator::newCharacterName($name)) + if(!admin() && !Validator::newCharacterName($name)) error_(Validator::getLastError()); - success_('Good. Your name will be:
' . ucwords($name) . ''); + $player = new OTS_Player(); + $player->find($name); + if($player->isLoaded()) { + error_('Character with this name already exist.'); + } + + success_('Good. Your name will be:
' . (admin() ? $name : ucwords($name)) . ''); } else if(isset($_GET['password']) && isset($_GET['password2'])) { $password = $_GET['password'];