#pragma once #include #include #include #include namespace rublon { class AuthenticationStep { protected: Session & _session; public: AuthenticationStep(Session & session) : _session{session} {} protected: void addSystemToken(Document & body) const { auto & alloc = body.GetAllocator(); body.AddMember("systemToken", Value{_session.csystemToken(), alloc}, alloc); } void addTid(Document & body) const { auto & alloc = body.GetAllocator(); body.AddMember("tid", Value{_session.ctransactionID(), alloc}, alloc); } void addAccessToken(Document & body, std::string_view token) const { auto & alloc = body.GetAllocator(); body.AddMember("accessToken", Value{token.data(), static_cast< unsigned >(token.length()), alloc}, alloc); } template < typename Hander_t > tl::expected< AuthenticationStatus, Error > waitForCoreConfirmation(const CoreHandlerInterface< Hander_t > & eventListener) const { auto event = eventListener.listen(); if(event.status == transactionConfirmed ){ log(LogLevel::Debug, " Transaction confirmed"); return AuthenticationStatus{AuthenticationStatus::Action::Confirmed, event.accessToken.value().c_str()}; } log(LogLevel::Debug, " Transaction denied"); return AuthenticationStatus{AuthenticationStatus::Action::Denied}; } }; } // namespace rublon