summaryrefslogtreecommitdiff
path: root/backend/decky_loader/plugin/plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/decky_loader/plugin/plugin.py')
-rw-r--r--backend/decky_loader/plugin/plugin.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/backend/decky_loader/plugin/plugin.py b/backend/decky_loader/plugin/plugin.py
index ba23fff9..61de4b1f 100644
--- a/backend/decky_loader/plugin/plugin.py
+++ b/backend/decky_loader/plugin/plugin.py
@@ -8,7 +8,8 @@ from traceback import format_exc
from .sandboxed_plugin import SandboxedPlugin
from .messages import MethodCallRequest, SocketMessageType
-from ..enums import PluginLoadType
+from ..enums import PluginLoadType, UserType
+from ..localplatform.localplatform import file_owner, chown, chmod, get_chown_plugin_path
from ..localplatform.localsocket import LocalSocket
from ..helpers import get_homebrew_path, mkdir_as_user
@@ -26,9 +27,12 @@ class PluginWrapper:
self.load_type = PluginLoadType.LEGACY_EVAL_IIFE.value
- json = load(open(path.join(plugin_path, plugin_directory, "plugin.json"), "r", encoding="utf-8"))
- if path.isfile(path.join(plugin_path, plugin_directory, "package.json")):
- package_json = load(open(path.join(plugin_path, plugin_directory, "package.json"), "r", encoding="utf-8"))
+ plugin_dir_path = path.join(plugin_path, plugin_directory)
+ plugin_json_path = path.join(plugin_dir_path, "plugin.json")
+
+ json = load(open(plugin_json_path, "r", encoding="utf-8"))
+ if path.isfile(path.join(plugin_dir_path, "package.json")):
+ package_json = load(open(path.join(plugin_dir_path, "package.json"), "r", encoding="utf-8"))
self.version = package_json["version"]
if ("type" in package_json and package_json["type"] == "module"):
self.load_type = PluginLoadType.ESMODULE_V1.value
@@ -42,6 +46,17 @@ class PluginWrapper:
self.log = getLogger("plugin")
+ if get_chown_plugin_path():
+ # ensure plugin folder ownership
+ if file_owner(plugin_dir_path) != UserType.EFFECTIVE_USER:
+ chown(plugin_dir_path, UserType.EFFECTIVE_USER if "root" in self.flags else UserType.HOST_USER, True)
+ chown(plugin_dir_path, UserType.EFFECTIVE_USER, False)
+ chmod(plugin_dir_path, 755, True)
+ # fix plugin.json permissions
+ if file_owner(plugin_json_path) != UserType.EFFECTIVE_USER:
+ chown(plugin_json_path, UserType.EFFECTIVE_USER, False)
+ chmod(plugin_json_path, 755, False)
+
self.sandboxed_plugin = SandboxedPlugin(self.name, self.passive, self.flags, self.file, self.plugin_directory, self.plugin_path, self.version, self.author, self.api_version)
self.proc: Process | None = None
self._socket = LocalSocket()