tloginapi.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include "tloginapi.h"
  2. #include <QJsonDocument>
  3. #include <QJsonObject>
  4. #include <QJsonValue>
  5. #include <QNetworkAccessManager>
  6. #include <optional>
  7. #include "appevent.h"
  8. namespace TC {
  9. std::optional<QJsonValue> sendRequest(QNetworkAccessManager::Operation op,
  10. const QString &url,
  11. const QByteArray &postData = QByteArray());
  12. static const QLatin1String scJwtToken("JwtToken");
  13. static const QLatin1String scAccessToken("access_token");
  14. static const QLatin1String scAccessExpire("access_expire");
  15. static const QLatin1String scRefreshAfter("refresh_after");
  16. Login::Login()
  17. : QObject()
  18. , url("/api/v1/user/login")
  19. {}
  20. Login::Login(const QString &_user, const QString &_password, const QString &_captchaId, const QString &_captcha)
  21. : QObject()
  22. , url("/api/v1/user/login")
  23. {
  24. QJsonObject json;
  25. json["name"] = _user;
  26. json["swID"] = _password;
  27. json["examineeNumber"] = _password;
  28. // 添加验证码参数
  29. if (!_captchaId.isEmpty() && !_captcha.isEmpty()) {
  30. json["captchaId"] = _captchaId;
  31. json["captcha"] = _captcha;
  32. }
  33. QJsonDocument jsonData(json);
  34. postData = jsonData.toJson();
  35. }
  36. bool Login::post()
  37. {
  38. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::PostOperation,
  39. url,
  40. postData);
  41. if (!data.has_value()) {
  42. return false;
  43. }
  44. const QJsonObject &object = data.value().toObject();
  45. Login::Data ret;
  46. if (object[scJwtToken].isObject()) {
  47. const QJsonObject &jwtObject = object[scJwtToken].toObject();
  48. ret.accessToken = jwtObject[scAccessToken].toString();
  49. ret.accessExpire = jwtObject[scAccessExpire].toVariant().toLongLong();
  50. ret.refreshAfter = jwtObject[scRefreshAfter].toVariant().toLongLong();
  51. }
  52. qDebug() << object;
  53. //设置 token 到全局变量
  54. if (ret.accessExpire > AppEvent::time()) {
  55. AppEvent::instance()->setJwtToken(ret.accessToken);
  56. AppEvent::instance()->setRefreshTime(ret.refreshAfter);
  57. return true;
  58. }
  59. return false;
  60. }
  61. LoginOut::LoginOut()
  62. : QObject()
  63. , url("/api/v1/user/loginOut")
  64. {}
  65. bool LoginOut::post()
  66. {
  67. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::PostOperation, url, {});
  68. if (!data.has_value()) {
  69. return false;
  70. }
  71. const QJsonObject &object = data.value().toObject();
  72. AppEvent::instance()->setJwtToken(QString());
  73. return true;
  74. }
  75. RefreshToken::RefreshToken()
  76. : QObject()
  77. , url("/api/v1/user/refresh_token")
  78. {}
  79. bool RefreshToken::get()
  80. {
  81. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::GetOperation, url);
  82. if (!data.has_value()) {
  83. return false;
  84. }
  85. RefreshToken::Data ret;
  86. if (!data.has_value()) {
  87. return false;
  88. }
  89. const QJsonObject &object = data.value().toObject();
  90. ret.accessToken = object[scAccessToken].toString();
  91. ret.accessExpire = object[scAccessExpire].toVariant().toLongLong();
  92. ret.refreshAfter = object[scRefreshAfter].toVariant().toLongLong();
  93. //设置 token 到全局变量
  94. if (ret.accessExpire > AppEvent::time()) {
  95. AppEvent::instance()->setJwtToken(ret.accessToken);
  96. AppEvent::instance()->setRefreshTime(ret.refreshAfter);
  97. return true;
  98. }
  99. return false;
  100. }
  101. UserInfo::UserInfo()
  102. : QObject()
  103. , url("/api/v1/user/userInfo")
  104. {}
  105. UserInfo::Data UserInfo::get(bool *b)
  106. {
  107. if (b) {
  108. *b = false;
  109. }
  110. UserInfo::Data ret;
  111. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::GetOperation, url);
  112. if (!data.has_value()) {
  113. return ret;
  114. }
  115. const QJsonObject &object = data.value().toObject();
  116. ret.username = object["username"].toString();
  117. ret.maxTime = object["maxTime"].toVariant().toLongLong();
  118. ret.checkinNumber = object["checkinNumber"].toString();
  119. if (b) {
  120. *b = true;
  121. }
  122. return ret;
  123. }
  124. // /sys-api/captcha
  125. TC::Captcha::Captcha()
  126. : QObject()
  127. , url("/sys-api/captcha")
  128. {}
  129. TC::Captcha::Data TC::Captcha::get(bool *b)
  130. {
  131. if (b) {
  132. *b = false;
  133. }
  134. Captcha::Data ret;
  135. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::GetOperation, url);
  136. if (!data.has_value()) {
  137. return ret;
  138. }
  139. const QJsonObject &object = data.value().toObject();
  140. ret.captchaId = object["captchaId"].toString();
  141. ret.imgPath = object["imgPath"].toString();
  142. if (b) {
  143. *b = true;
  144. }
  145. return ret;
  146. }
  147. } // namespace TC