diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-04-08 19:39:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-08 19:39:53 +0200 |
| commit | 260d8e1f71b1dc6f3f354747debdc87d96b9e99f (patch) | |
| tree | 9e13cd67a6b08e356a8773b093a9c8d9fdf645b0 /src/config/ConfigManager.cpp | |
| parent | 642f394eb3f8fd99a51f4c8279497c458c40ba65 (diff) | |
Permission Manager: add permission management for screencopy (#9930)
Diffstat (limited to 'src/config/ConfigManager.cpp')
| -rw-r--r-- | src/config/ConfigManager.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 0d12e29c..6399372c 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -22,6 +22,7 @@ #include "../managers/eventLoop/EventLoopManager.hpp" #include "../managers/LayoutManager.hpp" #include "../managers/EventManager.hpp" +#include "../managers/permissions/DynamicPermissionManager.hpp" #include "../debug/HyprNotificationOverlay.hpp" #include "../plugins/PluginSystem.hpp" @@ -374,6 +375,18 @@ static Hyprlang::CParseResult handlePlugin(const char* c, const char* v) { return result; } +static Hyprlang::CParseResult handlePermission(const char* c, const char* v) { + const std::string VALUE = v; + const std::string COMMAND = c; + + const auto RESULT = g_pConfigManager->handlePermission(COMMAND, VALUE); + + Hyprlang::CParseResult result; + if (RESULT.has_value()) + result.setError(RESULT.value().c_str()); + return result; +} + void CConfigManager::registerConfigVar(const char* name, const Hyprlang::INT& val) { m_configValueNumber++; m_pConfig->addConfigValue(name, val); @@ -703,6 +716,7 @@ CConfigManager::CConfigManager() { registerConfigVar("ecosystem:no_update_news", Hyprlang::INT{0}); registerConfigVar("ecosystem:no_donation_nag", Hyprlang::INT{0}); + registerConfigVar("ecosystem:enforce_permissions", Hyprlang::INT{0}); registerConfigVar("experimental:xx_color_management_v4", Hyprlang::INT{0}); @@ -764,6 +778,7 @@ CConfigManager::CConfigManager() { m_pConfig->registerHandler(&::handleSubmap, "submap", {false}); m_pConfig->registerHandler(&::handleBlurLS, "blurls", {false}); m_pConfig->registerHandler(&::handlePlugin, "plugin", {false}); + m_pConfig->registerHandler(&::handlePermission, "permission", {false}); m_pConfig->registerHandler(&::handleEnv, "env", {true}); // pluginza @@ -946,6 +961,8 @@ std::optional<std::string> CConfigManager::resetHLConfig() { m_vFailedPluginConfigValues.clear(); finalExecRequests.clear(); + g_pDynamicPermissionManager->clearConfigPermissions(); + // paths m_configPaths.clear(); std::string mainConfigPath = getMainConfigPath(); @@ -2831,6 +2848,32 @@ std::optional<std::string> CConfigManager::handlePlugin(const std::string& comma return {}; } +std::optional<std::string> CConfigManager::handlePermission(const std::string& command, const std::string& value) { + CVarList data(value); + + eDynamicPermissionType type = PERMISSION_TYPE_UNKNOWN; + eDynamicPermissionAllowMode mode = PERMISSION_RULE_ALLOW_MODE_UNKNOWN; + + if (data[1] == "screencopy") + type = PERMISSION_TYPE_SCREENCOPY; + + if (data[2] == "ask") + mode = PERMISSION_RULE_ALLOW_MODE_ASK; + else if (data[2] == "allow") + mode = PERMISSION_RULE_ALLOW_MODE_ALLOW; + else if (data[2] == "deny") + mode = PERMISSION_RULE_ALLOW_MODE_DENY; + + if (type == PERMISSION_TYPE_UNKNOWN) + return "unknown permission type"; + if (mode == PERMISSION_RULE_ALLOW_MODE_UNKNOWN) + return "unknown permission allow mode"; + + g_pDynamicPermissionManager->addConfigPermissionRule(data[0], type, mode); + + return {}; +} + const std::vector<SConfigOptionDescription>& CConfigManager::getAllDescriptions() { return CONFIG_OPTIONS; } |
