1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 13:37:45 +00:00

LibCore+LibConfig+ConfigServer: Add Config::{add,remove}_group()

Plumbs synchronous calls for adding and removing group entries to
config files. This is useful for services like SystemServer which
default to group names for executable paths, and for removing all
keys at once.
This commit is contained in:
thankyouverycool 2022-09-23 09:45:05 -04:00 committed by Ali Mohammad Pur
parent 6f394d9ee2
commit c34f2e75e9
10 changed files with 97 additions and 0 deletions

View file

@ -4,4 +4,6 @@ endpoint ConfigClient
notify_changed_i32_value(String domain, String group, String key, i32 value) =|
notify_changed_bool_value(String domain, String group, String key, bool value) =|
notify_removed_key(String domain, String group, String key) =|
notify_removed_group(String domain, String group) =|
notify_added_group(String domain, String group) =|
}

View file

@ -15,4 +15,6 @@ endpoint ConfigServer
write_i32_value(String domain, String group, String key, i32 value) => ()
write_bool_value(String domain, String group, String key, bool value) => ()
remove_key_entry(String domain, String group, String key) => ()
remove_group_entry(String domain, String group) => ()
add_group_entry(String domain, String group) => ()
}

View file

@ -267,4 +267,40 @@ void ConnectionFromClient::remove_key_entry(String const& domain, String const&
});
}
void ConnectionFromClient::remove_group_entry(String const& domain, String const& group)
{
if (!validate_access(domain, group, {}))
return;
auto& config = ensure_domain_config(domain);
if (!config.has_group(group))
return;
config.remove_group(group);
m_dirty_domains.set(domain);
start_or_restart_sync_timer();
for_each_monitoring_connection(domain, this, [&domain, &group](ConnectionFromClient& connection) {
connection.async_notify_removed_group(domain, group);
});
}
void ConnectionFromClient::add_group_entry(String const& domain, String const& group)
{
if (!validate_access(domain, group, {}))
return;
auto& config = ensure_domain_config(domain);
if (config.has_group(group))
return;
config.add_group(group);
m_dirty_domains.set(domain);
start_or_restart_sync_timer();
for_each_monitoring_connection(domain, this, [&domain, &group](ConnectionFromClient& connection) {
connection.async_notify_added_group(domain, group);
});
}
}

View file

@ -36,6 +36,8 @@ private:
virtual void write_i32_value([[maybe_unused]] String const& domain, [[maybe_unused]] String const& group, [[maybe_unused]] String const& key, [[maybe_unused]] i32 value) override;
virtual void write_bool_value([[maybe_unused]] String const& domain, [[maybe_unused]] String const& group, [[maybe_unused]] String const& key, [[maybe_unused]] bool value) override;
virtual void remove_key_entry([[maybe_unused]] String const& domain, [[maybe_unused]] String const& group, [[maybe_unused]] String const& key) override;
virtual void remove_group_entry([[maybe_unused]] String const& domain, [[maybe_unused]] String const& group) override;
virtual void add_group_entry([[maybe_unused]] String const& domain, [[maybe_unused]] String const& group) override;
bool validate_access(String const& domain, String const& group, String const& key);
void sync_dirty_domains_to_disk();