summaryrefslogtreecommitdiff
path: root/backend/plugin.py
diff options
context:
space:
mode:
authorPhilipp Richter <richterphilipp.pops@gmail.com>2023-01-23 00:54:05 +0000
committerGitHub <noreply@github.com>2023-01-22 16:54:05 -0800
commitc2b76d9099ac551f829f9cec821c23a9aff6b018 (patch)
tree30102595e2f19779cc81a6e146e157d5a17e1211 /backend/plugin.py
parentc05e8f9ae0a38a58e73e98589133e9140eb8f46a (diff)
downloaddecky-loader-c2b76d9099ac551f829f9cec821c23a9aff6b018.tar.gz
decky-loader-c2b76d9099ac551f829f9cec821c23a9aff6b018.zip
Expose useful env vars to plugin processes (#349)v2.5.2-pre1v2.5.2
* recommended paths for storing data * improve helper functions
Diffstat (limited to 'backend/plugin.py')
-rw-r--r--backend/plugin.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/backend/plugin.py b/backend/plugin.py
index e21d5bde..df0efe16 100644
--- a/backend/plugin.py
+++ b/backend/plugin.py
@@ -7,10 +7,12 @@ from importlib.util import module_from_spec, spec_from_file_location
from json import dumps, load, loads
from logging import getLogger
from traceback import format_exc
-from os import path, setgid, setuid
+from os import path, setgid, setuid, environ
from signal import SIGINT, signal
from sys import exit
from time import time
+import helpers
+from updater import Updater
multiprocessing.set_start_method("fork")
@@ -19,6 +21,7 @@ BUFFER_LIMIT = 2 ** 20 # 1 MiB
class PluginWrapper:
def __init__(self, file, plugin_directory, plugin_path) -> None:
self.file = file
+ self.plugin_path = plugin_path
self.plugin_directory = plugin_directory
self.reader = None
self.writer = None
@@ -56,8 +59,24 @@ class PluginWrapper:
set_event_loop(new_event_loop())
if self.passive:
return
- setgid(0 if "root" in self.flags else 1000)
- setuid(0 if "root" in self.flags else 1000)
+ setgid(0 if "root" in self.flags else helpers.get_user_group_id())
+ setuid(0 if "root" in self.flags else helpers.get_user_id())
+ # export a bunch of environment variables to help plugin developers
+ environ["HOME"] = helpers.get_home_path("root" if "root" in self.flags else helpers.get_user())
+ environ["USER"] = "root" if "root" in self.flags else helpers.get_user()
+ environ["DECKY_VERSION"] = helpers.get_loader_version()
+ environ["DECKY_USER"] = helpers.get_user()
+ environ["DECKY_HOME"] = helpers.get_homebrew_path()
+ environ["DECKY_PLUGIN_SETTINGS_DIR"] = path.join(environ["DECKY_HOME"], "settings", self.plugin_directory)
+ helpers.mkdir_as_user(environ["DECKY_PLUGIN_SETTINGS_DIR"])
+ environ["DECKY_PLUGIN_RUNTIME_DIR"] = path.join(environ["DECKY_HOME"], "data", self.plugin_directory)
+ helpers.mkdir_as_user(environ["DECKY_PLUGIN_RUNTIME_DIR"])
+ environ["DECKY_PLUGIN_LOG_DIR"] = path.join(environ["DECKY_HOME"], "logs", self.plugin_directory)
+ helpers.mkdir_as_user(environ["DECKY_PLUGIN_LOG_DIR"])
+ environ["DECKY_PLUGIN_DIR"] = path.join(self.plugin_path, self.plugin_directory)
+ environ["DECKY_PLUGIN_NAME"] = self.name
+ environ["DECKY_PLUGIN_VERSION"] = self.version
+ environ["DECKY_PLUGIN_AUTHOR"] = self.author
spec = spec_from_file_location("_", self.file)
module = module_from_spec(spec)
spec.loader.exec_module(module)