#include "tloginapi.h" #include #include #include #include #include #include "appevent.h" namespace TC { std::optional sendRequest(QNetworkAccessManager::Operation op, const QString &url, const QByteArray &postData = QByteArray()); 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/user/login") {} Login::Login(const QString &_user, const QString &_password) : QObject() , url("/api/v1/user/login") { QJsonObject json; json["name"] = _user; json["swID"] = _password; json["examineeNumber"] = _password; QJsonDocument jsonData(json); postData = jsonData.toJson(); } bool Login::post() { std::optional data = sendRequest(QNetworkAccessManager::PostOperation, url, postData); if (!data.has_value()) { return false; } const QJsonObject &object = data.value().toObject(); Login::Data ret; if (object[scJwtToken].isObject()) { const QJsonObject &jwtObject = object[scJwtToken].toObject(); ret.accessToken = jwtObject[scAccessToken].toString(); ret.accessExpire = jwtObject[scAccessExpire].toVariant().toLongLong(); ret.refreshAfter = jwtObject[scRefreshAfter].toVariant().toLongLong(); } qDebug() << object; //设置 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