#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("token"); static const QLatin1String scAccessExpire("access_expire"); static const QLatin1String scRefreshAfter("refresh_after"); Login::Login() : QObject() , url("/sys-api/user/login") {} Login::Login(const QString &_user, const QString &_password, const QString &_captchaId, const QString &_captcha) : QObject() , url("/sys-api/user/login") { QJsonObject json; json["username"] = _user; json["password"] = _password; // 添加验证码参数 if (!_captchaId.isEmpty() && !_captcha.isEmpty()) { json["captchaId"] = _captchaId; json["captcha"] = _captcha; } 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; ret.accessToken = object["token"].toString(); ret.accessExpire = object["expire"].toVariant().toLongLong(); ret.userID = object["userId"].toString(); qDebug() << object; // 计算refreshAfter:当前时间 + (过期时间 - 当前时间) * 2/3 qint64 currentTime = AppEvent::time(); qint64 timeToExpire = ret.accessExpire - currentTime; ret.refreshAfter = currentTime + (timeToExpire * 2 / 3); //设置 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; } // /sys-api/captcha TC::Captcha::Captcha() : QObject() , url("/sys-api/captcha") {} TC::Captcha::Data TC::Captcha::get(bool *b) { if (b) { *b = false; } Captcha::Data ret; std::optional data = sendRequest(QNetworkAccessManager::GetOperation, url); if (!data.has_value()) { return ret; } const QJsonObject &object = data.value().toObject(); ret.captchaId = object["captchaId"].toString(); ret.imgPath = object["imgPath"].toString(); if (b) { *b = true; } return ret; } } // namespace TC