From 3f9a142bf8616a34c0f2e6cac24cfa5ea7c0df3d Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 27 Mar 2022 00:13:23 +0100
Subject: [PATCH] use oauth to allow login without browser

---
 SpotifyAutoPlaylistCreator.py        | 22 ++++++++++++++++------
 config/settings-creator-example.json |  3 ++-
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/SpotifyAutoPlaylistCreator.py b/SpotifyAutoPlaylistCreator.py
index 4b38952..e0630dc 100644
--- a/SpotifyAutoPlaylistCreator.py
+++ b/SpotifyAutoPlaylistCreator.py
@@ -3,27 +3,36 @@ from typing import Dict, List
 
 import spotipy
 from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger
-from spotipy.oauth2 import SpotifyPKCE
+from spotipy.oauth2 import SpotifyOAuth
 
 LOG_FORMAT = '[%(levelname)-7s] - %(asctime)s - %(message)s'
 LOGGER = DefaultLogger().create_logger_if_not_exists('SpotifyAutoPlaylistCreator', logFormat=LOG_FORMAT)
 
 
 class SpotifyAutoPlaylistCreator:
-    def __init__(self, clientID: str, clientSecret: str, playlistInfo: List[Dict[str, str]],
-                 destinationPlaylistInfo: Dict[str, str], numberOfTracks: int, redirectUrl: str):
+    def __init__(self, clientID: str,
+                 clientSecret: str,
+                 playlistInfo: List[Dict[str, str]],
+                 destinationPlaylistInfo: Dict[str, str],
+                 numberOfTracks: int,
+                 redirectUrl: str,
+                 openBrowser: bool):
         self._clientID = clientID
         self._clientSecret = clientSecret
         self._playlistInfo = playlistInfo
         self._destinationPlaylistInfo = destinationPlaylistInfo
         self._numberOfTracks = numberOfTracks
         self._redirectUrl = redirectUrl
+        self._openBrowser = openBrowser
 
         self._spotify = self.login()
 
     def login(self) -> spotipy.Spotify:
-        client_credentials_manager = SpotifyPKCE(client_id=self._clientID, redirect_uri=self._redirectUrl,
-                                                 scope='playlist-modify-private,playlist-modify-public')
+        client_credentials_manager = SpotifyOAuth(client_id=self._clientID,
+                                                  client_secret=self._clientSecret,
+                                                  redirect_uri=self._redirectUrl,
+                                                  scope='playlist-modify-private,playlist-modify-public',
+                                                  open_browser=self._openBrowser)
         return spotipy.Spotify(client_credentials_manager=client_credentials_manager)
 
     def run(self):
@@ -101,7 +110,8 @@ if __name__ == '__main__':
                                                SETTINGS['playlists'],
                                                SETTINGS['destinationPlaylist'],
                                                SETTINGS['numberOfTracks'],
-                                               SETTINGS['redirectUrl'])
+                                               SETTINGS['redirectUrl'],
+                                               SETTINGS['openBrowser'])
 
     spotifyBackup.run()
 
diff --git a/config/settings-creator-example.json b/config/settings-creator-example.json
index 4a287ca..3b95af2 100644
--- a/config/settings-creator-example.json
+++ b/config/settings-creator-example.json
@@ -15,5 +15,6 @@
         "id": ""
     },
     "numberOfTracks": 10,
-    "redirectUrl": "http://localhost:8080"
+    "redirectUrl": "http://localhost:8080",
+    "openBrowser": false
 }
\ No newline at end of file
-- 
GitLab