tloginapi.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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)
  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. QJsonDocument jsonData(json);
  29. postData = jsonData.toJson();
  30. }
  31. bool Login::post()
  32. {
  33. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::PostOperation,
  34. url,
  35. postData);
  36. if (!data.has_value()) {
  37. return false;
  38. }
  39. const QJsonObject &object = data.value().toObject();
  40. Login::Data ret;
  41. if (object[scJwtToken].isObject()) {
  42. const QJsonObject &jwtObject = object[scJwtToken].toObject();
  43. ret.accessToken = jwtObject[scAccessToken].toString();
  44. ret.accessExpire = jwtObject[scAccessExpire].toVariant().toLongLong();
  45. ret.refreshAfter = jwtObject[scRefreshAfter].toVariant().toLongLong();
  46. }
  47. qDebug() << object;
  48. //设置 token 到全局变量
  49. if (ret.accessExpire > AppEvent::time()) {
  50. AppEvent::instance()->setJwtToken(ret.accessToken);
  51. AppEvent::instance()->setRefreshTime(ret.refreshAfter);
  52. return true;
  53. }
  54. return false;
  55. }
  56. LoginOut::LoginOut()
  57. : QObject()
  58. , url("/api/v1/user/loginOut")
  59. {}
  60. bool LoginOut::post()
  61. {
  62. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::PostOperation, url, {});
  63. if (!data.has_value()) {
  64. return false;
  65. }
  66. const QJsonObject &object = data.value().toObject();
  67. AppEvent::instance()->setJwtToken(QString());
  68. return true;
  69. }
  70. RefreshToken::RefreshToken()
  71. : QObject()
  72. , url("/api/v1/user/refresh_token")
  73. {}
  74. bool RefreshToken::get()
  75. {
  76. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::GetOperation, url);
  77. if (!data.has_value()) {
  78. return false;
  79. }
  80. RefreshToken::Data ret;
  81. if (!data.has_value()) {
  82. return false;
  83. }
  84. const QJsonObject &object = data.value().toObject();
  85. ret.accessToken = object[scAccessToken].toString();
  86. ret.accessExpire = object[scAccessExpire].toVariant().toLongLong();
  87. ret.refreshAfter = object[scRefreshAfter].toVariant().toLongLong();
  88. //设置 token 到全局变量
  89. if (ret.accessExpire > AppEvent::time()) {
  90. AppEvent::instance()->setJwtToken(ret.accessToken);
  91. AppEvent::instance()->setRefreshTime(ret.refreshAfter);
  92. return true;
  93. }
  94. return false;
  95. }
  96. UserInfo::UserInfo()
  97. : QObject()
  98. , url("/api/v1/user/userInfo")
  99. {}
  100. UserInfo::Data UserInfo::get(bool *b)
  101. {
  102. if (b) {
  103. *b = false;
  104. }
  105. UserInfo::Data ret;
  106. std::optional<QJsonValue> data = sendRequest(QNetworkAccessManager::GetOperation, url);
  107. if (!data.has_value()) {
  108. return ret;
  109. }
  110. const QJsonObject &object = data.value().toObject();
  111. ret.username = object["username"].toString();
  112. ret.maxTime = object["maxTime"].toVariant().toLongLong();
  113. ret.checkinNumber = object["checkinNumber"].toString();
  114. if (b) {
  115. *b = true;
  116. }
  117. return ret;
  118. }
  119. } // namespace TC