From e177151308cbdfb2b96119389cf5bf7c2659b94e Mon Sep 17 00:00:00 2001 From: auth Date: Mon, 13 Jul 2020 23:05:20 +0200 Subject: Forum integration. Added separate packet ids for login request/response. Added login responses. Small code changes. --- server/src/forum/forum.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 server/src/forum/forum.cpp (limited to 'server/src/forum/forum.cpp') diff --git a/server/src/forum/forum.cpp b/server/src/forum/forum.cpp new file mode 100644 index 0000000..57eff72 --- /dev/null +++ b/server/src/forum/forum.cpp @@ -0,0 +1,47 @@ +#include "../include.h" +#include "../util/io.h" +#include "forum.h" + +void xenforo_forum::init(const std::string_view link, const std::string_view key) { + m_link = link; + m_api = key; + + m_header = cpr::Header{{"Content-Type", "application/x-www-form-urlencoded"}, + {"XF-Api-Key", m_api.data()}, + {"XF-Api-User", "1"}, + {"api_bypass_permissions", "1"}}; +} + +int xenforo_forum::check_login(const std::string_view username, + const std::string_view password, user_data &data) { + auto url = fmt::format("{}{}", m_link, "/auth/"); + auto post_data = fmt::format("login={}&password={}", username, password); + + auto req = cpr::Post(cpr::Url{url}, cpr::Body{post_data}, cpr::Timeout{10000}, + m_header); + + if (req.elapsed >= 10) { + io::logger->warn("login request on {} timed out.", username); + return forum_response::api_timeout; + } + + int status_code = req.status_code; + auto response = req.text; + + if (!nlohmann::json::accept(response)) { + io::logger->error("login response on {} isnt valid json.", username); + return forum_response::api_fail; + } + + if (status_code >= 400) { + return forum_response::api_error; + } + + auto j = nlohmann::json::parse(response); + + data.banned = j["user"]["is_banned"].get(); + // data.active = check user group + data.hwid = j["user"]["custom_fields"]["hwid"].get(); + + return forum_response::api_success; +} \ No newline at end of file -- cgit v1.2.3