tloginapi.cpp 4.7 KB

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