def register_api_keys(addon_id, api_key, client_id, client_secret): """ Usage: addon.xml --- <import addon="plugin.video.youtube" version="6.0.0"/> --- .py --- import youtube_registration youtube_registration.register_api_keys(addon_id='plugin.video.example', api_key='A1zaSyA0b5sTjgxzTzYLmVtradlFVBfSHNOJKS0', client_id='825419953561-ert5tccq1r0upsuqdf5nm3le39czk23a.apps.googleusercontent.com', client_secret='Y5cE1IKzJQe1NZ0OsOoEqpu3') # then use your keys by appending an addon_id param to the plugin url xbmc.executebuiltin('RunPlugin(plugin://plugin.video.youtube/channel/UCaBf1a-dpIsw8OxqH4ki2Kg/?addon_id=plugin.video.example)') # addon_id will be passed to all following calls --- :param addon_id: id of the add-on being registered :param api_key: YouTube Data v3 API key :param client_id: YouTube Data v3 Client id :param client_secret: YouTube Data v3 Client secret """ context = Context(plugin_id='plugin.video.youtube') if not addon_id or addon_id == 'plugin.video.youtube': context.log_error('Register API Keys: |%s| Invalid addon_id' % addon_id) return api_jstore = APIKeyStore(context) json_api = api_jstore.load() jkeys = json_api['keys']['developer'].get(addon_id, {}) api_keys = { 'origin': addon_id, 'main': { 'system': 'JSONStore', 'key': b64encode(api_key), 'id': b64encode(client_id), 'secret': b64encode(client_secret) } } if jkeys and jkeys == api_keys: context.log_debug('Register API Keys: |%s| No update required' % addon_id) else: json_api['keys']['developer'][addon_id] = api_keys api_jstore.save(json_api) context.log_debug('Register API Keys: |%s| Keys registered' % addon_id)
def __auth(addon_id, mode=SIGN_IN): """ :param addon_id: id of the add-on being signed in :param mode: SIGN_IN or SIGN_OUT :return: addon provider, context and client """ if not addon_id or addon_id == 'plugin.video.youtube': context = Context(plugin_id='plugin.video.youtube') context.log_error('Developer authentication: |%s| Invalid addon_id' % addon_id) return __add_new_developer(addon_id) params = {'addon_id': addon_id} provider = Provider() context = Context(params=params, plugin_id='plugin.video.youtube') client = provider.get_client(context=context) # NOQA logged_in = provider.is_logged_in() if mode == SIGN_IN: if logged_in: return True else: provider.reset_client() yt_login.process(mode, provider, context, re_match=None, sign_out_refresh=False) elif mode == SIGN_OUT: if not logged_in: return True else: provider.reset_client() try: yt_login.process(mode, provider, context, re_match=None, sign_out_refresh=False) except: reset_access_tokens(addon_id) else: raise Exception('Unknown mode: |%s|' % mode) client = provider.get_client(context=context) # NOQA if mode == SIGN_IN: return provider.is_logged_in() else: return not provider.is_logged_in()
def reset_access_tokens(addon_id): """ :param addon_id: id of the add-on having it's access tokens reset :return: """ if not addon_id or addon_id == 'plugin.video.youtube': context = Context(plugin_id='plugin.video.youtube') context.log_error('Developer reset access tokens: |%s| Invalid addon_id' % addon_id) return params = {'addon_id': addon_id} context = Context(params=params, plugin_id='plugin.video.youtube') access_manager = context.get_access_manager() access_manager.update_dev_access_token(addon_id, access_token='', refresh_token='')
def reset_access_tokens(addon_id): """ :param addon_id: id of the add-on having it's access tokens reset :return: """ if not addon_id or addon_id == 'plugin.video.youtube': context = Context(plugin_id='plugin.video.youtube') context.log_error( 'Developer reset access tokens: |%s| Invalid addon_id' % addon_id) return params = {'addon_id': addon_id} context = Context(params=params, plugin_id='plugin.video.youtube') access_manager = context.get_access_manager() access_manager.update_dev_access_token(addon_id, access_token='', refresh_token='')
def __auth(addon_id, mode=SIGN_IN): """ :param addon_id: id of the add-on being signed in :param mode: SIGN_IN or SIGN_OUT :return: addon provider, context and client """ if not addon_id or addon_id == 'plugin.video.youtube': context = Context(plugin_id='plugin.video.youtube') context.log_error('Developer authentication: |%s| Invalid addon_id' % addon_id) return __add_new_developer(addon_id) params = {'addon_id': addon_id} provider = Provider() context = Context(params=params, plugin_id='plugin.video.youtube') _ = provider.get_client(context=context) # NOQA logged_in = provider.is_logged_in() if mode == SIGN_IN: if logged_in: return True else: provider.reset_client() yt_login.process(mode, provider, context, sign_out_refresh=False) elif mode == SIGN_OUT: if not logged_in: return True else: provider.reset_client() try: yt_login.process(mode, provider, context, sign_out_refresh=False) except: reset_access_tokens(addon_id) else: raise Exception('Unknown mode: |%s|' % mode) _ = provider.get_client(context=context) # NOQA if mode == SIGN_IN: return provider.is_logged_in() else: return not provider.is_logged_in()