aboutsummaryrefslogtreecommitdiff
path: root/server/src/main.cpp
diff options
context:
space:
mode:
authorauth <[email protected]>2020-07-14 16:16:02 +0200
committerauth <[email protected]>2020-07-14 16:16:02 +0200
commit275010eaa0a46012fec547efdd76256b25e47f54 (patch)
tree00d9e0a19424c3e3d81e2ed74d7986da987123d1 /server/src/main.cpp
parentForum integration. (diff)
downloadloader-275010eaa0a46012fec547efdd76256b25e47f54.tar.xz
loader-275010eaa0a46012fec547efdd76256b25e47f54.zip
Client login handling on server.
More error handling for forum responses.
Diffstat (limited to 'server/src/main.cpp')
-rw-r--r--server/src/main.cpp65
1 files changed, 50 insertions, 15 deletions
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 0947b75..d70b4cf 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -50,14 +50,14 @@ int main(int argc, char* argv[]) {
if (!packet) {
io::logger->warn("{} sent invalid packet.", ip);
- // client_server.disconnect_event.call(client);
+ client_server.disconnect_event.call(client);
return;
}
if (packet_session != session) {
io::logger->warn("{} sent wrong session id.", ip);
- // client_server.disconnect_event.call(client);
+ client_server.disconnect_event.call(client);
return;
}
@@ -66,13 +66,14 @@ int main(int argc, char* argv[]) {
if (id == tcp::packet_id::hwid) {
client.hwid = message;
- // client_server.bl().add({ip, message});
-
io::logger->info("got hwid from {} : {}", ip, message);
if (client_server.bl().find(message)) {
io::logger->warn("{} is hwid banned.", ip);
+ client.write(tcp::packet_t(message, tcp::packet_type::write, session,
+ tcp::packet_id::ban));
+
client_server.disconnect_event.call(client);
return;
}
@@ -89,46 +90,80 @@ int main(int argc, char* argv[]) {
auto pass = message.substr(pos + 1);
user_data data{};
- //int ret = client_server.forum().check_login(user, pass, data);
- int ret = forum_response::api_success;
- if (ret == forum_response::api_success) {
+ nlohmann::json json;
- nlohmann::json j;
+ io::logger->info("{} is trying to login from {}.", user, ip);
+ // int ret = forum_response::api_error;
+ int ret = client_server.forum().check_login(user, pass, data);
+ if (ret == forum_response::api_success) {
if (data.banned) {
io::logger->warn("{} is forum banned, dropping...", user);
- j["result"] = tcp::login_result::banned;
+ json["result"] = tcp::client_response::banned;
- client.write(tcp::packet_t(j.dump(), tcp::packet_type::write,
+ client.write(tcp::packet_t(json.dump(), tcp::packet_type::write,
session, tcp::packet_id::login_resp));
client_server.disconnect_event.call(client);
return;
}
+
// new user/no hwid, register the hwid on the forums
if (data.hwid.empty()) {
+ io::logger->info("{} is new, registering hwid...", user);
+ if (!client_server.forum().edit(data.id, "custom_fields[hwid]",
+ client.hwid)) {
+ io::logger->warn("failed to register hwid for {}.", user);
+ }
+
data.hwid = client.hwid;
}
// invalid hwid
if (data.hwid != client.hwid) {
+ io::logger->warn("{}'s hwid doesn't match.");
+ if (!client_server.forum().edit(data.id, "custom_fields[new_hwid]",
+ client.hwid)) {
+ io::logger->warn("failed to write new hwid for {}.", user);
+ }
- j["result"] = tcp::login_result::hwid_mismatch;
+ json["result"] = tcp::client_response::hwid_mismatch;
- client.write(tcp::packet_t(j.dump(), tcp::packet_type::write,
+ client.write(tcp::packet_t(json.dump(), tcp::packet_type::write,
session, tcp::packet_id::login_resp));
client_server.disconnect_event.call(client);
return;
}
- j["result"] = tcp::login_result::banned;
+ json["result"] = tcp::client_response::login_success;
- client.write(tcp::packet_t(j.dump(), tcp::packet_type::write,
- session, tcp::packet_id::login_resp));
+ client.write(tcp::packet_t(json.dump(), tcp::packet_type::write,
+ session, tcp::packet_id::login_resp));
client.state = tcp::client_state::logged_in;
+
+ io::logger->info("{} logged in successfuly.", user);
+ }
+
+ if (ret == forum_response::api_timeout ||
+ ret == forum_response::api_fail) {
+ json["result"] = tcp::client_response::server_error;
+
+ io::logger->info("internal server error on {}'s login request.", user);
+
+ client.write(tcp::packet_t(json.dump(), tcp::packet_type::write,
+ session, tcp::packet_id::login_resp));
+ }
+
+ if (ret == forum_response::api_error) {
+ json["result"] = tcp::client_response::login_fail;
+
+ io::logger->info("{} failed to login.", user);
+
+ client.write(tcp::packet_t(json.dump(), tcp::packet_type::write,
+ session, tcp::packet_id::login_resp));
}
}
}