aboutsummaryrefslogtreecommitdiff
path: root/server/src/forum/forum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/forum/forum.cpp')
-rw-r--r--server/src/forum/forum.cpp47
1 files changed, 33 insertions, 14 deletions
diff --git a/server/src/forum/forum.cpp b/server/src/forum/forum.cpp
index 57eff72..ed2ae58 100644
--- a/server/src/forum/forum.cpp
+++ b/server/src/forum/forum.cpp
@@ -2,23 +2,25 @@
#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;
+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"},
+ 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/");
+ 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);
+ m_header);
if (req.elapsed >= 10) {
io::logger->warn("login request on {} timed out.", username);
@@ -29,19 +31,36 @@ int xenforo_forum::check_login(const std::string_view username,
auto response = req.text;
if (!nlohmann::json::accept(response)) {
- io::logger->error("login response on {} isnt valid json.", username);
- return forum_response::api_fail;
+ io::logger->error("invalid json response from forum.", 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<bool>();
- // data.active = check user group
- data.hwid = j["user"]["custom_fields"]["hwid"].get<std::string>();
+ auto json = nlohmann::json::parse(response);
+
+ data.banned = json["user"]["is_banned"].get<bool>();
+ // data.active = check user groupm
+ auto custom_fields = json["user"]["custom_fields"];
+ if (custom_fields.contains("hwid")) {
+ data.hwid = json["user"]["custom_fields"]["hwid"].get<std::string>();
+ } else {
+ io::logger->warn("hwid field doesn't exist for {}.", username);
+ }
+
+ data.id = json["user"]["user_id"].get<int>();
return forum_response::api_success;
+}
+
+bool xenforo_forum::edit(const int uid, const std::string_view field,
+ const std::string_view val) {
+ const auto url = fmt::format("{}{}{}/", m_link, "/users/", uid);
+ const auto post = fmt::format("{}={}", field, val);
+
+ auto req =
+ cpr::Post(cpr::Url{url}, cpr::Body{post}, cpr::Timeout{10000}, m_header);
+ return req.status_code == 200;
} \ No newline at end of file