예제 #1
0
    def auth(self):
        user_code = ''
        url = 'https://api.trakt.tv/oauth/device/code'
        postData = {'client_id': self.ClientID}
        response = requests.post(url, data=postData)
        response = json.loads(response.text)
        try:
            user_code = response['user_code']
            device = response['device_code']
            interval = int(response['interval'])
            expiry = int(response['expires_in'])
        except:
            tools.showDialog.ok(tools.addonName,
                                tools.lang(32032).encode('utf-8'))
            return

        currentTime = 0
        tools.copy2clip(user_code)
        tools.progressDialog.create(
            tools.addonName + ': ' + tools.lang(32031).encode('utf-8'),
            tools.lang(32024).encode('utf-8') +
            tools.colorString('https://trakt.tv/activate \n') +
            tools.lang(32025).encode('utf-8') + tools.colorString(user_code) +
            "\n" + tools.lang(32071).encode('utf-8'))
        tools.progressDialog.update(100)
        while currentTime < (expiry - interval):
            if tools.progressDialog.iscanceled():
                tools.progressDialog.close()
                return
            progressPercent = int(100 - ((float(currentTime) / expiry) * 100))
            tools.progressDialog.update(progressPercent)
            sleep(interval)
            postData = {
                'code': device,
                'client_id': self.ClientID,
                'client_secret': self.ClientSecret
            }
            url = 'https://api.trakt.tv/oauth/device/token'
            response = requests.post(url, data=postData)

            if '200' in str(response):
                response = json.loads(response.text)
                tools.setSetting('trakt.auth', response['access_token'])
                tools.setSetting('trakt.refresh', response['refresh_token'])
                self.headers[
                    'Authorization'] = 'Bearer %s' % response['access_token']
                username = self.get_username()
                tools.setSetting('trakt.username', username)
                tools.progressDialog.close()
                tools.showDialog.ok(tools.addonName,
                                    'Sucessfully authenticated with Trakt')
                break
            if '400' in str(response):
                pass
            else:
                tools.showDialog.ok(tools.addonName,
                                    tools.lang(32032).encode('utf-8'))
                tools.progressDialog.close()
                tools.showDialog.ok(tools.addonName,
                                    tools.lang(32033).encode('utf-8'))
예제 #2
0
    def auth(self):
        self.ClientSecret = ''
        self.ClientID = 'X245A4XAIBGVM'
        url = ("client_id=%s&new_credentials=yes" % self.ClientID)
        url = self.OauthUrl + self.DeviceCodeUrl % url
        response = json.loads(requests.get(url).text)
        tools.copy2clip(response['user_code'])
        tools.progressDialog.create(tools.lang(32023))
        tools.progressDialog.update(-1, tools.lang(32024).format(tools.colorString(
            'https://real-debrid.com/device')),
                                    tools.lang(32025).format(tools.colorString(
                                        response['user_code'])),
                                    'This code has been copied to your clipboard')
        self.OauthTimeout = int(response['expires_in'])
        self.OauthTimeStep = int(response['interval'])
        self.DeviceCode = response['device_code']

        while self.ClientSecret == '':
            self.auth_loop()

        self.token_request()

        user_information = self.get_url('user')
        if user_information['type'] != 'premium':
            tools.showDialog.ok(tools.addonName, tools.lang(40156))
예제 #3
0
    def auth(self):
        pin_url = '{}/pin/get?agent={}'.format(self.base_url, self.agent_identifier)
        resp = requests.get(pin_url).json()

        expiry = pin_ttl = int(resp['expired_in'])
        auth_complete = False
        tools.copy2clip(resp['pin'])

        tools.progressDialog.create('{} - {}'.format(tools.addonName, 'AllDebrid Auth'))
        tools.progressDialog.update(100, tools.lang(32024).format(tools.colorString(resp['base_url'])),
                                    tools.lang(32025).format(tools.colorString(
                                        resp['pin'])),
                                    'This code has been copied to your clipboard')

        # Seems the All Debrid servers need some time do something with the pin before polling
        # Polling to early will cause an invalid pin error
        time.sleep(5)

        while not auth_complete and not expiry <= 0 and not tools.progressDialog.iscanceled():

            auth_complete, expiry = self.poll_auth(resp['check_url'])
            progress_percent = 100 - int((float(pin_ttl - expiry) / pin_ttl) * 100)
            tools.progressDialog.update(progress_percent)
            time.sleep(1)

        try:tools.progressDialog.close()
        except:pass

        self.store_user_info()

        if auth_complete:
            tools.showDialog.ok(tools.addonName, 'AllDebrid {}'.format(tools.lang(32026)))
        else:
            return
예제 #4
0
    def auth(self):
        data = {'client_id': self.client_id, 'response_type': 'device_code'}
        token = requests.post('https://www.premiumize.me/token',
                              data=data).json()
        expiry = token['expires_in']
        token_ttl = token['expires_in']
        poll_again = True
        success = False
        tools.copy2clip(token['user_code'])
        tools.progressDialog.create(tools.addonName,
                                    line1=tools.lang(32024).format(
                                        tools.colorString(
                                            token['verification_uri'])),
                                    line2=tools.lang(32025).format(
                                        tools.colorString(token['user_code'])))
        tools.progressDialog.update(0)

        while poll_again and not token_ttl <= 0 and not tools.progressDialog.iscanceled(
        ):
            poll_again, success = self.poll_token(token['device_code'])
            progress_percent = 100 - int((float(
                (expiry - token_ttl) / expiry) * 100))
            tools.progressDialog.update(progress_percent)
            time.sleep(token['interval'])
            token_ttl -= int(token['interval'])

        tools.progressDialog.close()

        if success:
            tools.showDialog.ok(tools.addonName, tools.lang(32026))
예제 #5
0
    def auth(self):
        """
        Performs OAuth with Trakt
        :return: None
        """
        self.username = None
        response = self.post("oauth/device/code",
                             data={"client_id": self.client_id})
        if not response.ok:
            xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30162))
            return
        try:
            response = response.json()
            user_code = response["user_code"]
            device = response["device_code"]
            interval = int(response["interval"])
            expiry = int(response["expires_in"])
            token_ttl = int(response["expires_in"])
        except (KeyError, ValueError):
            xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30023))
            raise

        tools.copy2clip(user_code)
        failed = False
        try:
            progress_dialog = xbmcgui.DialogProgress()
            progress_dialog.create(
                g.ADDON_NAME + ": " + g.get_language_string(30022),
                tools.create_multiline_message(
                    line1=g.get_language_string(30018).format(
                        g.color_string("https://trakt.tv/activate")),
                    line2=g.get_language_string(30019).format(
                        g.color_string(user_code)),
                    line3=g.get_language_string(30047),
                ),
            )
            progress_dialog.update(100)
            while (not failed and self.username is None and not token_ttl <= 0
                   and not progress_dialog.iscanceled()):
                xbmc.sleep(1000)
                if token_ttl % interval == 0:
                    failed = self._auth_poll(device)
                progress_percent = int(float((token_ttl * 100) / expiry))
                progress_dialog.update(progress_percent)
                token_ttl -= 1

            progress_dialog.close()
        finally:
            del progress_dialog

        if not failed:
            xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30273))
            self._sync_trakt_user_data_if_required()
예제 #6
0
    def auth(self):
        url = "client_id={}&new_credentials=yes".format(self.client_id)
        url = self.oauth_url + self.device_code_url.format(url)
        response = self.session.get(url).json()
        tools.copy2clip(response["user_code"])
        success = False
        try:
            progress_dialog = xbmcgui.DialogProgress()
            progress_dialog.create(
                g.ADDON_NAME + ": " + g.get_language_string(30017),
                tools.create_multiline_message(
                    line1=g.get_language_string(30018).format(
                        g.color_string("https://real-debrid.com/device")
                    ),
                    line2=g.get_language_string(30019).format(
                        g.color_string(response["user_code"])
                    ),
                    line3=g.get_language_string(30047),
                ),
            )
            self.oauth_timeout = int(response["expires_in"])
            token_ttl = int(response["expires_in"])
            self.oauth_time_step = int(response["interval"])
            self.device_code = response["device_code"]
            progress_dialog.update(100)
            while (
                not success
                and not token_ttl <= 0
                and not progress_dialog.iscanceled()
            ):
                xbmc.sleep(1000)
                if token_ttl % self.oauth_time_step == 0:
                    success = self._auth_loop()
                progress_percent = int(float((token_ttl * 100) / self.oauth_timeout))
                progress_dialog.update(progress_percent)
                token_ttl -= 1
            progress_dialog.close()
        finally:
            del progress_dialog

        if success:
            self.token_request()

            user_information = self.get_url("user")
            if user_information["type"] != "premium":
                xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30194))
예제 #7
0
    def auth(self):
        """
        Initiates and performs OAuth process
        :return: None
        :rtype: None
        """
        data = {"client_id": self.client_id, "response_type": "device_code"}
        token = self.session.post("https://www.premiumize.me/token", data=data).json()
        expiry = int(token["expires_in"])
        token_ttl = int(token["expires_in"])
        interval = int(token["interval"])
        poll_again = True
        success = False
        tools.copy2clip(token["user_code"])
        try:
            progress_dialog = xbmcgui.DialogProgress()
            progress_dialog.create(
                g.ADDON_NAME + ": " + g.get_language_string(30349),
                tools.create_multiline_message(
                    line1=g.get_language_string(30018).format(
                        g.color_string(token["verification_uri"])
                    ),
                    line2=g.get_language_string(30019).format(
                        g.color_string(token["user_code"])
                    ),
                    line3=g.get_language_string(30047),
                ),
            )
            progress_dialog.update(100)

            while poll_again and not token_ttl <= 0 and not progress_dialog.iscanceled():
                xbmc.sleep(1000)
                if token_ttl % interval == 0:
                    poll_again, success = self._poll_token(token["device_code"])
                progress_percent = int(float((token_ttl * 100) / expiry))
                progress_dialog.update(progress_percent)
                token_ttl -= 1

            progress_dialog.close()
        finally:
            del progress_dialog

        if success:
            xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30020))
예제 #8
0
    def auth(self):
        resp = self.get_json("pin/get", reauth=True)
        expiry = pin_ttl = int(resp["expires_in"])
        auth_complete = False
        tools.copy2clip(resp["pin"])
        try:
            progress_dialog = xbmcgui.DialogProgress()
            progress_dialog.create(
                g.ADDON_NAME + ": " + g.get_language_string(30334),
                tools.create_multiline_message(
                    line1=g.get_language_string(30018).format(
                        g.color_string(resp["base_url"])
                    ),
                    line2=g.get_language_string(30019).format(g.color_string(resp["pin"])),
                    line3=g.get_language_string(30047),
                ),
            )

            # Seems the All Debrid servers need some time do something with the pin before polling
            # Polling to early will cause an invalid pin error
            xbmc.sleep(5 * 1000)
            progress_dialog.update(100)
            while (
                not auth_complete
                and not expiry <= 0
                and not progress_dialog.iscanceled()
            ):
                auth_complete, expiry = self.poll_auth(check=resp["check"], pin=resp["pin"])
                progress_percent = 100 - int((float(pin_ttl - expiry) / pin_ttl) * 100)
                progress_dialog.update(progress_percent)
                xbmc.sleep(1 * 1000)

            progress_dialog.close()
            self.store_user_info()
        finally:
            del progress_dialog

        if auth_complete:
            xbmcgui.Dialog().ok(
                g.ADDON_NAME, "AllDebrid {}".format(g.get_language_string(30020))
            )
        else:
            return
예제 #9
0
 def auth(self):
     self.ClientSecret = ''
     self.ClientID = 'X245A4XAIBGVM'
     url = ("client_id=%s&new_credentials=yes" % self.ClientID)
     url = self.OauthUrl + self.DeviceCodeUrl % url
     response = json.loads(requests.get(url).text)
     tools.copy2clip(response['user_code'])
     tools.progressDialog.create(tools.lang(32023).encode('utf-8'))
     tools.progressDialog.update(
         -1,
         tools.lang(32024).encode('utf-8') +
         ' %s' % tools.colorString('https://real-debrid.com/device'),
         tools.lang(32025).encode('utf-8') +
         ' %s' % tools.colorString(response['user_code']),
         'This code has been copied to your clipboard')
     self.OauthTimeout = int(response['expires_in'])
     self.OauthTimeStep = int(response['interval'])
     self.DeviceCode = response['device_code']
     while self.ClientSecret == '':
         self.auth_loop()
     self.token_request()
예제 #10
0
    def auth(self):
        resp = self.get_json('pin/get')
        expiry = pin_ttl = int(resp['expires_in'])
        auth_complete = False
        tools.copy2clip(resp['pin'])
        tools.progressDialog.create(
            tools.addonName + ': AllDebrid Auth',
            line1=tools.getLangString(32024).format(
                tools.colorString(resp['base_url'])),
            line2=tools.getLangString(32025).format(
                tools.colorString(resp['pin'])),
            line3='This code has been copied to your clipboard')

        # Seems the All Debrid servers need some time do something with the pin before polling
        # Polling to early will cause an invalid pin error
        tools.kodi.sleep(5 * 1000)
        tools.progressDialog.update(100)
        while not auth_complete and not expiry <= 0 and not tools.progressDialog.iscanceled(
        ):
            auth_complete, expiry = self.poll_auth(check=resp['check'],
                                                   pin=resp['pin'])
            progress_percent = 100 - int(
                (float(pin_ttl - expiry) / pin_ttl) * 100)
            tools.progressDialog.update(progress_percent)
            tools.kodi.sleep(1 * 1000)
        try:
            tools.progressDialog.close()
        except:
            pass

        self.store_user_info()

        if auth_complete:
            tools.showDialog.ok(
                tools.addonName,
                'AllDebrid {}'.format(tools.getLangString(32026)))
        else:
            return
예제 #11
0
    def auth(self):

        url = 'https://api.trakt.tv/oauth/device/code'
        postData = {'client_id': self.ClientID}
        response = requests.post(url, data=postData)
        if not response.ok:
            tools.showDialog.ok(tools.addonName, tools.lang(40113))
            return
        response = json.loads(response.text)
        try:
            user_code = response['user_code']
            device = response['device_code']
            interval = int(response['interval'])
            expiry = int(response['expires_in'])
        except:
            tools.showDialog.ok(tools.addonName, tools.lang(32032))
            return
        currentTime = 0
        tools.copy2clip(user_code)
        tools.progressDialog.create(
            tools.addonName + ': ' + tools.lang(32031),
            tools.lang(32024) +
            tools.colorString('https://trakt.tv/activate \n') +
            tools.lang(32025) + tools.colorString(user_code) + "\n" +
            tools.lang(32071))
        tools.progressDialog.update(100)
        while currentTime < (expiry - interval):
            if tools.progressDialog.iscanceled():
                tools.progressDialog.close()
                return
            progressPercent = int(100 - ((float(currentTime) / expiry) * 100))
            tools.progressDialog.update(progressPercent)
            sleep(interval)
            postData = {
                'code': device,
                'client_id': self.ClientID,
                'client_secret': self.ClientSecret
            }
            url = 'https://api.trakt.tv/oauth/device/token'
            response = requests.post(url, data=postData)

            if '200' in str(response):
                response = json.loads(response.text)
                tools.setSetting('trakt.auth', response['access_token'])
                tools.setSetting('trakt.refresh', response['refresh_token'])
                self.AccessToken = response['access_token']
                self.headers = {
                    'trakt-api-version': '2',
                    'trakt-api-key': self.ClientID,
                    'content-type': 'application/json'
                }

                if not self.AccessToken is '':
                    self.headers[
                        'Authorization'] = 'Bearer %s' % self.AccessToken
                username = self.get_username()
                tools.setSetting('trakt.username', username)
                tools.progressDialog.close()
                tools.showDialog.ok(tools.addonName,
                                    'Sucessfully authenticated with Trakt')

                # Synchronise Trakt Database with new user
                from resources.lib.modules.trakt_sync import activities
                database = activities.TraktSyncDatabase()
                if database.activites['trakt_username'] != username:
                    database.clear_user_information()
                    database.flush_activities(False)
                    database._build_sync_activities()
                    database.set_trakt_user(username)
                    tools.execute(
                        'RunPlugin("plugin://plugin.video.%s/?action=syncTraktActivities")'
                        % tools.addonName.lower())
                break
            if '400' in str(response):
                pass
            else:
                tools.progressDialog.close()
                tools.showDialog.ok(tools.addonName, tools.lang(32032))
                break