def auth(self): data = {'client_id': CLIENT_ID, 'response_type': 'device_code'} token = requests.post('https://www.premiumize.me/token', data=data, timeout=15).json() expiry = float(token['expires_in']) token_ttl = token['expires_in'] poll_again = True success = False progressDialog = control.progressDialog progressDialog.create( control.lang(40054), control.progress_line % (control.lang(32513) % token['verification_uri'], control.lang(32514) % token['user_code'], '')) progressDialog.update(0) while poll_again and not token_ttl <= 0 and not progressDialog.iscanceled( ): poll_again, success = self.poll_token(token['device_code']) progress_percent = 100 - int((float( (expiry - token_ttl) / expiry) * 100)) progressDialog.update(progress_percent) control.sleep(token['interval'] * 1000) token_ttl -= int(token['interval']) progressDialog.close() if success: control.notification(title=40057, message=40081, icon=pm_icon)
def poll_token(self, device_code): data = { 'client_id': CLIENT_ID, 'code': device_code, 'grant_type': 'device_code' } token = requests.post('https://www.premiumize.me/token', data=data, timeout=15).json() if 'error' in token: if token['error'] == "access_denied": control.okDialog(title='default', message=control.lang(40020)) return False, False return True, False self.token = token['access_token'] self.headers = { 'User-Agent': 'My Accounts for Kodi', 'Authorization': 'Bearer %s' % self.token } control.sleep(500) account_info = self.account_info() control.setSetting('premiumize.token', token['access_token']) control.setSetting('premiumize.username', str(account_info['customer_id'])) return False, True
def get_token(self): try: url = oauth_base_url + 'token' postData = { 'client_id': self.client_ID, 'client_secret': self.secret, 'code': self.device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0' } response = requests.post(url, data=postData).json() self.token = response['access_token'] control.sleep(1500) account_info = self.account_info() username = account_info['username'] control.setSetting('realdebrid.username', username) control.setSetting('realdebrid.client_id', self.client_ID) control.setSetting( 'realdebrid.secret', self.secret, ) control.setSetting('realdebrid.token', self.token) control.setSetting('realdebrid.refresh', response['refresh_token']) return True except Exception as e: log_utils.log('Real Debrid Authorization Failed: %s' % e, __name__, log_utils.LOGDEBUG) return False
def get_device_token(self, device_codes): try: data = {"code": device_codes["device_code"], "client_id": self.client_id, "client_secret": self.client_secret} start = time.time() expires_in = device_codes['expires_in'] verification_url = control.lang(32513) % str(device_codes['verification_url']) user_code = control.lang(32514) % str(device_codes['user_code']) control.progressDialog.create(control.lang(32073), control.progress_line % (verification_url, user_code, '')) try: time_passed = 0 while not control.progressDialog.iscanceled() and time_passed < expires_in: try: response = self.call("oauth/device/token", data=data, with_auth=False, suppress_error_notification=True) except requests.HTTPError as e: log_utils.log('Request Error: %s' % str(e), __name__, log_utils.LOGDEBUG) if e.response.status_code != 400: raise e progress = int(100 * time_passed / expires_in) control.progressDialog.update(progress) control.sleep(max(device_codes['interval'], 1)*1000) else: if not response: continue else: return response time_passed = time.time() - start finally: control.progressDialog.close() return None except: log_utils.error()
def run(self): xbmc.log( '[ script.module.myaccounts ] Addon checking available updates', LOGNOTICE) try: import re import requests repo_xml = requests.get( 'https://raw.githubusercontent.com/a4k-openproject/repository.myaccounts/master/zips/addons.xml' ) if repo_xml.status_code != 200: return xbmc.log( '[ script.module.myaccounts ] Could not connect to remote repo XML: status code = %s' % repo_xml.status_code, LOGNOTICE) repo_version = re.findall( r'<addon id=\"script.module.myaccounts\".*version=\"(\d*.\d*.\d*.\d*)\"', repo_xml.text)[0] local_version = control.addonVersion() if control.check_version_numbers(local_version, repo_version): while control.condVisibility('Library.IsScanningVideo'): control.sleep(10000) xbmc.log( '[ script.module.myaccounts ] A newer version is available. Installed Version: v%s, Repo Version: v%s' % (local_version, repo_version), LOGNOTICE) control.notification( title='default', message= 'A new verison of My Accounts is available from the repository. Please consider updating to v%s' % repo_version, icon='default', time=5000, sound=False) except: import traceback traceback.print_exc()
def get_token(self): try: url = oauth_base_url + 'token' postData = {'client_id': self.client_ID, 'client_secret': self.secret, 'code': self.device_code, 'grant_type': 'http://oauth.net/grant_type/device/1.0'} response = requests.post(url, data=postData) # log_utils.log('Authorizing Real Debrid Result: | %s |' % response, level=log_utils.LOGDEBUG) if '[204]' in str(response): return False, str(response) if 'Temporarily Down For Maintenance' in response.text: control.notification(message='Real-Debrid Temporarily Down For Maintenance', icon=rd_icon) log_utils.log('Real-Debrid Temporarily Down For Maintenance', level=log_utils.LOGWARNING) return False, response.text else: response = response.json() if 'error' in str(response): log_utils.log('response=%s' % str(response), __name__) message = response.get('error') control.notification(message=message, icon=rd_icon) log_utils.log('Real-Debrid Error: %s' % message, level=log_utils.LOGWARNING) return False, response self.token = response['access_token'] control.sleep(500) account_info = self.account_info() username = account_info['username'] control.setSetting('realdebrid.username', username) control.setSetting('realdebrid.client_id', self.client_ID) control.setSetting('realdebrid.secret', self.secret,) control.setSetting('realdebrid.token', self.token) control.setSetting('realdebrid.refresh', response['refresh_token']) return True, None except: log_utils.error('Real Debrid Authorization Failed : ') return False, None
def auth_loop(self): control.sleep(self.auth_step * 1000) url = 'client_id=%s&code=%s' % (self.client_ID, self.device_code) url = oauth_base_url + credentials_url % url response = json.loads(requests.get(url).text) if 'error' in response: return # else: try: control.progressDialog.close() self.client_ID = response['client_id'] self.secret = response['client_secret'] except: log_utils.error() control.okDialog(title='default', message=control.lang(40019)) return
def auth_loop(self): control.sleep(5000) response = requests.get(self.check_url, timeout=self.timeout).json() response = response['data'] if 'error' in response: self.token = 'failed' return control.notification(title='default', message=40021, icon='default') if response['activated']: try: control.progressDialog.close() self.token = str(response['apikey']) control.setSetting('alldebrid.token', self.token) except: self.token = 'failed' return control.notification(title='default', message=40021, icon='default') return
def auth(self): self.token = '' url = base_url + 'pin/get?agent=%s' % user_agent response = requests.get(url, timeout=self.timeout).json() response = response['data'] control.progressDialog.create(control.lang(40056)) control.progressDialog.update(-1, control.progress_line % (control.lang(32513) % 'https://alldebrid.com/pin/', control.lang(32514) % response['pin'], '')) self.check_url = response.get('check_url') control.sleep(2000) while not self.token: if control.progressDialog.iscanceled(): control.progressDialog.close() break self.auth_loop() if self.token in (None, '', 'failed'): return control.sleep(2000) account_info = self.account_info() control.setSetting('alldebrid.username', str(account_info['user']['username'])) control.notification(title=40059, message=40081, icon=ad_icon)
def auth(self): try: code = self.get_device_code() token = self.get_device_token(code) if token: expires_at = time.time() + 60 * 60 * 24 * 30 control.setSetting('trakt.expires', str(expires_at)) control.setSetting('trakt.token', token["access_token"]) control.setSetting('trakt.refresh', token["refresh_token"]) control.sleep(1000) try: user = self.call("users/me", with_auth=True) control.setSetting('trakt.username', str(user['username'])) except: pass control.notification(message=40074, icon=trakt_icon) return True control.notification(message=40075, icon=trakt_icon) return False except: log_utils.error()
def openMASettings(query=None): control.openSettings(query) while not control.condVisibility('Window.IsVisible(addonsettings)'): control.sleep(250) control.release_active_monitor()