diff options
| author | Aotrix <[email protected]> | 2026-04-28 03:49:41 +0200 |
|---|---|---|
| committer | Aotrix <[email protected]> | 2026-04-28 03:49:41 +0200 |
| commit | a0632d299b85dc4ef7c0e03898f38e6deca0edc2 (patch) | |
| tree | cc83712ca644e8b5d1b9e1c0c49bdbdd8475d0a9 /battleNetApi/include/hearthstoneTokenBuilder.hpp | |
| parent | 5582e994d39b16a6d61f05b13e78c30f4bac5d84 (diff) | |
add HearthstoneTokenBuilder class
Diffstat (limited to 'battleNetApi/include/hearthstoneTokenBuilder.hpp')
| -rw-r--r-- | battleNetApi/include/hearthstoneTokenBuilder.hpp | 43 |
1 files changed, 43 insertions, 0 deletions
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 <chrono> +#include <cstdint> +#include <nlohmann/json.hpp> +#include <string> +#include <token.hpp> +#include <tokenBuilder.hpp> +#include <vector> + +using nlohmann::json; + +static constexpr std::uint64_t kTOKEN_CONTENT_MIN_LENGTH{10}; + +class HearthstoneTokenBuilder : TokenBuilder { + private: + std::shared_ptr<Token> mCurrentToken; + bool mUpdateSourceFile{false}; + std::vector<std::string> 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<std::string, std::uint64_t> getTokenWithApi() const; + std::string getTokenFromLocalFile() const; + void writeTokenToLocalFile( + const std::pair<std::string, std::uint64_t> &iToken) const; + + public: + HearthstoneTokenBuilder(const std::span<std::string> &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<Token> getToken() override; +}; |
