aboutsummaryrefslogtreecommitdiff
path: root/server/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/main.cpp')
-rw-r--r--server/src/main.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 779b610..0947b75 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -21,6 +21,8 @@ int main(int argc, char* argv[]) {
client.gen_session();
client.write(tcp::packet_t(version, tcp::packet_type::write, client(),
tcp::packet_id::session));
+
+ client.state = tcp::client_state::idle;
});
client_server.disconnect_event.add([&](tcp::client& client) {
@@ -76,6 +78,61 @@ int main(int argc, char* argv[]) {
}
}
+ if (id == tcp::packet_id::login_req) {
+ if (client.state != tcp::client_state::idle) {
+ return;
+ }
+
+ auto pos = message.find(",");
+ if (pos != std::string::npos) {
+ auto user = message.substr(0, pos);
+ 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 j;
+
+ if (data.banned) {
+ io::logger->warn("{} is forum banned, dropping...", user);
+
+ j["result"] = tcp::login_result::banned;
+
+ client.write(tcp::packet_t(j.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()) {
+ data.hwid = client.hwid;
+ }
+
+ // invalid hwid
+ if (data.hwid != client.hwid) {
+
+ j["result"] = tcp::login_result::hwid_mismatch;
+
+ client.write(tcp::packet_t(j.dump(), tcp::packet_type::write,
+ session, tcp::packet_id::login_resp));
+
+ client_server.disconnect_event.call(client);
+ return;
+ }
+
+ j["result"] = tcp::login_result::banned;
+
+ client.write(tcp::packet_t(j.dump(), tcp::packet_type::write,
+ session, tcp::packet_id::login_resp));
+
+ client.state = tcp::client_state::logged_in;
+ }
+ }
+ }
+
client.write(tcp::packet_t(message, tcp::packet_type::write, session));
});