handle more edge case drama
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 16 Aug 2024 17:00:47 +0000 (19:00 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 16 Aug 2024 17:00:47 +0000 (19:00 +0200)
music_assistant/server/controllers/config.py

index 5a24442cd5cc0fe85dadc9d679a5a28d4da53ed8..700002a26fa79c3a989769e07463167c77afa368 100644 (file)
@@ -35,6 +35,7 @@ from music_assistant.constants import (
     CONF_SERVER_ID,
     CONFIGURABLE_CORE_CONTROLLERS,
     ENCRYPT_SUFFIX,
+    SECURE_STRING_SUBSTITUTE,
 )
 from music_assistant.server.helpers.api import api_command
 from music_assistant.server.helpers.util import load_provider_module
@@ -239,6 +240,16 @@ class ConfigController:
             raise KeyError(msg)
         if values is None:
             values = self.get(f"{CONF_PROVIDERS}/{instance_id}/values", {}) if instance_id else {}
+
+        # handle (edge) case where encrypted values are passed along
+        for key, value in values.items():
+            if not isinstance(value, str):
+                continue
+            if value == SECURE_STRING_SUBSTITUTE:
+                values[key] = value = self.get(f"{CONF_PROVIDERS}/{instance_id}/values/{key}", None)  # noqa: PLW2901
+            if value.startswith(ENCRYPT_SUFFIX):
+                values[key] = self.decrypt_string(value)
+
         return (
             await prov_mod.get_config_entries(
                 self.mass, instance_id=instance_id, action=action, values=values
@@ -304,7 +315,7 @@ class ConfigController:
     ) -> None:
         """Set single ProviderConfig value."""
         config = await self.get_provider_config(instance_id)
-        config.update({**config.to_raw(), key: value})
+        config.update({key: value})
         config.validate()
         conf_key = f"{CONF_PROVIDERS}/{instance_id}/values/{key}"
         self.set(conf_key, config.get_value(key))