Replies: 1 comment
|
Dear homepage user, thanks for opening this discussion! Please ensure you add the output from the troubleshooting guide steps, the support template asks for those details because they usually make it possible to understand the problem without guessing. Please update the discussion with the relevant troubleshooting output, configuration, logs, and browser console details where applicable: https://gethomepage.dev/troubleshooting/. Thank you! |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
The Navidrome widget builds its Subsonic API request by raw string interpolation without percent-encoding query parameters. If the Subsonic auth salt contains a
+, Go'snet/urldecodes it as a space server-side, so themd5(password + salt)check never matches and every request returns Subsonic error 40 ("Wrong username or password") even with correct credentials.Repro
With user
demo, token =md5(password + salt), saltNbI+rOjamb59hn3r, against any Navidrome instance:The widget emits exactly the failing form:
src/widgets/navidrome/widget.jsdefines"{url}/rest/{endpoint}?u={user}&t={token}&s={salt}&v=1.16.1&c=homepage&f=json", andformatApiCall(src/utils/proxy/api-helpers.js) substitutes values verbatim with no encoding beforegenericProxyHandlerfetches it. This bites anyone generating salts withopenssl rand -base64.Expected: widget authenticates with any RFC 3986-safe salt.
Actual: error 40 unless the salt happens to contain no
+(or other reserved characters).Root cause & references
Suggested fix
Encode substituted query values — minimally for the Navidrome widget (e.g., a small proxy handler assembling the URL with
URLSearchParams, consistent with existing per-widget proxy handlers), or centrally in the template substitution if feasible. Happy to submit a PR if maintainers agree on the approach.All reactions