//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #include "login.h" #include "API/codes.h" const std::map Request::Login::tokensStructure({ {"accessToken", QMetaType::QString}, {"renewToken", QMetaType::QString} }); Request::Login::Login (const QString& login, const QString& password, const QUrl& baseUrl): Post(createUrl(baseUrl, "/login"), {{"login", login}, {"password", password}}) {} void Request::Login::onSuccess (const QVariantMap& data) { if (!validateResponse(data, resultStructure)) return Request::onError("Malformed response", std::nullopt); if (!validateResponse(data, tokensStructure)) return Request::onError("Malformed result: missing tokens", std::nullopt); Codes::Login code = Codes::convertLogin(data.value("result").toInt()); if (code != Codes::Login::success) return Request::onError("Failed to login: " + Codes::description(code), data); Request::onSuccess(data); } void Request::Login::onError (const QString& err, const std::optional& data) { if (validateResponse(data, resultStructure)) Request::onError(err + ": " + Codes::description(Codes::convertLogin(data->value("result").toInt())), data); else Request::onError(err, data); }