#include "tloginapi.h" #include #include #include #include #include #include "appevent.h" #include "basemainTr.h" namespace TC { void critical(const QString &text, const QString &title = Tr::tr("Error")); std::optional sendRequest(QNetworkAccessManager::Operation op, const QString &url, const QByteArray &postData = QByteArray()); static const QLatin1String scCode("code"); static const QLatin1String scMessage("message"); static const QLatin1String scData("data"); static const QLatin1String scJwtToken("JwtToken"); static const QLatin1String scAccessToken("access_token"); static const QLatin1String scAccessExpire("access_expire"); static const QLatin1String scRefreshAfter("refresh_after"); Login::Login() : QObject() , url("/api/v1/sys/auth/phone_login") {} Login::Login(const QString &_user, const QString &_password) : QObject() , url("/api/v1/sys/auth/phone_login") { QJsonObject json; json["phone"] = _user; json["password"] = _password; QJsonDocument jsonData(json); postData = jsonData.toJson(); } bool Login::post() { std::optional responseData = sendRequest(QNetworkAccessManager::PostOperation, url, postData); if (!responseData.has_value()) { return false; } QJsonValue data; const QJsonObject object = responseData.value().toObject(); if (object.contains(scCode)) { int code = object.value(scCode).toInt(); if (code != 200) { // 获取当前活动窗口 critical(object[scMessage].toString()); return false; } } if (object.contains(scMessage)) { const QString &message = object.value(scMessage).toString(); // Core::MessageManager::writeFlashing(message); } if (object.contains(scData)) { data = object.value(scData); } Login::Data ret; ret.accessToken = data[scAccessToken].toString(); ret.accessExpire = data[scAccessExpire].toVariant().toLongLong(); ret.refreshAfter = data[scRefreshAfter].toVariant().toLongLong(); // if (data[scJwtToken].isObject()) { // const QJsonObject &jwtObject = data[scJwtToken].toObject(); // ret.accessToken = jwtObject[scAccessToken].toString(); // ret.accessExpire = jwtObject[scAccessExpire].toVariant().toLongLong(); // ret.refreshAfter = jwtObject[scRefreshAfter].toVariant().toLongLong(); // } qDebug() << data; //设置 token 到全局变量 if (ret.accessExpire > AppEvent::time()) { AppEvent::instance()->setJwtToken(ret.accessToken); AppEvent::instance()->setRefreshTime(ret.refreshAfter); return true; } return false; } LoginOut::LoginOut() : QObject() , url("/api/v1/user/loginOut") {} bool LoginOut::post() { std::optional data = sendRequest(QNetworkAccessManager::PostOperation, url, {}); if (!data.has_value()) { return false; } const QJsonObject &object = data.value().toObject(); AppEvent::instance()->setJwtToken(QString()); return true; } RefreshToken::RefreshToken() : QObject() , url("/api/v1/user/refresh_token") {} bool RefreshToken::get() { std::optional data = sendRequest(QNetworkAccessManager::GetOperation, url); if (!data.has_value()) { return false; } RefreshToken::Data ret; if (!data.has_value()) { return false; } const QJsonObject &object = data.value().toObject(); ret.accessToken = object[scAccessToken].toString(); ret.accessExpire = object[scAccessExpire].toVariant().toLongLong(); ret.refreshAfter = object[scRefreshAfter].toVariant().toLongLong(); //设置 token 到全局变量 if (ret.accessExpire > AppEvent::time()) { AppEvent::instance()->setJwtToken(ret.accessToken); AppEvent::instance()->setRefreshTime(ret.refreshAfter); return true; } return false; } UserInfo::UserInfo() : QObject() , url("/api/v1/user/userInfo") {} UserInfo::Data UserInfo::get(bool *b) { if (b) { *b = false; } UserInfo::Data ret; std::optional data = sendRequest(QNetworkAccessManager::GetOperation, url); if (!data.has_value()) { return ret; } const QJsonObject &object = data.value().toObject(); ret.username = object["username"].toString(); ret.maxTime = object["maxTime"].toVariant().toLongLong(); ret.checkinNumber = object["checkinNumber"].toString(); if (b) { *b = true; } return ret; } } // namespace TC