diff --git a/sublime/adapters/subsonic/adapter.py b/sublime/adapters/subsonic/adapter.py
index cfbeacb..7abd9fa 100644
--- a/sublime/adapters/subsonic/adapter.py
+++ b/sublime/adapters/subsonic/adapter.py
@@ -114,7 +114,7 @@ class SubsonicAdapter(Adapter):
"salt_auth": ConfigParamDescriptor(
bool,
"Use Salt Authentication",
- default=False,
+ default=True,
advanced=True,
helptext="If toggled, Sublime Music will use salted hash tokens "
"instead of the plain password in the request urls (only supported on "
@@ -169,10 +169,40 @@ class SubsonicAdapter(Adapter):
"Double check the server address."
)
except ServerError as e:
- errors["__ping__"] = (
- "Error connecting to the server.\n"
- f"Error {e.status_code}: {str(e)}"
- )
+ if e.status_code == 41:
+ # as per subsonic api docs, description of status_code 41 is
+ # "Token authentication not supported for LDAP users." so fall
+ # back to password auth
+ config_store["salt_auth"] = False
+ logging.warn(
+ "Salted auth no supported for LDAP users, falling back to "
+ "regular password auth"
+ )
+ elif e.status_code == 10 and config_store["salt_auth"]:
+ # if salt auth is not enabled, server will return error server
+ # error with status_code 10 since it'll interpret it as a
+ # missing (password) parameter
+ try:
+ config_store["salt_auth"] = False
+ tmp_adapter = SubsonicAdapter(
+ config_store, Path(tmp_dir_name)
+ )
+ tmp_adapter._get_json(
+ tmp_adapter._make_url("ping"),
+ timeout=2,
+ is_exponential_backoff_ping=True,
+ )
+ logging.warn(
+ "Salted auth not supported, falling back to regular "
+ "password auth"
+ )
+ except ServerError:
+ config_store["salt_auth"] = True
+ else:
+ errors["__ping__"] = (
+ "Error connecting to the server.\n"
+ f"Error {e.status_code}: {str(e)}"
+ )
except Exception as e:
errors["__ping__"] = str(e)
@@ -183,7 +213,7 @@ class SubsonicAdapter(Adapter):
@staticmethod
def migrate_configuration(config_store: ConfigurationStore):
if "salt_auth" not in config_store:
- config_store["salt_auth"] = False
+ config_store["salt_auth"] = True
def __init__(self, config: ConfigurationStore, data_directory: Path):
self.data_directory = data_directory