#pragma once #include #include #include enum PathType { Files, // serve files Plugin // delegate to plugin }; struct Path { std::string requested; // the requested path PathType type; std::unordered_map params; // what to serve, e.g. which filesystem path, or which plugin }; struct Site { std::string name; std::string host; std::vector paths; }; enum SocketProtocol { HTTP, HTTPS }; struct Socket { std::string address; std::string port; SocketProtocol protocol; }; class Config { const std::string default_filename{"/etc/webserver.conf"}; void readConfigfile(std::string filename); std::string m_user; std::string m_group; std::vector m_plugin_directories; std::vector m_sites; std::vector m_sockets; public: Config(const std::string& filename); // Data getters std::string User() const; std::string Group() const; const std::vector& PluginDirectories() const; const std::vector& Sites() const; const std::vector& Sockets() const; void dump() const; };