mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-04 22:22:00 -07:00
Permission Manager: add permission management for screencopy (#9930)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user