#pragma once #include #include namespace llarp::service { struct Endpoint; } namespace llarp::rpc { struct EndpointAuthRPC : public llarp::service::IAuthPolicy, public std::enable_shared_from_this { using LMQ_ptr = std::shared_ptr; using Endpoint_ptr = std::shared_ptr; using Whitelist_t = std::unordered_set; explicit EndpointAuthRPC( std::string url, std::string method, Whitelist_t addr_whitelist, std::unordered_set token_whitelist, LMQ_ptr lmq, Endpoint_ptr endpoint); virtual ~EndpointAuthRPC() = default; void Start(); void AuthenticateAsync( std::shared_ptr msg, std::function hook) override; bool AsyncAuthPending(service::ConvoTag tag) const override; private: const std::string m_AuthURL; const std::string m_AuthMethod; const Whitelist_t m_AuthWhitelist; const std::unordered_set m_AuthStaticTokens; LMQ_ptr m_LMQ; Endpoint_ptr m_Endpoint; std::optional m_Conn; std::unordered_set m_PendingAuths; }; } // namespace llarp::rpc