From a0632d299b85dc4ef7c0e03898f38e6deca0edc2 Mon Sep 17 00:00:00 2001 From: Aotrix <9aotrix@protonmail.com> Date: Tue, 28 Apr 2026 03:49:41 +0200 Subject: add HearthstoneTokenBuilder class --- battleNetApi/include/hearthstoneTokenBuilder.hpp | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 battleNetApi/include/hearthstoneTokenBuilder.hpp (limited to 'battleNetApi/include/hearthstoneTokenBuilder.hpp') diff --git a/battleNetApi/include/hearthstoneTokenBuilder.hpp b/battleNetApi/include/hearthstoneTokenBuilder.hpp new file mode 100644 index 0000000..488aff4 --- /dev/null +++ b/battleNetApi/include/hearthstoneTokenBuilder.hpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include + +using nlohmann::json; + +static constexpr std::uint64_t kTOKEN_CONTENT_MIN_LENGTH{10}; + +class HearthstoneTokenBuilder : TokenBuilder { + private: + std::shared_ptr mCurrentToken; + bool mUpdateSourceFile{false}; + std::vector mJsonPaths; + bool isUpdateSourceFileAllowed() const; + const bool hasExpired(json iToken) const; + static size_t curlCallbackStringOutput(void *iPtr, size_t iSize, + size_t iNmemb, + std::string *iUserData); + std::chrono::seconds getCurrentTime() const; + std::pair getTokenWithApi() const; + std::string getTokenFromLocalFile() const; + void writeTokenToLocalFile( + const std::pair &iToken) const; + + public: + HearthstoneTokenBuilder(const std::span &iJsonPaths); + HearthstoneTokenBuilder(const std::string &iJsonPath); + HearthstoneTokenBuilder &addJsonPath(const std::string &iJsonPath); + HearthstoneTokenBuilder &addJsonPaths(const std::string &iJsonPath); + HearthstoneTokenBuilder &allowUpdateSourceFile(); + /** + * @return Create an access token to perform API requests. + * First, the cache files are checked. + * A new token is computed if the token lifetimes expired, + * or if there is no token at all. + */ + HearthstoneTokenBuilder &buildToken() override; + std::shared_ptr getToken() override; +}; -- cgit v1.2.3