#ifndef QJSONWEBTOKEN_H #define QJSONWEBTOKEN_H #include #include #include /** 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