Skip to content

Commit

Permalink
Reenabled nickserv functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
loonycyborg committed May 5, 2016
1 parent 157a0f9 commit 87f4a00
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 119 deletions.
235 changes: 116 additions & 119 deletions src/server/server.cpp
Expand Up @@ -1097,6 +1097,9 @@ void server::handle_read_from_player(socket_ptr socket, boost::shared_ptr<simple
if(simple_wml::node* query = doc->child("query")) {
handle_query(socket, *query);
}
if(simple_wml::node* nickserv = doc->child("nickserv")) {
handle_nickserv(socket, *nickserv);
}

if(!player_is_in_game(socket))
handle_player_in_lobby(socket, doc);
Expand Down Expand Up @@ -1219,6 +1222,119 @@ void server::handle_query(socket_ptr socket, simple_wml::node& query)
send_server_message(socket, response.str());
}

void server::handle_nickserv(socket_ptr socket, simple_wml::node& nickserv)
{
// Check if this server allows nick registration at all
if(!user_handler_) {
send_server_message(socket, "This server does not allow username registration.");
return;
}

if(nickserv.child("register")) {
try {
(user_handler_->add_user(player_connections_.find(socket)->name(), (*nickserv.child("register"))["mail"].to_string(),
(*nickserv.child("register"))["password"].to_string()));

std::stringstream msg;
msg << "Your username has been registered." <<
// Warn that providing an email address might be a good idea
((*nickserv.child("register"))["mail"].empty() ?
" It is recommended that you provide an email address for password recovery." : "");
send_server_message(socket, msg.str());

// Mark the player as registered and send the other clients
// an update to dislpay this change
player_connections_.find(socket)->info().mark_registered();

simple_wml::document diff;
make_change_diff(games_and_users_list_.root(), NULL,
"user", player_connections_.find(socket)->info().config_address(), diff);
send_to_lobby(diff);

} catch (user_handler::error& e) {
send_server_message(socket, "There was an error registering your username. The error message was: "
+ e.message);
}
return;
}

// A user requested to update his password or mail
if(nickserv.child("set")) {
if(!(user_handler_->user_exists(player_connections_.find(socket)->name()))) {
send_server_message(socket, "You are not registered. Please register first.");
return;
}

const simple_wml::node& set = *(nickserv.child("set"));

try {
user_handler_->set_user_detail(player_connections_.find(socket)->name(), set["detail"].to_string(), set["value"].to_string());

send_server_message(socket, "Your details have been updated.");

} catch (user_handler::error& e) {
send_server_message(socket, "There was an error updating your details. The error message was: "
+ e.message);
}

return;
}

// A user requested information about another user
if(nickserv.child("details")) {
send_server_message(socket, "Valid details for this server are: " +
user_handler_->get_valid_details());
return;
}

// A user requested a list of which details can be set
if(nickserv.child("info")) {
try {
std::string res = user_handler_->user_info((*nickserv.child("info"))["name"].to_string());
send_server_message(socket, res);
} catch (user_handler::error& e) {
send_server_message(socket, "There was an error looking up the details of the user '" +
(*nickserv.child("info"))["name"].to_string() + "'. " +" The error message was: "
+ e.message);
}
return;
}

// A user requested to delete his nick
if(nickserv.child("drop")) {
if(!(user_handler_->user_exists(player_connections_.find(socket)->name()))) {
send_server_message(socket, "You are not registered.");
return;
}

// With the current policy of dissallowing to log in with a
// registerd username without the password we should never get
// to call this
if(!(player_connections_.find(socket)->info().registered())) {
send_server_message(socket, "You are not logged in.");
return;
}

try {
user_handler_->remove_user(player_connections_.find(socket)->name());
send_server_message(socket, "Your username has been dropped.");

// Mark the player as not registered and send the other clients
// an update to dislpay this change
player_connections_.find(socket)->info().mark_registered(false);

simple_wml::document diff;
make_change_diff(games_and_users_list_.root(), NULL,
"user", player_connections_.find(socket)->info().config_address(), diff);
send_to_lobby(diff);
} catch (user_handler::error& e) {
send_server_message(socket, "There was an error dropping your username. The error message was: "
+ e.message);
}
return;
}
}

void server::handle_message(socket_ptr socket, simple_wml::node& message)
{
simple_wml::document relay_message;
Expand Down Expand Up @@ -2792,125 +2908,6 @@ void server::dul_handler(const std::string& /*issuer_name*/, const std::string&
}
}

/*void server::process_nickserv(const network::connection sock, simple_wml::node& data) {
const wesnothd::player_map::iterator pl = players_.find(sock);
if (pl == players_.end()) {
DBG_SERVER << "ERROR: Could not find player with socket: " << sock << std::endl;
return;
}
// Check if this server allows nick registration at all
if(!user_handler_) {
rooms_.lobby().send_server_message("This server does not allow username registration.", sock);
return;
}
if(data.child("register")) {
try {
(user_handler_->add_user(pl->second.name(), (*data.child("register"))["mail"].to_string(),
(*data.child("register"))["password"].to_string()));
std::stringstream msg;
msg << "Your username has been registered." <<
// Warn that providing an email address might be a good idea
((*data.child("register"))["mail"].empty() ?
" It is recommended that you provide an email address for password recovery." : "");
rooms_.lobby().send_server_message(msg.str(), sock);
// Mark the player as registered and send the other clients
// an update to dislpay this change
pl->second.mark_registered();
simple_wml::document diff;
make_change_diff(games_and_users_list_.root(), NULL,
"user", pl->second.config_address(), diff);
rooms_.lobby().send_data(diff);
} catch (user_handler::error& e) {
rooms_.lobby().send_server_message("There was an error registering your username. The error message was: "
+ e.message, sock);
}
return;
}
// A user requested to update his password or mail
if(data.child("set")) {
if(!(user_handler_->user_exists(pl->second.name()))) {
rooms_.lobby().send_server_message("You are not registered. Please register first.", sock);
return;
}
const simple_wml::node& set = *(data.child("set"));
try {
user_handler_->set_user_detail(pl->second.name(), set["detail"].to_string(), set["value"].to_string());
rooms_.lobby().send_server_message("Your details have been updated.", sock);
} catch (user_handler::error& e) {
rooms_.lobby().send_server_message("There was an error updating your details. The error message was: "
+ e.message, sock);
}
return;
}
// A user requested information about another user
if(data.child("details")) {
rooms_.lobby().send_server_message("Valid details for this server are: " +
user_handler_->get_valid_details(), sock);
return;
}
// A user requested a list of which details can be set
if(data.child("info")) {
try {
std::string res = user_handler_->user_info((*data.child("info"))["name"].to_string());
rooms_.lobby().send_server_message(res, sock);
} catch (user_handler::error& e) {
rooms_.lobby().send_server_message("There was an error looking up the details of the user '" +
(*data.child("info"))["name"].to_string() + "'. " +" The error message was: "
+ e.message, sock);
}
return;
}
// A user requested to delete his nick
if(data.child("drop")) {
if(!(user_handler_->user_exists(pl->second.name()))) {
rooms_.lobby().send_server_message("You are not registered.", sock);
return;
}
// With the current policy of dissallowing to log in with a
// registerd username without the password we should never get
// to call this
if(!(pl->second.registered())) {
rooms_.lobby().send_server_message("You are not logged in.", sock);
return;
}
try {
user_handler_->remove_user(pl->second.name());
rooms_.lobby().send_server_message("Your username has been dropped.", sock);
// Mark the player as not registered and send the other clients
// an update to dislpay this change
pl->second.mark_registered(false);
simple_wml::document diff;
make_change_diff(games_and_users_list_.root(), NULL,
"user", pl->second.config_address(), diff);
rooms_.lobby().send_data(diff);
} catch (user_handler::error& e) {
rooms_.lobby().send_server_message("There was an error dropping your username. The error message was: "
+ e.message, sock);
}
return;
}
}
*/

void server::delete_game(int gameid) {
const boost::shared_ptr<game>& game_ptr = player_connections_.get<game_t>().find(gameid)->get_game();

Expand Down
1 change: 1 addition & 0 deletions src/server/server.hpp
Expand Up @@ -66,6 +66,7 @@ class server
void handle_player_in_game(socket_ptr socket, boost::shared_ptr<simple_wml::document> doc);
void handle_whisper(socket_ptr socket, simple_wml::node& whisper);
void handle_query(socket_ptr socket, simple_wml::node& query);
void handle_nickserv(socket_ptr socket, simple_wml::node& nickserv);
void handle_message(socket_ptr socket, simple_wml::node& message);
void handle_create_game(socket_ptr socket, simple_wml::node& create_game);
void create_game(PlayerRecord& host, simple_wml::node& create_game);
Expand Down

0 comments on commit 87f4a00

Please sign in to comment.