SpotiClub Patch v0.2.0
Some checks failed
CodeQL / Analyze (python) (push) Has been cancelled

This commit is contained in:
unknown
2025-12-18 01:11:35 +01:00
parent 8ea905e65f
commit 1bf4ec9859
2 changed files with 26 additions and 12 deletions

View File

@@ -1394,7 +1394,16 @@ class Session(Closeable, MessageListener, SubListener):
finally:
self.connection.set_timeout(0)
# If we reach here, the handshake succeeded.
# If we reach here, the handshake succeeded; derive
# the Shannon cipher keys and mark the session as
# connected.
buffer.seek(20)
with self.__auth_lock:
self.cipher_pair = CipherPair(
buffer.read(32), buffer.read(32)
)
self.__auth_lock_bool = True
self.logger.info("Connection successfully!")
return
except (ConnectionResetError, OSError, struct.error) as exc:
@@ -1426,17 +1435,18 @@ class Session(Closeable, MessageListener, SubListener):
)
time.sleep(1)
# All attempts failed: raise a clear error instead of crashing
# with a low-level struct.error.
raise RuntimeError(
"Failed to connect to Spotify access point after "
f"{max_attempts} attempts"
) from last_exc
buffer.seek(20)
with self.__auth_lock:
self.cipher_pair = CipherPair(buffer.read(32), buffer.read(32))
self.__auth_lock_bool = True
self.logger.info("Connection successfully!")
# All attempts failed: log and raise a clear, user-friendly
# error instead of crashing with a low-level struct.error.
friendly_message = (
"Failed to connect to Spotify after "
f"{max_attempts} attempts. "
"OAuth login succeeded, but connecting to the Spotify "
"access point timed out or was refused. "
"This is usually a network or firewall issue."
)
self.logger.error("%s Last error: %s", friendly_message, last_exc)
print(friendly_message)
raise RuntimeError(friendly_message) from last_exc
def content_feeder(self) -> PlayableContentFeeder:
""" """

View File

@@ -53,6 +53,8 @@ class OAuth:
def set_code(self, code):
self.__code = code
logging.info("OAuth: Callback received, attempting to connect to Spotify...")
print("OAuth: Callback received, attempting to connect to Spotify...")
def request_token(self):
if not self.__code:
@@ -97,6 +99,8 @@ class OAuth:
self.end_headers()
self.wfile.write(b"Request doesn't contain 'code'")
return
# Store the authorization code and notify the main
# process that the callback has been received.
self.server.set_code(query.get("code")[0])
self.send_response(200)
self.send_header('Content-type', 'text/html')