Make DOSGuard config loading more resilient (#103)

This commit is contained in:
undertome
2022-02-24 17:58:46 -06:00
committed by GitHub
parent 356de57506
commit 115b93298d

View File

@@ -29,8 +29,14 @@ class DOSGuard
std::string const& key,
std::uint32_t const fallback) const
{
if (auto const c = getConfig(config); c)
return c->at(key).as_int64();
try
{
if (auto const c = getConfig(config))
return c->at(key).as_int64();
}
catch (std::exception const& e)
{
}
return fallback;
}
@@ -40,22 +46,26 @@ class DOSGuard
{
using T = std::unordered_set<std::string> const;
auto const& c = getConfig(config);
if (!c)
try
{
auto const& c = getConfig(config);
if (!c)
return T();
auto const& w = c->at("whitelist").as_array();
auto const transform = [](auto const& elem) {
return std::string(elem.as_string().c_str());
};
return T(
boost::transform_iterator(w.begin(), transform),
boost::transform_iterator(w.end(), transform));
}
catch (std::exception const& e)
{
return T();
if (!c->contains("whitelist"))
return T();
auto const& w = c->at("whitelist").as_array();
auto const transform = [](auto const& elem) {
return std::string(elem.as_string().c_str());
};
return T(
boost::transform_iterator(w.begin(), transform),
boost::transform_iterator(w.end(), transform));
}
}
public: