def _create_spotify_user(self, expired): offset = -1000 if expired else 1000 expires = int(time.time()) + offset db_oauth.save_token(user_id=self.user['id'], service=ExternalServiceType.SPOTIFY, access_token='old-token', refresh_token='old-refresh-token', token_expires_ts=expires, record_listens=False, scopes=['user-read-recently-played', 'some-other-permission'])
def test_spotify_token_access(self): db_oauth.save_token(user_id=self.user.id, service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh', token_expires_ts=int(time.time()) + 1000, record_listens=True, scopes=['user-read-recently-played', 'streaming']) self.temporary_login(self.user.login_id) response = self.client.get( url_for('user.profile', user_name=self.user.musicbrainz_id)) self.assert200(response) props = ujson.loads(self.get_context_variable('props')) self.assertDictEqual( props['spotify'], { 'access_token': 'token', 'permission': ['user-read-recently-played', 'streaming'], }) response = self.client.get( url_for('user.profile', user_name=self.weirduser.musicbrainz_id)) self.assert200(response) props = ujson.loads(self.get_context_variable('props')) self.assertDictEqual( props['spotify'], { 'access_token': 'token', 'permission': ['user-read-recently-played', 'streaming'], })
def setUp(self): super(SpotifyReaderTestCase, self).setUp() external_service_oauth.save_token(user_id=self.user['id'], service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh', token_expires_ts=int(time.time()) + 3000, record_listens=True, scopes=['user-read-recently-played'])
def add_new_user(self, user_id: int, token: dict): external_service_oauth.save_token(user_id=user_id, service=self.service, access_token=token["access_token"], refresh_token=token["refresh_token"], token_expires_ts=int( token["expires_at"]), record_listens=False, scopes=token["scope"])
def add_new_user(self, user_id: int, token: dict) -> bool: expires_at = int(time.time()) + token['expires_in'] external_service_oauth.save_token(user_id=user_id, service=self.service, access_token=token["access_token"], refresh_token=token["refresh_token"], token_expires_ts=expires_at, record_listens=False, scopes=CRITIQUEBRAINZ_SCOPES) return True
def test_spotify_token_access_no_login(self): db_oauth.save_token(user_id=self.user.id, service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh', token_expires_ts=int(time.time()) + 1000, record_listens=True, scopes=['user-read-recently-played', 'streaming']) response = self.client.get(url_for('user.profile', user_name=self.user.musicbrainz_id)) self.assert200(response) self.assertTemplateUsed('user/profile.html') props = ujson.loads(self.get_context_variable("global_props")) self.assertDictEqual(props['spotify'], {})
def test_create_oauth(self): db_user.create(2, 'spotify') db_oauth.save_token(user_id=2, service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh_token', token_expires_ts=int(time.time()), record_listens=True, scopes=['user-read-recently-played']) user = db_oauth.get_token(2, ExternalServiceType.SPOTIFY) self.assertEqual('token', user['access_token'])
def setUp(self): super(OAuthDatabaseTestCase, self).setUp() db_user.create(1, 'testspotifyuser') self.user = db_user.get(1) db_oauth.save_token(user_id=self.user['id'], service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh_token', token_expires_ts=int(time.time()), record_listens=True, scopes=['user-read-recently-played'])
def setUp(self): super(ConvertListensTestCase, self).setUp() self.user = db_user.get_or_create(1, 'testuserpleaseignore') self.DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') db_oauth.save_token(user_id=self.user['id'], service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh', token_expires_ts=int(time.time()) + 1000, record_listens=True, scopes=['user-read-recently-played'])
def test_delete_when_spotify_import_activated(self): user_id = db_user.create(11, 'kishore') user = db_user.get(user_id) self.assertIsNotNone(user) db_oauth.save_token(user_id, ExternalServiceType.SPOTIFY, 'user token', 'refresh token', 0, True, ['user-read-recently-played']) db_user.delete(user_id) user = db_user.get(user_id) self.assertIsNone(user) token = db_oauth.get_token(user_id, ExternalServiceType.SPOTIFY) self.assertIsNone(token)
def test_create_oauth_multiple(self): """ Test saving the token again for a given service and user_id overwrites existing one without crash. """ # one time already saved in db by setup method # second time here db_oauth.save_token(user_id=self.user['id'], service=ExternalServiceType.SPOTIFY, access_token='new_token', refresh_token='refresh_token', token_expires_ts=int(time.time()), record_listens=True, scopes=['user-read-recently-played']) user = db_oauth.get_token(self.user['id'], ExternalServiceType.SPOTIFY) self.assertEqual(user['access_token'], 'new_token')
def add_new_user(self, user_id: int, token: dict) -> bool: # A missing refresh token implies that the user's access token was not revoked # using Google OAuth revoke endpoint when the user had disconnected from LB the # previous time. We try to revoke the new issued token and ask the user to # authenticate again so that we receive the refresh token as well. if "refresh_token" not in token: self._revoke_token(user_id, token["access_token"]) return False else: external_service_oauth.save_token(user_id=user_id, service=self.service, access_token=token["access_token"], refresh_token=token["refresh_token"], token_expires_ts=int(token["expires_at"]), record_listens=False, scopes=token["scope"]) return True
def test_get_active_users_to_process(self): db_user.create(2, 'newspotifyuser') db_oauth.save_token( user_id=2, service=ExternalServiceType.SPOTIFY, access_token='token', refresh_token='refresh_token', token_expires_ts=int(time.time()), record_listens=True, scopes=['user-read-recently-played'] ) users = db_spotify.get_active_users_to_process() self.assertEqual(len(users), 2) self.assertEqual(users[0]['user_id'], 1) self.assertEqual(users[0]['musicbrainz_row_id'], 1) self.assertEqual(users[1]['user_id'], 2) self.assertEqual(users[1]['musicbrainz_row_id'], 2) # check order, the users should be sorted by latest_listened_at timestamp db_user.create(3, 'newnewspotifyuser') db_oauth.save_token( user_id=3, service=ExternalServiceType.SPOTIFY, access_token='tokentoken', refresh_token='newrefresh_token', token_expires_ts=int(time.time()), record_listens=True, scopes=['user-read-recently-played'] ) t = int(time.time()) db_import.update_latest_listened_at(2, ExternalServiceType.SPOTIFY, t + 20) db_import.update_latest_listened_at(1, ExternalServiceType.SPOTIFY, t + 10) users = db_spotify.get_active_users_to_process() self.assertEqual(len(users), 3) self.assertEqual(users[0]['user_id'], 2) self.assertEqual(users[1]['user_id'], 1) self.assertEqual(users[2]['user_id'], 3) db_import.update_import_status(2, ExternalServiceType.SPOTIFY, 'something broke') db_import.update_import_status(3, ExternalServiceType.SPOTIFY, 'oops.') users = db_spotify.get_active_users_to_process() self.assertEqual(len(users), 1) self.assertEqual(users[0]['user_id'], 1)
def add_new_user(self, user_id: int, token: dict): """Create a spotify row for a user based on OAuth access tokens Args: user_id: A flask auth `current_user.id` token: A spotipy access token from SpotifyOAuth.get_access_token """ access_token = token['access_token'] refresh_token = token['refresh_token'] expires_at = int(time.time()) + token['expires_in'] scopes = token['scope'].split() active = SPOTIFY_IMPORT_PERMISSIONS[ 0] in scopes and SPOTIFY_IMPORT_PERMISSIONS[1] in scopes external_service_oauth.save_token(user_id=user_id, service=self.service, access_token=access_token, refresh_token=refresh_token, token_expires_ts=expires_at, record_listens=active, scopes=scopes)