예제 #1
0
 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'])
예제 #2
0
    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'],
            })
예제 #3
0
 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'])
예제 #4
0
 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"])
예제 #5
0
 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
예제 #6
0
    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'])
예제 #9
0
    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'])
예제 #10
0
    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')
예제 #12
0
 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
예제 #13
0
    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)
예제 #14
0
    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)