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 ++++++++++++++++++++++++ battleNetApi/include/token.hpp | 25 ++------------ battleNetApi/include/tokenBuilder.hpp | 14 ++++---- battleNetApi/include/tokenPool.hpp | 20 ----------- 4 files changed, 53 insertions(+), 49 deletions(-) create mode 100644 battleNetApi/include/hearthstoneTokenBuilder.hpp delete mode 100644 battleNetApi/include/tokenPool.hpp (limited to 'battleNetApi/include') 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; +}; diff --git a/battleNetApi/include/token.hpp b/battleNetApi/include/token.hpp index b913b2b..cc909a8 100644 --- a/battleNetApi/include/token.hpp +++ b/battleNetApi/include/token.hpp @@ -1,32 +1,13 @@ #pragma once -#include #include class Token { public: - explicit Token(const std::string &iTokenFilePath); + explicit Token(const std::string &iTokenText); std::string text() const; - const bool hasExpired() const; + void setText(const std::string &iTokenText); private: - const std::string mFilePath; //!< Path to the token file - const std::string mUsername; //!< Username for Battle.net API - const std::string mPassword; //!< Password for Battle.net API - std::string mToken; //!< Token value - - /** - * @return An access token that a user can use to perform API requests. - * First, the cache file is checked. - * A new token is computed if the current token lifetime expired, - * or if there is no token at all. - */ - std::string generateToken(); - void writeTokenToLocalFile(const std::pair &iToken) const; - std::string getTokenFromLocalFile() const; - std::pair getTokenWithApi() const; - std::chrono::seconds getCurrentTime() const; - static size_t curlCallbackStringOutput(void *iPtr, size_t iSize, size_t iNmemb, std::string *iUserData); - - static const std::uint16_t kTokenContentMinLength{10}; + std::string mTokenText; //!< Token value }; diff --git a/battleNetApi/include/tokenBuilder.hpp b/battleNetApi/include/tokenBuilder.hpp index 71286cd..2893728 100644 --- a/battleNetApi/include/tokenBuilder.hpp +++ b/battleNetApi/include/tokenBuilder.hpp @@ -1,12 +1,12 @@ +#pragma once + +#include #include class TokenBuilder { public: - TokenBuilder(); - [[nodiscard]] - Token build() const; - TokenBuilder &allowSourceFileUpdate(); - - private: - bool mAllowSourceFileUpdate{false}; + TokenBuilder() = default; + virtual ~TokenBuilder() = default; + virtual TokenBuilder &buildToken() = 0; + virtual std::shared_ptr getToken() = 0; }; diff --git a/battleNetApi/include/tokenPool.hpp b/battleNetApi/include/tokenPool.hpp deleted file mode 100644 index 0b1e4cc..0000000 --- a/battleNetApi/include/tokenPool.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include -#include - -static std::queue aTokenContainer; - -class TokenPool { - private: - TokenPool() = delete; - TokenPool(const TokenPool &) = delete; - TokenPool(TokenPool &&) = delete; - TokenPool &operator=(const TokenPool &) = delete; - TokenPool &operator=(TokenPool &&) = delete; - - public: - static void feedTokenSource(const std::span &iJsonPaths); - static void feedTokenSource(const std::string &iJsonPath); - static std::optional availableToken(); -}; -- cgit v1.2.3