| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #ifndef QJSONWEBTOKEN_H
- #define QJSONWEBTOKEN_H
- #include <QJsonDocument>
- #include <QJsonObject>
- #include <QMessageAuthenticationCode>
- /**
- This class implements a subset of the [JSON Web Token](https://en.wikipedia.org/wiki/JSON_Web_Token)
- open standard [RFC 7519](https://tools.ietf.org/html/rfc7519).
- Currently this implementation only supports the following algorithms:
- Alg | Parameter Value Algorithm
- ----- | ------------------------------------
- HS256 | HMAC using SHA-256 hash algorithm
- HS384 | HMAC using SHA-384 hash algorithm
- HS512 | HMAC using SHA-512 hash algorithm
- */
- class QJsonWebToken
- {
- public:
- QJsonWebToken(); // TODO : improve with params
- QJsonWebToken(const QJsonWebToken &other);
- QJsonDocument getHeaderJDoc() const;
- QString getHeaderQStr() const;
- bool setHeaderJDoc(const QJsonDocument &jdocHeader);
- bool setHeaderQStr(const QString &strHeader);
- QJsonDocument getPayloadJDoc() const;
- QString getPayloadQStr() const;
- bool setPayloadJDoc(const QJsonDocument &jdocPayload);
- bool setPayloadQStr(const QString &strPayload);
- QByteArray getSignature();
- QByteArray getSignatureBase64();
- QString getSecret() const;
- bool setSecret(const QString &strSecret);
- void setRandomSecret();
- QString getAlgorithmStr() const;
- bool setAlgorithmStr(const QString &strAlgorithm);
- QString getToken();
- bool setToken(const QString &strToken);
- QString getRandAlphanum() const;
- void setRandAlphanum(const QString &strRandAlphanum);
- int getRandLength() const;
- void setRandLength(const int &intRandLength);
- bool isValid() const;
- static QJsonWebToken fromTokenAndSecret(const QString &strToken, const QString &srtSecret);
- static QStringList supportedAlgorithms();
- void appendClaim(const QString &strClaimType, const QString &strValue);
- void removeClaim(const QString &strClaimType);
- QString claim(const QString &strClaimType);
- private:
- QJsonDocument m_jdocHeader; // unencoded
- QJsonDocument m_jdocPayload; // unencoded
- QByteArray m_byteSignature; // unencoded
- QString m_strHeader; // unencoded
- QString m_strPayload; // unencoded
- QString m_strSecret;
- QString m_strAlgorithm;
- int m_intRandLength;
- QString m_strRandAlphanum;
- // helpers
- QByteArray m_byteAllData;
- bool isAlgorithmSupported(const QString &strAlgorithm);
- };
- #endif // QJSONWEBTOKEN_H
|