#include "settings.hpp" #include #define TOML_ENABLE_FORMATTERS 0 #include auto Settings::from_stream(std::istream &in) -> Settings { const auto config = toml::parse(in); return Settings{ .host = config["host"].value_or(std::string{}), .service = config["port"].value_or(std::uint16_t{6667}), .password = config["password"].value_or(std::string{}), .username = config["username"].value_or(std::string{}), .realname = config["realname"].value_or(std::string{}), .nickname = config["nickname"].value_or(std::string{}), .sasl_mechanism = config["sasl_mechanism"].value_or(std::string{}), .sasl_authcid = config["sasl_authcid"].value_or(std::string{}), .sasl_authzid = config["sasl_authzid"].value_or(std::string{}), .sasl_password = config["sasl_password"].value_or(std::string{}), .sasl_key_file = config["sasl_key_file"].value_or(std::string{}), .sasl_key_password = config["sasl_key_password"].value_or(std::string{}), .tls_hostname = config["tls_hostname"].value_or(std::string{}), .tls_cert_file = config["tls_cert_file"].value_or(std::string{}), .tls_key_file = config["tls_key_file"].value_or(std::string{}), .tls_key_password = config["tls_key_password"].value_or(std::string{}), .challenge_username = config["challenge_username"].value_or(std::string{}), .challenge_key_file = config["challenge_key_file"].value_or(std::string{}), .challenge_key_password = config["challenge_key_password"].value_or(std::string{}), .use_tls = config["use_tls"].value_or(false), }; } auto configure_sasl(const Settings &settings) -> std::unique_ptr { if (settings.sasl_mechanism == "PLAIN" && not settings.sasl_authcid.empty() ) { return std::make_unique( settings.sasl_authcid, settings.sasl_authzid, settings.sasl_password); } else if (settings.sasl_mechanism == "EXTERNAL") { return std::make_unique(settings.sasl_authzid); } else if ( settings.sasl_mechanism == "ECDSA" && not settings.sasl_authcid.empty() && not settings.sasl_key_file.empty() ) { if (auto sasl_key = myirc::key_from_file(settings.sasl_key_file, settings.sasl_key_password)) return std::make_unique( settings.sasl_authcid, settings.sasl_authzid, std::move(sasl_key)); } return nullptr; }