Esempio n. 1
0
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)
Esempio n. 2
0
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='')
Esempio n. 4
0
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()