diff options
| author | auth <[email protected]> | 2020-07-13 23:05:20 +0200 |
|---|---|---|
| committer | auth <[email protected]> | 2020-07-13 23:05:20 +0200 |
| commit | e177151308cbdfb2b96119389cf5bf7c2659b94e (patch) | |
| tree | 7e5737aca17322bf3d39ee5643b3ae2d5deea8f3 /server/src/main.cpp | |
| parent | Small changes. (diff) | |
| download | loader-e177151308cbdfb2b96119389cf5bf7c2659b94e.tar.xz loader-e177151308cbdfb2b96119389cf5bf7c2659b94e.zip | |
Forum integration.
Added separate packet ids for login request/response.
Added login responses.
Small code changes.
Diffstat (limited to 'server/src/main.cpp')
| -rw-r--r-- | server/src/main.cpp | 57 |
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)); }); |