| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #include "tloginapi.h"
- #include <QJsonDocument>
- #include <QJsonObject>
- #include <QJsonValue>
- #include <QNetworkAccessManager>
- #include <optional>
- #include "appevent.h"
- namespace TC {
- std::optional<QJsonValue> 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<QJsonValue> 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<QJsonValue> 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<QJsonValue> 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<QJsonValue> 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<QJsonValue> 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
|