00001 /* 00002 * The Mana World 00003 * Copyright (C) 2004 The Mana World Development Team 00004 * 00005 * This file is part of The Mana World. 00006 * 00007 * This program is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2 of the License, or 00010 * any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 */ 00021 00022 #include "accountserver.h" 00023 00024 #include "internal.h" 00025 00026 #include "net/tmwserv/connection.h" 00027 #include "net/tmwserv/protocol.h" 00028 00029 #include "net/messageout.h" 00030 00031 #include "utils/sha256.h" 00032 00033 #include <string> 00034 00035 void Net::AccountServer::login(Net::Connection *connection, int version, 00036 const std::string &username, const std::string &password) 00037 { 00038 Net::AccountServer::connection = connection; 00039 00040 MessageOut msg(PAMSG_LOGIN); 00041 00042 msg.writeInt32(version); 00043 msg.writeString(username); 00044 msg.writeString(sha256(username + password)); 00045 00046 Net::AccountServer::connection->send(msg); 00047 } 00048 00049 void Net::AccountServer::registerAccount(Net::Connection *connection, 00050 int version, const std::string &username, const std::string &password, 00051 const std::string &email) 00052 { 00053 Net::AccountServer::connection = connection; 00054 00055 MessageOut msg(PAMSG_REGISTER); 00056 00057 msg.writeInt32(version); // client version 00058 msg.writeString(username); 00059 // When registering, the password and email hash is assumed by server. 00060 // Hence, data can be validated safely server-side. 00061 // This is the only time we send a clear password. 00062 msg.writeString(password); 00063 msg.writeString(email); 00064 00065 Net::AccountServer::connection->send(msg); 00066 } 00067 00068 void Net::AccountServer::logout() 00069 { 00070 MessageOut msg(PAMSG_LOGOUT); 00071 Net::AccountServer::connection->send(msg); 00072 } 00073 00074 void Net::AccountServer::reconnectAccount(Net::Connection *connection, 00075 const std::string &passToken) 00076 { 00077 Net::AccountServer::connection = connection; 00078 00079 MessageOut msg(PAMSG_RECONNECT); 00080 msg.writeString(passToken, 32); 00081 Net::AccountServer::connection->send(msg); 00082 }