#pragma once #include #include #include #include #include #include namespace rublon { class Finish : public AuthenticationStep { const char * apiPath = "/api/transaction/credentials"; const std::string _accessToken; void addAccessToken(Document & coreRequest) const { auto & alloc = coreRequest.GetAllocator(); coreRequest.AddMember("accessToken", Value{_accessToken.c_str(), alloc}, alloc); } tl::expected< bool, Error > returnOk(const Document & /*coreResponse*/) const { return true; } public: const char * name = "Finalization"; Finish(const rublon::Configuration & config, std::string accessToken) : AuthenticationStep(config.systemToken.data(), ""), _accessToken{std::move(accessToken)} {} template < typename Hander_t > tl::expected< bool, Error > handle(const CoreHandlerInterface< Hander_t > & coreHandler) const { const auto returnOk = [&](const auto & coreResponse) { return this->returnOk(coreResponse); }; RapidJSONPMRStackAlloc< 2048 > alloc{}; Document body{rapidjson::kObjectType, &alloc}; this->addSystemToken(body); this->addAccessToken(body); return coreHandler .request(alloc, apiPath, body) // .and_then(returnOk); } }; } // namespace rublon