From 7b271f662c62b78e176cf49eed6e139538fff185 Mon Sep 17 00:00:00 2001
From: Jeremy Whiting <jeremy.whiting@collabora.com>
Date: Fri, 18 Mar 2022 11:43:18 -0600
Subject: [PATCH] Implement properties.json request.

---
 src/steamos-devkit-service.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/steamos-devkit-service.py b/src/steamos-devkit-service.py
index 2f50c7f..749e417 100644
--- a/src/steamos-devkit-service.py
+++ b/src/steamos-devkit-service.py
@@ -43,18 +43,27 @@ entry_point = "devkit-1"
 # root until config is loaded and told otherwise, etc.
 entry_point_user = "root"
 device_users = []
-properties = {}
+properties = {"txtvers": 1,
+              "login": entry_point_user,
+              "settings": "",
+              "devkit1": [
+                  entry_point
+              ]}
 machine_name = ''
 hook_dirs = []
 use_default_hooks = True
 
 global_config = configparser.ConfigParser()
+# Use str form to preserve case
+global_config.optionxform = str
 global_config.read(["/etc/steamos-devkit/steamos-devkit.conf", "/usr/share/steamos-devkit/steamos-devkit.conf"])
 
 user_config_path = os.path.join(os.path.expanduser('~'), '.config', PACKAGE, PACKAGE + '.conf')
 print("Trying to read user config from {}".format(user_config_path))
 
 user_config = configparser.ConfigParser()
+# Use str form to preserve case
+user_config.optionxform = str
 user_config.read(user_config_path)
 
 def find_hook(hook_dirs, use_default_hooks, name):
@@ -120,7 +129,7 @@ class DevkitHandler(BaseHTTPRequestHandler):
 
         elif (self.path == "/properties.json"):
             self._send_headers(200, "application/json")
-            self.wfile.write(json.dumps(properties).encode())
+            self.wfile.write(json.dumps(properties, indent=2).encode())
             return
         
         else:
@@ -152,6 +161,7 @@ class DevkitService:
     def __init__(self):
         global entry_point_user
         global device_users
+        global properties
 
         self.port = SERVICE_PORT
         # TODO: Change to sanitize_machine_name if needed
@@ -173,6 +183,8 @@ class DevkitService:
             if 'Port' in settings:
                 self.port = int(settings["Port"])
 
+        properties["settings"] = json.dumps(self.settings)
+
         # Parse users from configs
         if os.geteuid() == 0:
             # Running as root, maybe warn?
@@ -193,6 +205,7 @@ class DevkitService:
         # Otherwise entry_point_user needs to be root to be able to switch between users
         if len(device_users) == 1:
             entry_point_user = device_users[0]
+            properties["login"] = entry_point_user
 
         self.httpd = socketserver.TCPServer(("", self.port), DevkitHandler, bind_and_activate=False)
         print("serving at port: {}".format(self.port))
-- 
GitLab