diff options
Diffstat (limited to 'src/accounthandler.cpp')
-rw-r--r-- | src/accounthandler.cpp | 141 |
1 files changed, 71 insertions, 70 deletions
diff --git a/src/accounthandler.cpp b/src/accounthandler.cpp index 389bed13..d1f9263a 100644 --- a/src/accounthandler.cpp +++ b/src/accounthandler.cpp @@ -44,8 +44,9 @@ using tmwserv::Storage; * correct subroutines. Account handler takes care of determining the * current step in the account process, be it creation, setup, or login. */ -void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) +void AccountHandler::receiveMessage(NetComputer &comp, MessageIn &message) { + ClientComputer &computer = static_cast< ClientComputer & >(comp); Storage &store = Storage::instance("tmw"); @@ -67,26 +68,26 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) std::string clientVersion = message.readString(); std::string username = message.readString(); std::string password = message.readString(); - LOG_INFO(username << " is trying to login.", 1) + LOG_INFO(username << " is trying to login.", 1); result.writeShort(SMSG_LOGIN_RESPONSE); if (clientVersion < config.getValue("clientVersion", "0.0.0")) { - LOG_INFO("Client has an unsufficient version number to login.", 1) + LOG_INFO("Client has an unsufficient version number to login.", 1); result.writeByte(LOGIN_INVALID_VERSION); break; } if (stringFilter->findDoubleQuotes(username)) { result.writeByte(LOGIN_INVALID_USERNAME); - LOG_INFO(username << ": has got double quotes in it.", 1) + LOG_INFO(username << ": has got double quotes in it.", 1); break; } if (computer.getAccount().get() != NULL) { LOG_INFO("Already logged in as " << computer.getAccount()->getName() - << ".", 1) - LOG_INFO("Please logout first.", 1) + << ".", 1); + LOG_INFO("Please logout first.", 1); result.writeByte(LOGIN_ALREADY_LOGGED); break; } @@ -94,7 +95,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { // Too much clients logged in. LOG_INFO("Client couldn't login. Already has " << MAX_CLIENTS - << " logged in.", 1) + << " logged in.", 1); result.writeByte(LOGIN_SERVER_FULL); break; } @@ -104,16 +105,16 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (!acc.get()) { // account doesn't exist -- send error to client - LOG_INFO(username << ": Account does not exist.", 1) + LOG_INFO(username << ": Account does not exist.", 1); result.writeByte(LOGIN_INVALID_USERNAME); } else if (acc->getPassword() != password) { // bad password -- send error to client - LOG_INFO("Bad password for " << username, 1) + LOG_INFO("Bad password for " << username, 1); result.writeByte(LOGIN_INVALID_PASSWORD); } else { - LOG_INFO("Login OK by " << username, 1) + LOG_INFO("Login OK by " << username, 1); // Associate account with connection computer.setAccount(acc); @@ -124,7 +125,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) tmwserv::Beings &chars = computer.getAccount()->getCharacters(); result.writeByte(chars.size()); - LOG_INFO(username << "'s account has " << chars.size() << " character(s).", 1) + LOG_INFO(username << "'s account has " << chars.size() << " character(s).", 1); std::string charNames = ""; for (unsigned int i = 0; i < chars.size(); i++) { @@ -133,7 +134,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) charNames += chars[i]->getName(); } charNames += "."; - LOG_INFO(charNames.c_str(), 1) + LOG_INFO(charNames.c_str(), 1); } } break; @@ -144,7 +145,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if ( computer.getAccount().get() == NULL ) { - LOG_INFO("Can't logout. Not even logged in.", 1) + LOG_INFO("Can't logout. Not even logged in.", 1); result.writeByte(LOGOUT_UNSUCCESSFULL); } else @@ -152,14 +153,14 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) std::string username = computer.getAccount()->getName(); if ( username == "" ) { - LOG_INFO("Account without name ? Logged out anyway...", 1) + LOG_INFO("Account without name ? Logged out anyway...", 1); // computer.unsetCharacter(); Done by unsetAccount(); computer.unsetAccount(); result.writeByte(LOGOUT_UNSUCCESSFULL); } else { - LOG_INFO(computer.getAccount()->getName() << " logs out.", 1) + LOG_INFO(computer.getAccount()->getName() << " logs out.", 1); // computer.unsetCharacter(); Done by unsetAccount(); computer.unsetAccount(); result.writeByte(LOGOUT_OK); @@ -178,7 +179,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (clientVersion < config.getValue("clientVersion", "0.0.0")) { - LOG_INFO("Client has an unsufficient version number to login.", 1) + LOG_INFO("Client has an unsufficient version number to login.", 1); result.writeByte(REGISTER_INVALID_VERSION); break; } @@ -187,52 +188,52 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (!stringFilter->filterContent(username)) { result.writeByte(REGISTER_INVALID_USERNAME); - LOG_INFO(username << ": has got bad words in it.", 1) + LOG_INFO(username << ": has got bad words in it.", 1); break; } // Checking if there are double quotes in it. if (stringFilter->findDoubleQuotes(username)) { result.writeByte(REGISTER_INVALID_USERNAME); - LOG_INFO(username << ": has got double quotes in it.", 1) + LOG_INFO(username << ": has got double quotes in it.", 1); break; } // Checking conditions for having a good account. - LOG_INFO(username << " is trying to register.", 1) + LOG_INFO(username << " is trying to register.", 1); // see if the account exists tmwserv::AccountPtr accPtr = store.getAccount(username); if ( accPtr.get() ) // Account already exists. { result.writeByte(REGISTER_EXISTS_USERNAME); - LOG_INFO(username << ": Username already exists.", 1) + LOG_INFO(username << ": Username already exists.", 1); } else if ((username.length() < MIN_LOGIN_LENGTH) || (username.length() > MAX_LOGIN_LENGTH)) // Username length { result.writeByte(REGISTER_INVALID_USERNAME); - LOG_INFO(username << ": Username too short or too long.", 1) + LOG_INFO(username << ": Username too short or too long.", 1); } else if ((password.length() < MIN_PASSWORD_LENGTH) || (password.length() > MAX_PASSWORD_LENGTH)) { result.writeByte(REGISTER_INVALID_PASSWORD); - LOG_INFO(email << ": Password too short or too long.", 1) + LOG_INFO(email << ": Password too short or too long.", 1); } else if (!stringFilter->isEmailValid(email)) { result.writeByte(REGISTER_INVALID_EMAIL); - LOG_INFO(email << ": Email Invalid, only a@b.c format is accepted.", 1) + LOG_INFO(email << ": Email Invalid, only a@b.c format is accepted.", 1); } else if (stringFilter->findDoubleQuotes(email)) { result.writeByte(REGISTER_INVALID_EMAIL); - LOG_INFO(email << ": has got double quotes in it.", 1) + LOG_INFO(email << ": has got double quotes in it.", 1); break; } else if (store.getSameEmailNumber(email) > 0) // Search if Email already exists. { result.writeByte(REGISTER_EXISTS_EMAIL); - LOG_INFO(email << ": Email already exists.", 1) + LOG_INFO(email << ": Email already exists.", 1); } else { @@ -242,7 +243,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeByte(REGISTER_OK); store.flush(); // flush changes - LOG_INFO(username << ": Account registered.", 1) + LOG_INFO(username << ": Account registered.", 1); } } break; @@ -251,14 +252,14 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { std::string username = message.readString(); std::string password = message.readString(); - LOG_INFO(username << " wants to be deleted from our accounts.", 1) + LOG_INFO(username << " wants to be deleted from our accounts.", 1); result.writeShort(SMSG_UNREGISTER_RESPONSE); if (stringFilter->findDoubleQuotes(username)) { result.writeByte(UNREGISTER_INVALID_USERNAME); - LOG_INFO(username << ": has got double quotes in it.", 1) + LOG_INFO(username << ": has got double quotes in it.", 1); break; } @@ -267,12 +268,12 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (!accPtr.get()) { // account doesn't exist -- send error to client - LOG_INFO(username << ": Account doesn't exist anyway.", 1) + LOG_INFO(username << ": Account doesn't exist anyway.", 1); result.writeByte(UNREGISTER_INVALID_USERNAME); } else if (accPtr->getPassword() != password) { // bad password -- send error to client - LOG_INFO("Won't delete it : Bad password for " << username << ".", 1) + LOG_INFO("Won't delete it : Bad password for " << username << ".", 1); result.writeByte(UNREGISTER_INVALID_PASSWORD); } else { @@ -288,7 +289,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) } } // delete account and associated characters - LOG_INFO("Farewell " << username << " ...", 1) + LOG_INFO("Farewell " << username << " ...", 1); store.delAccount(username); store.flush(); result.writeByte(UNREGISTER_OK); @@ -302,7 +303,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(EMAILCHG_NOLOGIN); - LOG_INFO("Not logged in. Can't change your Account's Email.", 1) + LOG_INFO("Not logged in. Can't change your Account's Email.", 1); break; } @@ -311,24 +312,24 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { result.writeByte(EMAILCHG_INVALID); LOG_INFO(email << ": Invalid format, cannot change Email for " << - computer.getAccount()->getName(), 1) + computer.getAccount()->getName(), 1); } else if (stringFilter->findDoubleQuotes(email)) { result.writeByte(EMAILCHG_INVALID); - LOG_INFO(email << ": has got double quotes in it.", 1) + LOG_INFO(email << ": has got double quotes in it.", 1); } else if (store.getSameEmailNumber(email) > 1) // Search if Email already exists, { // Except for the one already that is to result.writeByte(EMAILCHG_EXISTS_EMAIL); // be changed. - LOG_INFO(email << ": New Email already exists.", 1) + LOG_INFO(email << ": New Email already exists.", 1); } else { computer.getAccount()->setEmail(email); result.writeByte(EMAILCHG_OK); LOG_INFO(computer.getAccount()->getName() << ": Email changed to: " << - email, 1) + email, 1); } } break; @@ -338,7 +339,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeShort(SMSG_EMAIL_GET_RESPONSE); if (computer.getAccount().get() == NULL) { result.writeByte(EMAILGET_NOLOGIN); - LOG_INFO("Not logged in. Can't get your Account's current Email.", 1) + LOG_INFO("Not logged in. Can't get your Account's current Email.", 1); break; } else @@ -356,7 +357,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(PASSCHG_NOLOGIN); - LOG_INFO("Not logged in. Can't change your Account's Password.", 1) + LOG_INFO("Not logged in. Can't change your Account's Password.", 1); break; } std::string oldPassword = message.readString(); @@ -367,31 +368,31 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { result.writeByte(PASSCHG_INVALID); LOG_INFO(computer.getAccount()->getName() << - ": New password too long or too short.", 1) + ": New password too long or too short.", 1); } else if (stringFilter->findDoubleQuotes(password1)) { result.writeByte(PASSCHG_INVALID); - LOG_INFO(password1 << ": has got double quotes in it.", 1) + LOG_INFO(password1 << ": has got double quotes in it.", 1); } else if ( password1 != password2 ) { result.writeByte(PASSCHG_MISMATCH); LOG_INFO(computer.getAccount()->getName() << - ": New password mismatched confirmation password.", 1) + ": New password mismatched confirmation password.", 1); } else if ( oldPassword != computer.getAccount()->getPassword() ) { result.writeByte(PASSCHG_MISMATCH); LOG_INFO(computer.getAccount()->getName() << - ": Old password is wrong.", 1) + ": Old password is wrong.", 1); } else { computer.getAccount()->setPassword(password1); result.writeByte(PASSCHG_OK); LOG_INFO(computer.getAccount()->getName() << - ": The password was changed.", 1) + ": The password was changed.", 1); } } break; @@ -402,7 +403,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(CREATE_NOLOGIN); - LOG_INFO("Not logged in. Can't create a Character.", 1) + LOG_INFO("Not logged in. Can't create a Character.", 1); break; } @@ -412,7 +413,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { result.writeByte(CREATE_TOO_MUCH_CHARACTERS); LOG_INFO("Already has " << MAX_OF_CHARACTERS - << " characters. Can't create another Character.", 1) + << " characters. Can't create another Character.", 1); break; } @@ -421,35 +422,35 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (!stringFilter->filterContent(name)) { result.writeByte(CREATE_INVALID_NAME); - LOG_INFO(name << ": Character has got bad words in it.", 1) + LOG_INFO(name << ": Character has got bad words in it.", 1); break; } // Checking if the Name has got double quotes. if (stringFilter->findDoubleQuotes(name)) { result.writeByte(CREATE_INVALID_NAME); - LOG_INFO(name << ": has got double quotes in it.", 1) + LOG_INFO(name << ": has got double quotes in it.", 1); break; } // Check if the character's name already exists if (store.doesCharacterNameExists(name)) { result.writeByte(CREATE_EXISTS_NAME); - LOG_INFO(name << ": Character's name already exists.", 1) + LOG_INFO(name << ": Character's name already exists.", 1); break; } // Check for character's name length if ((name.length() < MIN_CHARACTER_LENGTH) || (name.length() > MAX_CHARACTER_LENGTH)) { result.writeByte(CREATE_INVALID_NAME); - LOG_INFO(name << ": Character's name too short or too long.", 1) + LOG_INFO(name << ": Character's name too short or too long.", 1); break; } char hairStyle = message.readByte(); if ((hairStyle < 0) || (hairStyle > (signed)MAX_HAIRSTYLE_VALUE)) { result.writeByte(CREATE_INVALID_HAIRSTYLE); - LOG_INFO(name << ": Character's hair Style is invalid.", 1) + LOG_INFO(name << ": Character's hair Style is invalid.", 1); break; } @@ -457,14 +458,14 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if ((hairColor < 0) || (hairColor > (signed)MAX_HAIRCOLOR_VALUE)) { result.writeByte(CREATE_INVALID_HAIRCOLOR); - LOG_INFO(name << ": Character's hair Color is invalid.", 1) + LOG_INFO(name << ": Character's hair Color is invalid.", 1); break; } Genders gender = (Genders)message.readByte(); if ((gender < 0) || (gender > (signed)MAX_GENDER_VALUE)) { result.writeByte(CREATE_INVALID_GENDER); - LOG_INFO(name << ": Character's gender is invalid.", 1) + LOG_INFO(name << ": Character's gender is invalid.", 1); break; } // LATER_ON: Add race, face and maybe special attributes. @@ -522,25 +523,25 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if ( totalStats > POINTS_TO_DISTRIBUTES_AT_LVL1 ) { result.writeByte(CREATE_RAW_STATS_TOO_HIGH); - LOG_INFO(name << ": Character's stats are too high to be of level 1.", 1) + LOG_INFO(name << ": Character's stats are too high to be of level 1.", 1); break; } if ( totalStats < POINTS_TO_DISTRIBUTES_AT_LVL1 ) { result.writeByte(CREATE_RAW_STATS_TOO_LOW); - LOG_INFO(name << ": Character's stats are too low to be of level 1.", 1) + LOG_INFO(name << ": Character's stats are too low to be of level 1.", 1); break; } if ( (highestStat - lowestStat) > (signed)MAX_DIFF_BETWEEN_STATS ) { result.writeByte(CREATE_RAW_STATS_INVALID_DIFF); - LOG_INFO(name << ": Character's stats difference is too high to be accepted.", 1) + LOG_INFO(name << ": Character's stats difference is too high to be accepted.", 1); break; } if ( !validNonZeroRawStats ) { result.writeByte(CREATE_RAW_STATS_EQUAL_TO_ZERO); - LOG_INFO(name << ": One stat is equal to zero.", 1) + LOG_INFO(name << ": One stat is equal to zero.", 1); break; } @@ -555,7 +556,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) computer.getAccount()->addCharacter(newCharacter); LOG_INFO("Character " << name << " was created for " - << computer.getAccount()->getName() << "'s account.", 1) + << computer.getAccount()->getName() << "'s account.", 1); store.flush(); // flush changes result.writeByte(CREATE_OK); @@ -569,7 +570,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(SELECT_NOLOGIN); - LOG_INFO("Not logged in. Can't select a Character.", 1) + LOG_INFO("Not logged in. Can't select a Character.", 1); break; // not logged in } @@ -579,14 +580,14 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (chars.size() == 0 ) { result.writeByte(SELECT_NO_CHARACTERS); - LOG_INFO("Character Selection : Yet no characters created.", 1) + LOG_INFO("Character Selection : Yet no characters created.", 1); break; } // Character ID = 0 to Number of Characters - 1. if (charNum >= chars.size()) { // invalid char selection result.writeByte(SELECT_INVALID); - LOG_INFO("Character Selection : Selection out of ID range.", 1) + LOG_INFO("Character Selection : Selection out of ID range.", 1); break; } @@ -614,7 +615,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(DELETE_NOLOGIN); - LOG_INFO("Not logged in. Can't delete a Character.", 1) + LOG_INFO("Not logged in. Can't delete a Character.", 1); break; // not logged in } @@ -625,14 +626,14 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) { result.writeByte(DELETE_NO_MORE_CHARACTERS); LOG_INFO("Character Deletion : No characters in " << computer.getAccount()->getName() - << "'s account.", 1) + << "'s account.", 1); break; } // Character ID = 0 to Number of Characters - 1. if (charNum >= chars.size()) { // invalid char selection result.writeByte(DELETE_INVALID_ID); - LOG_INFO("Character Deletion : Selection out of ID range.", 1) + LOG_INFO("Character Deletion : Selection out of ID range.", 1); break; } @@ -650,7 +651,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) std::string deletedCharacter = chars[charNum].get()->getName(); computer.getAccount()->delCharacter(deletedCharacter); store.flush(); - LOG_INFO(deletedCharacter << ": Character deleted...", 1) + LOG_INFO(deletedCharacter << ": Character deleted...", 1); result.writeByte(DELETE_OK); } @@ -663,7 +664,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) if (computer.getAccount().get() == NULL) { result.writeByte(CHAR_LIST_NOLOGIN); - LOG_INFO("Not logged in. Can't list characters.", 1) + LOG_INFO("Not logged in. Can't list characters.", 1); break; // not logged in } @@ -673,7 +674,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeByte(chars.size()); LOG_INFO(computer.getAccount()->getName() << "'s account has " - << chars.size() << " character(s).", 1) + << chars.size() << " character(s).", 1); std::string charStats = ""; std::string mapName = ""; for (unsigned int i = 0; i < chars.size(); i++) @@ -699,12 +700,12 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) result.writeShort(chars[i]->getY()); } charStats += "."; - LOG_INFO(charStats.c_str(), 1) + LOG_INFO(charStats.c_str(), 1); } break; default: - LOG_WARN("Invalid message type", 0) + LOG_WARN("Invalid message type", 0); result.writeShort(SMSG_LOGIN_RESPONSE); result.writeByte(LOGIN_UNKNOWN); break; @@ -727,7 +728,7 @@ void AccountHandler::receiveMessage(NetComputer &computer, MessageIn &message) * requested char, ERROR on early termination of the * routine. */ -int AccountHandler::loginMessage(NetComputer &computer, MessageIn &message) +int AccountHandler::loginMessage(ClientComputer &computer, MessageIn &message) { // Get the handle (account) the player is requesting // RETURN TMW_ACCOUNTERROR_NOEXIST if: requested does not handle exist @@ -756,7 +757,7 @@ int AccountHandler::loginMessage(NetComputer &computer, MessageIn &message) * routine. */ int -AccountHandler::assignAccount(NetComputer &computer, tmwserv::Account *account) +AccountHandler::assignAccount(ClientComputer &computer, tmwserv::Account *account) { // RETURN TMW_ACCOUNTERROR_ASSIGNFAILED if: the account was accessed before // being initalized. |