feat(api/ui): add client enable/disable access control (#4771)
This commit is contained in:
@@ -132,6 +132,7 @@ namespace nvhttp {
|
||||
std::string name;
|
||||
std::string uuid;
|
||||
std::string cert;
|
||||
bool enabled = true;
|
||||
};
|
||||
|
||||
struct client_t {
|
||||
@@ -190,6 +191,7 @@ namespace nvhttp {
|
||||
named_cert_node.put("name"s, named_cert.name);
|
||||
named_cert_node.put("cert"s, named_cert.cert);
|
||||
named_cert_node.put("uuid"s, named_cert.uuid);
|
||||
named_cert_node.put("enabled"s, named_cert.enabled);
|
||||
named_cert_nodes.push_back(std::make_pair(""s, named_cert_node));
|
||||
}
|
||||
root.add_child("root.named_devices"s, named_cert_nodes);
|
||||
@@ -253,6 +255,7 @@ namespace nvhttp {
|
||||
named_cert.name = el.get_child("name").get_value<std::string>();
|
||||
named_cert.cert = el.get_child("cert").get_value<std::string>();
|
||||
named_cert.uuid = el.get_child("uuid").get_value<std::string>();
|
||||
named_cert.enabled = el.get<bool>("enabled", true);
|
||||
client.named_devices.emplace_back(named_cert);
|
||||
}
|
||||
}
|
||||
@@ -777,6 +780,7 @@ namespace nvhttp {
|
||||
nlohmann::json named_cert_node;
|
||||
named_cert_node["name"] = named_cert.name;
|
||||
named_cert_node["uuid"] = named_cert.uuid;
|
||||
named_cert_node["enabled"] = named_cert.enabled;
|
||||
named_cert_nodes.push_back(named_cert_node);
|
||||
}
|
||||
|
||||
@@ -1056,6 +1060,8 @@ namespace nvhttp {
|
||||
conf_intern.servercert = cert;
|
||||
}
|
||||
|
||||
bool is_client_enabled(const std::string_view cert_pem);
|
||||
|
||||
void start() {
|
||||
platf::set_thread_name("nvhttp");
|
||||
auto shutdown_event = mail::man->event<bool>(mail::shutdown);
|
||||
@@ -1124,6 +1130,13 @@ namespace nvhttp {
|
||||
return verified;
|
||||
}
|
||||
|
||||
// Check if this client is enabled
|
||||
auto pem = crypto::pem(x509);
|
||||
if (!is_client_enabled(pem)) {
|
||||
BOOST_LOG(info) << "Client is disabled -- denied"sv;
|
||||
return verified;
|
||||
}
|
||||
|
||||
verified = 1;
|
||||
|
||||
return verified;
|
||||
@@ -1225,4 +1238,26 @@ namespace nvhttp {
|
||||
load_state();
|
||||
return removed;
|
||||
}
|
||||
|
||||
bool set_client_enabled(const std::string_view uuid, bool enabled) {
|
||||
client_t &client = client_root;
|
||||
for (auto &named_cert : client.named_devices) {
|
||||
if (named_cert.uuid == uuid) {
|
||||
named_cert.enabled = enabled;
|
||||
save_state();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool is_client_enabled(const std::string_view cert_pem) {
|
||||
const client_t &client = client_root;
|
||||
for (const auto &named_cert : client.named_devices) {
|
||||
if (named_cert.cert == cert_pem) {
|
||||
return named_cert.enabled;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
} // namespace nvhttp
|
||||
|
||||
Reference in New Issue
Block a user