Client.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. /*
  2. * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibCore/Promise.h>
  8. #include <LibCore/StandardPaths.h>
  9. #include <LibIPC/ConnectionToServer.h>
  10. #include <Userland/Services/ConfigServer/ConfigClientEndpoint.h>
  11. #include <Userland/Services/ConfigServer/ConfigServerEndpoint.h>
  12. namespace Config {
  13. class Client final
  14. : public IPC::ConnectionToServer<ConfigClientEndpoint, ConfigServerEndpoint>
  15. , public ConfigClientEndpoint {
  16. IPC_CLIENT_CONNECTION(Client, "/tmp/session/%sid/portal/config"sv)
  17. public:
  18. /// Permissive mode makes reads and writes to non-pledged domains into no-ops instead of client misbehavior errors.
  19. void enable_permissive_mode();
  20. void pledge_domains(Vector<ByteString> const&);
  21. void monitor_domain(ByteString const&);
  22. Vector<ByteString> list_groups(StringView domain);
  23. Vector<ByteString> list_keys(StringView domain, StringView group);
  24. ByteString read_string(StringView domain, StringView group, StringView key, StringView fallback);
  25. i32 read_i32(StringView domain, StringView group, StringView key, i32 fallback);
  26. u32 read_u32(StringView domain, StringView group, StringView key, u32 fallback);
  27. bool read_bool(StringView domain, StringView group, StringView key, bool fallback);
  28. void write_string(StringView domain, StringView group, StringView key, StringView value);
  29. void write_i32(StringView domain, StringView group, StringView key, i32 value);
  30. void write_u32(StringView domain, StringView group, StringView key, u32 value);
  31. void write_bool(StringView domain, StringView group, StringView key, bool value);
  32. void remove_key(StringView domain, StringView group, StringView key);
  33. void remove_group(StringView domain, StringView group);
  34. void add_group(StringView domain, StringView group);
  35. static Client& the();
  36. private:
  37. explicit Client(NonnullOwnPtr<Core::LocalSocket> socket)
  38. : IPC::ConnectionToServer<ConfigClientEndpoint, ConfigServerEndpoint>(*this, move(socket))
  39. {
  40. }
  41. void notify_changed_string_value(ByteString const& domain, ByteString const& group, ByteString const& key, ByteString const& value) override;
  42. void notify_changed_i32_value(ByteString const& domain, ByteString const& group, ByteString const& key, i32 value) override;
  43. void notify_changed_u32_value(ByteString const& domain, ByteString const& group, ByteString const& key, u32 value) override;
  44. void notify_changed_bool_value(ByteString const& domain, ByteString const& group, ByteString const& key, bool value) override;
  45. void notify_removed_key(ByteString const& domain, ByteString const& group, ByteString const& key) override;
  46. void notify_removed_group(ByteString const& domain, ByteString const& group) override;
  47. void notify_added_group(ByteString const& domain, ByteString const& group) override;
  48. };
  49. inline Vector<ByteString> list_groups(StringView domain)
  50. {
  51. return Client::the().list_groups(domain);
  52. }
  53. inline Vector<ByteString> list_keys(StringView domain, StringView group)
  54. {
  55. return Client::the().list_keys(domain, group);
  56. }
  57. inline ByteString read_string(StringView domain, StringView group, StringView key, StringView fallback = {})
  58. {
  59. return Client::the().read_string(domain, group, key, fallback);
  60. }
  61. inline i32 read_i32(StringView domain, StringView group, StringView key, i32 fallback = 0)
  62. {
  63. return Client::the().read_i32(domain, group, key, fallback);
  64. }
  65. inline u32 read_u32(StringView domain, StringView group, StringView key, u32 fallback = 0)
  66. {
  67. return Client::the().read_u32(domain, group, key, fallback);
  68. }
  69. inline bool read_bool(StringView domain, StringView group, StringView key, bool fallback = false)
  70. {
  71. return Client::the().read_bool(domain, group, key, fallback);
  72. }
  73. inline void write_string(StringView domain, StringView group, StringView key, StringView value)
  74. {
  75. Client::the().write_string(domain, group, key, value);
  76. }
  77. inline void write_i32(StringView domain, StringView group, StringView key, i32 value)
  78. {
  79. Client::the().write_i32(domain, group, key, value);
  80. }
  81. inline void write_u32(StringView domain, StringView group, StringView key, u32 value)
  82. {
  83. Client::the().write_u32(domain, group, key, value);
  84. }
  85. inline void write_bool(StringView domain, StringView group, StringView key, bool value)
  86. {
  87. Client::the().write_bool(domain, group, key, value);
  88. }
  89. inline void remove_key(StringView domain, StringView group, StringView key)
  90. {
  91. Client::the().remove_key(domain, group, key);
  92. }
  93. inline void remove_group(StringView domain, StringView group)
  94. {
  95. Client::the().remove_group(domain, group);
  96. }
  97. inline void add_group(StringView domain, StringView group)
  98. {
  99. Client::the().add_group(domain, group);
  100. }
  101. inline void enable_permissive_mode()
  102. {
  103. Client::the().enable_permissive_mode();
  104. }
  105. inline void pledge_domains(Vector<ByteString> const& domains)
  106. {
  107. Client::the().pledge_domains(domains);
  108. }
  109. inline void pledge_domain(ByteString const& domain)
  110. {
  111. Client::the().pledge_domains({ domain });
  112. }
  113. inline void monitor_domain(ByteString const& domain)
  114. {
  115. Client::the().monitor_domain(domain);
  116. }
  117. }