#pragma once #include #include #include #include namespace Poco { namespace Net { class IPAddress; } namespace Util { class AbstractConfiguration; } } namespace DB { /// Allow to check that address matches a pattern. class IAddressPattern { public: virtual bool contains(const Poco::Net::IPAddress & addr) const = 0; virtual ~IAddressPattern() {} }; class AddressPatterns { private: using Container = std::vector>; Container patterns; public: bool contains(const Poco::Net::IPAddress & addr) const; void addFromConfig(const String & config_elem, Poco::Util::AbstractConfiguration & config); }; /** User and ACL. */ struct User { String name; /// Required password. Could be stored in plaintext or in SHA256. String password; String password_sha256_hex; String profile; String quota; AddressPatterns addresses; /// List of allowed databases. using DatabaseSet = std::unordered_set; DatabaseSet databases; User(const String & name_, const String & config_elem, Poco::Util::AbstractConfiguration & config); }; }