qjsonwebtoken.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef QJSONWEBTOKEN_H
  2. #define QJSONWEBTOKEN_H
  3. #include <QJsonDocument>
  4. #include <QJsonObject>
  5. #include <QMessageAuthenticationCode>
  6. /**
  7. This class implements a subset of the [JSON Web Token](https://en.wikipedia.org/wiki/JSON_Web_Token)
  8. open standard [RFC 7519](https://tools.ietf.org/html/rfc7519).
  9. Currently this implementation only supports the following algorithms:
  10. Alg | Parameter Value Algorithm
  11. ----- | ------------------------------------
  12. HS256 | HMAC using SHA-256 hash algorithm
  13. HS384 | HMAC using SHA-384 hash algorithm
  14. HS512 | HMAC using SHA-512 hash algorithm
  15. */
  16. class QJsonWebToken
  17. {
  18. public:
  19. QJsonWebToken(); // TODO : improve with params
  20. QJsonWebToken(const QJsonWebToken &other);
  21. QJsonDocument getHeaderJDoc() const;
  22. QString getHeaderQStr() const;
  23. bool setHeaderJDoc(const QJsonDocument &jdocHeader);
  24. bool setHeaderQStr(const QString &strHeader);
  25. QJsonDocument getPayloadJDoc() const;
  26. QString getPayloadQStr() const;
  27. bool setPayloadJDoc(const QJsonDocument &jdocPayload);
  28. bool setPayloadQStr(const QString &strPayload);
  29. QByteArray getSignature();
  30. QByteArray getSignatureBase64();
  31. QString getSecret() const;
  32. bool setSecret(const QString &strSecret);
  33. void setRandomSecret();
  34. QString getAlgorithmStr() const;
  35. bool setAlgorithmStr(const QString &strAlgorithm);
  36. QString getToken();
  37. bool setToken(const QString &strToken);
  38. QString getRandAlphanum() const;
  39. void setRandAlphanum(const QString &strRandAlphanum);
  40. int getRandLength() const;
  41. void setRandLength(const int &intRandLength);
  42. bool isValid() const;
  43. static QJsonWebToken fromTokenAndSecret(const QString &strToken, const QString &srtSecret);
  44. static QStringList supportedAlgorithms();
  45. void appendClaim(const QString &strClaimType, const QString &strValue);
  46. void removeClaim(const QString &strClaimType);
  47. QString claim(const QString &strClaimType);
  48. private:
  49. QJsonDocument m_jdocHeader; // unencoded
  50. QJsonDocument m_jdocPayload; // unencoded
  51. QByteArray m_byteSignature; // unencoded
  52. QString m_strHeader; // unencoded
  53. QString m_strPayload; // unencoded
  54. QString m_strSecret;
  55. QString m_strAlgorithm;
  56. int m_intRandLength;
  57. QString m_strRandAlphanum;
  58. // helpers
  59. QByteArray m_byteAllData;
  60. bool isAlgorithmSupported(const QString &strAlgorithm);
  61. };
  62. #endif // QJSONWEBTOKEN_H