0.6.1: Fix Spotify OAuth scope missing user-library-read
connect.py's OAuth scope request (playlist-read-private playlist-read-collaborative) didn't match what sldl's own built-in login flow requests (same two, plus user-library-read). The narrower scope alembic granted let sldl refresh a valid access token, but Spotify then returned 403 Forbidden loading the playlist regardless of ownership, which sldl turns into an unhandled-exception crash (exit 134) instead of a clean scope error. Found by reproducing a friend's crash: his playlist was his own, connected via his own OAuth, correct redirect URI -- ruling out the ownership/ visibility explanation and pointing at the scope mismatch instead. Also: - run-playlist.sh: detect exit 134 specifically and log a pointed hint (distinguishing the Forbidden-loading-playlist case from any other unhandled sldl exception) instead of just "sldl finished with exit code 134" with no context. - README: document that anyone who connected Spotify before this version needs to click Connect Spotify again -- existing refresh tokens carry the old, narrower scope and don't upgrade themselves. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -79,6 +79,20 @@ timeout --kill-after=30s "$SLDL_TIMEOUT" \
|
||||
|| SLDL_EXIT=$?
|
||||
if [[ "$SLDL_EXIT" -eq 124 || "$SLDL_EXIT" -eq 137 ]]; then
|
||||
log "ERROR: sldl exceeded ${SLDL_TIMEOUT}s and was killed (likely a hang)"
|
||||
elif [[ "$SLDL_EXIT" -eq 134 ]]; then
|
||||
# sldl aborts (SIGABRT) on ANY unhandled .NET exception rather than failing
|
||||
# cleanly. The one case we've actually seen in the wild: a valid, freshly-
|
||||
# refreshed user token still gets 403 Forbidden loading the playlist,
|
||||
# because Spotify scopes OAuth playlist reads to what the CONNECTED account
|
||||
# can see (its own playlists, ones it collaborates on, or ones marked
|
||||
# Public) -- unlike client-credentials, which could read any public
|
||||
# playlist regardless of whose app it was. Give a pointed hint when that's
|
||||
# the visible cause; otherwise just flag that sldl crashed outright.
|
||||
if grep -q "APIException: Forbidden" "$LOG"; then
|
||||
log "ERROR: sldl crashed (exit 134) -- Spotify returned 403 loading this playlist. The connected Spotify account can't see it: make sure it's owned by, or shared/followed by, whichever account is connected via /connect/spotify, or set it to Public on Spotify."
|
||||
else
|
||||
log "ERROR: sldl crashed (exit 134, unhandled exception) -- see the log above for the exception detail"
|
||||
fi
|
||||
fi
|
||||
log "sldl finished with exit code $SLDL_EXIT"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user