astrXbian/.install/.kodi/addons/plugin.video.youtube/resources/lib/youtube_plugin/kodion/json_store/login_tokens.py

85 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
"""
Copyright (C) 2018-2018 plugin.video.youtube
SPDX-License-Identifier: GPL-2.0-only
See LICENSES/GPL-2.0-only for more information.
"""
import uuid
from . import JSONStore
# noinspection PyTypeChecker
class LoginTokenStore(JSONStore):
def __init__(self):
JSONStore.__init__(self, 'access_manager.json')
def set_defaults(self):
data = self.get_data()
if 'access_manager' not in data:
data = {'access_manager': {'users': {'0': {'access_token': '', 'refresh_token': '', 'token_expires': -1,
'last_key_hash': '', 'name': 'Default', 'watch_later': ' WL', 'watch_history': 'HL'}}}}
if 'users' not in data['access_manager']:
data['access_manager']['users'] = {'0': {'access_token': '', 'refresh_token': '', 'token_expires': -1,
'last_key_hash': '', 'name': 'Default', 'watch_later': ' WL', 'watch_history': 'HL'}}
if '0' not in data['access_manager']['users']:
data['access_manager']['users']['0'] = {'access_token': '', 'refresh_token': '', 'token_expires': -1,
'last_key_hash': '', 'name': 'Default', 'watch_later': ' WL', 'watch_history': 'HL'}
if 'current_user' not in data['access_manager']:
data['access_manager']['current_user'] = '0'
if 'last_origin' not in data['access_manager']:
data['access_manager']['last_origin'] = 'plugin.video.youtube'
if 'developers' not in data['access_manager']:
data['access_manager']['developers'] = dict()
# clean up
if data['access_manager']['current_user'] == 'default':
data['access_manager']['current_user'] = '0'
if 'access_token' in data['access_manager']:
del data['access_manager']['access_token']
if 'refresh_token' in data['access_manager']:
del data['access_manager']['refresh_token']
if 'token_expires' in data['access_manager']:
del data['access_manager']['token_expires']
if 'default' in data['access_manager']:
if (data['access_manager']['default'].get('access_token') or
data['access_manager']['default'].get('refresh_token')) and \
(not data['access_manager']['users']['0'].get('access_token') and
not data['access_manager']['users']['0'].get('refresh_token')):
if 'name' not in data['access_manager']['default']:
data['access_manager']['default']['name'] = 'Default'
data['access_manager']['users']['0'] = data['access_manager']['default']
del data['access_manager']['default']
# end clean up
current_user = data['access_manager']['current_user']
if 'watch_later' not in data['access_manager']['users'][current_user]:
data['access_manager']['users'][current_user]['watch_later'] = ' WL'
if 'watch_history' not in data['access_manager']['users'][current_user]:
data['access_manager']['users'][current_user]['watch_history'] = 'HL'
# ensure all users have uuid
uuids = list()
uuid_update = False
for k in list(data['access_manager']['users'].keys()):
c_uuid = data['access_manager']['users'][k].get('id')
if c_uuid:
uuids.append(c_uuid)
else:
if not uuid_update:
uuid_update = True
if uuid_update:
for k in list(data['access_manager']['users'].keys()):
c_uuid = data['access_manager']['users'][k].get('id')
if not c_uuid:
g_uuid = uuid.uuid4().hex
while g_uuid in uuids:
g_uuid = uuid.uuid4().hex
data['access_manager']['users'][k]['id'] = g_uuid
# end uuid check
self.save(data)