// // Created by selim on 03.01.2022. // #include "Api.h" #include "Settings.h" #include const std::string Api::_baseUrl = "https://vps.aliencat.pro:8443/"; SoupSession* Api::_session = soup_session_new(); template void callback(SoupSession* session, SoupMessage* message, gpointer userData) { auto promise = reinterpret_cast*>(userData); if(message->status_code >= 200 && message->status_code < 300) { auto responseString = std::string(message->response_body->data, message->response_body->length); auto json = nlohmann::json::parse(responseString); if(json["success"].get()) { //std::cout << "response: " << responseString << std::endl; auto data = json["data"].get(); promise->set_result(data); } else { auto error = json["error"].get(); promise->set_exception(std::make_exception_ptr(std::runtime_error(error))); } } else { promise->set_exception(std::make_exception_ptr(std::runtime_error(message->reason_phrase))); } delete promise; } template cc::result Api::post(const std::string &method, const nlohmann::json& params) { std::string url = _baseUrl + method; auto msg = soup_message_new(SOUP_METHOD_POST, url.c_str()); auto promise = new cc::result_promise(); auto result = promise->get_result(); auto jsonStr = params.dump(); soup_message_set_request(msg, "application/json", SOUP_MEMORY_COPY, jsonStr.c_str(), jsonStr.size()); soup_session_queue_message(_session, msg, callback, promise); return result; } cc::result Api::login(std::string email, std::string password) { nlohmann::json params = { { "email", email }, { "password", password } }; auto user = Settings::instance().user(); auto result = co_await post("user/login", params); user.email = result.email; user.token = result.token; Settings::instance().setUser(user); co_return user; }