From 92a14d375c8cd9dabc32ccb6dcbdf83321af535f Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 11 Feb 2023 16:04:35 +0100 Subject: Added config --- config.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 config.cpp (limited to 'config.cpp') diff --git a/config.cpp b/config.cpp new file mode 100644 index 0000000..44e0d36 --- /dev/null +++ b/config.cpp @@ -0,0 +1,73 @@ +#include "config.h" + +#include +#include + +#include +#include + +namespace pt = boost::property_tree; +using namespace std::string_literals; + +namespace { + const std::string default_datapath {"/var/lib/blog"}; + const std::string default_listen {"::1:9000"}; + const std::string default_name{"blog"}; + const std::string default_keywords{"blog, reichwein.it, weblog"}; +} + +Config::Config(const std::string& config_filename): + m_dataPath{default_datapath}, + m_listenAddress{"::1"}, + m_listenPort{9000}, + m_name{default_name}, + m_keywords{default_keywords} +{ + + try { + pt::ptree tree; + + pt::read_xml(config_filename, tree, pt::xml_parser::no_comments | pt::xml_parser::trim_whitespace); + + m_dataPath = tree.get("config.datapath", default_datapath); + m_name = tree.get("config.name", default_name); + std::string listen {tree.get("config.port", default_listen)}; + auto pos{listen.find_last_of(':')}; + if (pos == std::string::npos) + throw std::runtime_error("Bad port address: "s + listen); + + m_listenAddress = listen.substr(0, pos); + m_listenPort = std::stoi(listen.substr(pos + 1)); + if (m_listenPort < 0 || m_listenPort > 65535) + throw std::runtime_error("Bad listen port: "s + std::to_string(m_listenPort)); + + m_keywords = tree.get("config.keywords", default_keywords); + } catch (const std::exception& ex) { + std::cerr << "Error reading config file " << config_filename << ". Using defaults." << std::endl; + } +} + +std::string Config::getDataPath() const +{ + return m_dataPath; +} + +std::string Config::getListenAddress() const +{ + return m_listenAddress; +} + +int Config::getListenPort() const +{ + return m_listenPort; +} + +std::string Config::getName() const +{ + return m_name; +} + +std::string Config::getKeywords() const +{ + return m_keywords; +} -- cgit v1.2.3