Exemple #1
0
	def create_session_id(self):
		try:
			if control.setting('tmdb.username') == '' or control.setting('tmdb.password') == '':
				control.notification(title='default', message=32683, icon='ERROR')
				return
			url = self.auth_base_link + '/token/new?api_key=%s' % API_key
			result = requests.get(url).json()
			# token = result.get('request_token').encode('utf-8')
			token = result.get('request_token')
			url2 = self.auth_base_link + '/token/validate_with_login?api_key=%s' % API_key

			username = control.setting('tmdb.username')
			password = control.setting('tmdb.password')

			post2 = {"username": "******" % username,
							"password": "******" % password,
							"request_token": "%s" % token}
			result2 = requests.post(url2, data=post2).json()
			url3 = self.auth_base_link + '/session/new?api_key=%s' % API_key
			post3 = {"request_token": "%s" % token}
			result3 = requests.post(url3, data=post3).json()

			if result3.get('success') is True:
				session_id = result3.get('session_id')
				msg = '%s' % ('username ='******'[CR]password ='******'[CR]token = ' + token + '[CR]confirm?')
				if control.yesnoDialog(msg):
					control.setSetting('tmdb.session_id', session_id)
					control.notification(title='default', message=32679, icon='default')
				else:
					control.notification(title='default', message=32680, icon='ERROR')
		except:
			log_utils.error()
 def send_query():
     resp = None
     if with_auth:
         try:
             expires_at = control.setting('trakt.expires')
             if time.time() > expires_at:
                 self.refresh_token()
         except:
             pass
         token = control.setting('trakt.token')
         if token:
             headers['Authorization'] = 'Bearer ' + token
     try:
         if data is not None:
             resp = requests.post(self.api_endpoint % path,
                                  json=data,
                                  headers=headers,
                                  timeout=timeout)
         else:
             resp = requests.get(self.api_endpoint % path,
                                 headers=headers,
                                 timeout=timeout)
     except requests.exceptions.RequestException as e:
         error_notification('Trakt Error', str(e))
     except Exception as e:
         error_notification('', str(e))
     return resp
Exemple #3
0
def getTMDb():
	tmdb = {'tmdb': {}}
	tmdb['tmdb']['api_key'] = control.setting('tmdb.api.key')
	tmdb['tmdb']['username'] = control.setting('tmdb.username')
	tmdb['tmdb']['password'] = control.setting('tmdb.password')
	tmdb['tmdb']['session_id'] = control.setting('tmdb.session_id')
	return tmdb
Exemple #4
0
def getTrakt():
	trakt = {'trakt': {}}
	trakt['trakt']['token'] = control.setting('trakt.token')
	trakt['trakt']['username'] = control.setting('trakt.username')
	trakt['trakt']['refresh'] = control.setting('trakt.refresh')
	trakt['trakt']['expires'] = control.setting('trakt.expires')
	return trakt
Exemple #5
0
def getRD():
	rd = {'realdebrid': {}}
	rd['realdebrid']['token'] = control.setting('realdebrid.token')
	rd['realdebrid']['username'] = control.setting('realdebrid.username')
	rd['realdebrid']['client_id'] = control.setting('realdebrid.client_id')
	rd['realdebrid']['refresh'] = control.setting('realdebrid.refresh')
	rd['realdebrid']['secret'] = control.setting('realdebrid.secret')
	return rd
Exemple #6
0
 def __init__(self):
     self.token = control.setting('realdebrid.token')
     self.client_ID = control.setting('realdebrid.client_id')
     if self.client_ID == '':
         self.client_ID = 'X245A4XAIBGVM'
     self.secret = control.setting('realdebrid.secret')
     self.device_code = ''
     self.auth_timeout = 0
     self.auth_step = 0
Exemple #7
0
	def revoke_session_id(self):
		try:
			if control.setting('tmdb.session_id') == '':
				return
			url = self.auth_base_link + '/session?api_key=%s' % API_key
			post = {"session_id": "%s" % control.setting('tmdb.session_id')}
			result = requests.delete(url, data=post).json()
			if result.get('success') is True:
				control.setSetting('tmdb.session_id', '')
				control.notification(title='default', message=32681, icon='default')
			else:
				control.notification(title='default', message=32682, icon='ERROR')
		except:
			log_utils.error()
Exemple #8
0
 def __init__(self):
     self.token = control.setting('premiumize.token')
     self.headers = {
         'User-Agent': 'My Accounts for Kodi',
         'Authorization': 'Bearer %s' % self.token
     }
     self.server_notifications = False
Exemple #9
0
	def revoke(self):
		data = {"token": control.setting('trakt.token')}
		try: self.call("oauth/revoke", data=data, with_auth=False)
		except: pass
		control.setSetting('trakt.username', '')
		control.setSetting('trakt.expires', '')
		control.setSetting('trakt.token', '')
		control.setSetting('trakt.refresh', '')
		control.dialog.ok(control.lang(32315), control.lang(32314))
    def refresh_token(self):
        traktToken = None
        traktRefresh = None
        traktExpires = None
        data = {
            "client_id": self.client_id,
            "client_secret": self.client_secret,
            "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
            "grant_type": "refresh_token",
            "refresh_token": control.setting('trakt.refresh')
        }

        response = self.call("oauth/token",
                             data=data,
                             with_auth=False,
                             return_str=True)
        try:
            code = str(response[1])
        except:
            code = ''

        if code.startswith('5') or (
                response and isinstance(response, py_tools.string_types)
                and '<html' in response
        ) or not response:  # covers Maintenance html responses ["Bad Gateway", "We're sorry, but something went wrong (500)"])
            log_utils.log('Temporary Trakt Server Problems',
                          level=log_utils.LOGNOTICE)
            control.notification(title=32315, message=33676)
            return False
        elif response and code in ['423']:
            log_utils.log('Locked User Account - Contact Trakt Support: %s' %
                          str(response[0]),
                          level=log_utils.LOGWARNING)
            control.notification(title=32315, message=33675)
            return False

        if response and code not in ['401', '405']:
            try:
                response = response.json()
            except:
                log_utils.error()
                return False
            if 'error' in response and response['error'] == 'invalid_grant':
                log_utils.log('Please Re-Authorize your Trakt Account: %s' %
                              response['error'],
                              __name__,
                              level=log_utils.LOGWARNING)
                control.notification(title=32315, message=33677)
                return False

            traktToken = response["access_token"]
            traktRefresh = response["refresh_token"]
            traktExpires = time.time() + 7776000
            control.setSetting('trakt.token', traktToken)
            control.setSetting('trakt.refresh', traktRefresh)
            control.setSetting('trakt.expires', str(traktExpires))
        self.token = traktToken
Exemple #11
0
def getTVDb():
	tvdb = {'tvdb': {}}
	tvdb_key_list = [
		'06cff30690f9b9622957044f2159ffae',
		'1D62F2F90030C444',
		'7R8SZZX90UA9YMBU']
	api_key = tvdb_key_list[int(control.setting('tvdb.api.key'))]
	tvdb['tvdb']['api_key'] = api_key
	return tvdb
def getTVDb():
    tvdb = {'tvdb': {}}
    # keys must be .decode('base64') by addon to use
    tvdb_key_list = [
        'MDZjZmYzMDY5MGY5Yjk2MjI5NTcwNDRmMjE1OWZmYWU=',
        'MUQ2MkYyRjkwMDMwQzQ0NA==', 'N1I4U1paWDkwVUE5WU1CVQ=='
    ]
    api_key = tvdb_key_list[int(control.setting('tvdb.api.key'))]
    tvdb['tvdb']['api_key'] = api_key
    return tvdb
def log(msg, caller=None, level=LOGNOTICE):
    debug_enabled = control.setting('debug.enabled') == 'true'
    if not debug_enabled: return
    debug_location = control.setting('debug.location')

    try:
        if caller is not None and level != LOGERROR:
            func = inspect.currentframe().f_back.f_code
            line_number = inspect.currentframe().f_back.f_lineno
            caller = "%s.%s()" % (caller, func.co_name)
            msg = 'From func name: %s Line # :%s\n                       msg : %s' % (
                caller, line_number, msg)
        if caller is not None and level == LOGERROR:
            msg = 'From func name: %s.%s() Line # :%s\n                       msg : %s' % (
                caller[0], caller[1], caller[2], msg)

        try:
            msg = msg.encode('ascii', errors='ignore').decode('ascii',
                                                              errors='ignore')
        except:
            pass

        try:
            if isinstance(msg, py_tools.text_type):
                msg = '%s (ENCODED)' % (py_tools.ensure_str(msg,
                                                            errors='replace'))
        except:
            pass

        if debug_location == '1':
            log_file = control.joinPath(LOGPATH, 'myaccounts.log')
            if not control.existsPath(log_file):
                f = open(log_file, 'w')
                f.close()
            with open(log_file, 'a') as f:
                line = '[%s %s] %s: %s' % (
                    datetime.now().date(), str(datetime.now().time())[:8],
                    DEBUGPREFIX % debug_list[level], msg)
                f.write(line.rstrip('\r\n') + '\n')
        else:
            xbmc.log('%s: %s' % (DEBUGPREFIX % debug_list[level], msg, level))
    except Exception as e:
        xbmc.log('log.log() Logging Failure: %s' % (e), LOGERROR)
 def revoke(self):
     data = {"token": control.setting('trakt.token')}
     try:
         self.call("oauth/revoke", data=data, with_auth=False)
     except:
         pass
     control.setSetting('trakt.username', '')
     control.setSetting('trakt.expires', '')
     control.setSetting('trakt.token', '')
     control.setSetting('trakt.refresh', '')
     control.notification(title='default', message=40009, icon=trakt_icon)
Exemple #15
0
 def refresh_token(self):
     try:
         self.client_ID = control.setting('realdebrid.client_id')
         self.secret = control.setting('realdebrid.secret')
         self.device_code = control.setting('realdebrid.refresh')
         log_utils.log(
             'Refreshing Expired Real Debrid Token: |%s|%s|' %
             (self.client_ID, self.device_code), __name__,
             log_utils.LOGDEBUG)
         if not self.get_token():
             self.revoke()
             log_utils.log('Unable to Refresh Real Debrid Token', __name__,
                           log_utils.LOGDEBUG)
         else:
             log_utils.log('Real Debrid Token Successfully Refreshed',
                           __name__, log_utils.LOGDEBUG)
             return True
     except:
         log_utils.error()
         return False
def log(msg, caller=None, level=LOGNOTICE):
    debug_enabled = control.setting('debug.enabled') == 'true'
    debug_log = control.setting('debug.location')

    if not debug_enabled:
        return
    try:
        if caller is not None and level == LOGDEBUG:
            func = inspect.currentframe().f_back.f_code
            line_number = inspect.currentframe().f_back.f_lineno
            caller = "%s.%s()" % (caller, func.co_name)
            msg = 'From func name: %s Line # :%s\n                       msg : %s' % (
                caller, line_number, msg)

        if caller is not None and level == LOGERROR:
            msg = 'From func name: %s.%s() Line # :%s\n                       msg : %s' % (
                caller[0], caller[1], caller[2], msg)

        if isinstance(msg, unicode):
            msg = '%s (ENCODED)' % (msg.encode('utf-8'))

        if debug_log == '1':
            log_file = control.joinPath(LOGPATH, 'myaccounts.log')
            if not control.existsPath(log_file):
                f = open(log_file, 'w')
                f.close()
            with open(log_file, 'a') as f:
                line = '[%s %s] %s: %s' % (datetime.now().date(),
                                           str(datetime.now().time())[:8],
                                           DEBUGPREFIX, msg)
                f.write(line.rstrip('\r\n') + '\n')
        else:
            print('%s: %s' % (DEBUGPREFIX, msg))
    except Exception as e:
        import traceback
        traceback.print_exc()

        try:
            xbmc.log('Logging Failure: %s' % (e), level)
        except:
            pass
	def withinRangeCheck(self, debrid_provider, days_remaining):
		if days_remaining < 15:
			try: current_notification_range = int(control.setting('%s.notification.range' % debrid_provider))
			except: current_notification_range = 5
			for index, day_range in enumerate(self.duration):
				if day_range[0] > days_remaining > day_range[1] and current_notification_range != index:
					control.setSetting('%s.notification.range' % debrid_provider, str(index))
					return True
			return False
		else:
			control.setSetting('%s.notification.range' % debrid_provider, '')
			return False
 def refresh_token(self):
     data = {
         "client_id": self.client_id,
         "client_secret": self.client_secret,
         "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
         "grant_type": "refresh_token",
         "refresh_token": control.setting('trakt.refresh')
     }
     response = self.call("oauth/token", data=data, with_auth=False)
     if response:
         control.setSetting('trakt.token', response["access_token"])
         control.setSetting('trakt.refresh', response["refresh_token"])
	def refresh_token(self):
		try:
			self.client_ID = control.setting('realdebrid.client_id')
			self.secret = control.setting('realdebrid.secret')
			self.device_code = control.setting('realdebrid.refresh')
			if not self.client_ID or not self.secret or not self.device_code: return False # avoid if previous refresh attempt revoked accnt, loops twice.
			log_utils.log('Refreshing Expired Real Debrid Token: | %s | %s |' % (self.client_ID, self.device_code), __name__, log_utils.LOGDEBUG)
			success, error = self.get_token()
			if not success:
				if not 'Temporarily Down For Maintenance' in error:
					if any(value == error.get('error_code') for value in [9, 12, 13, 14]):
						self.revoke() # empty all auth settings to force a re-auth on next use
						control.notification(message='Real-Debrid Auth revoked due to:  %s' % error.get('error'), icon=rd_icon)
				log_utils.log('Unable to Refresh Real Debrid Token: %s' % error.get('error'), level=log_utils.LOGWARNING)
				return False
			else:
				log_utils.log('Real Debrid Token Successfully Refreshed', level=log_utils.LOGDEBUG)
				return True
		except:
			log_utils.error()
			return False
Exemple #20
0
    def run(self):
        from datetime import datetime
        from myaccounts.modules import alldebrid
        from myaccounts.modules import premiumize
        from myaccounts.modules import realdebrid
        xbmc.log(
            '[ script.module.myaccounts ]  Debrid Account Expiry Notification Service Starting...',
            LOGNOTICE)
        self.duration = [(15, 10), (11, 7), (8, 4), (5, 2), (3, 0)]
        if control.setting('alldebrid.username') != '' and control.setting(
                'alldebrid.expiry.notice') == 'true':
            account_info = alldebrid.AllDebrid().account_info()['user']
            if account_info:
                if not account_info['isSubscribed']:
                    # log_utils.log('AD account_info = %s' % account_info, log_utils.LOGNOTICE)
                    expires = datetime.fromtimestamp(
                        account_info['premiumUntil'])
                    days_remaining = (expires - datetime.today()).days  # int
                    if self.withinRangeCheck('alldebrid', days_remaining):
                        control.notification(
                            message='AllDebrid Account expires in %s days' %
                            days_remaining,
                            icon=control.joinPath(control.artPath(),
                                                  'alldebrid.png'))

        if control.setting('premiumize.username') != '' and control.setting(
                'premiumize.expiry.notice') == 'true':
            account_info = premiumize.Premiumize().account_info()
            if account_info:
                # log_utils.log('PM account_info = %s' % account_info, log_utils.LOGNOTICE)
                expires = datetime.fromtimestamp(account_info['premium_until'])
                days_remaining = (expires - datetime.today()).days  # int
                if self.withinRangeCheck('premiumize', days_remaining):
                    control.notification(
                        message='Premiumize.me Account expires in %s days' %
                        days_remaining,
                        icon=control.joinPath(control.artPath(),
                                              'premiumize.png'))

        if control.setting('realdebrid.username') != '' and control.setting(
                'realdebrid.expiry.notice') == 'true':
            account_info = realdebrid.RealDebrid().account_info()
            if account_info:
                import time
                # log_utils.log('RD account_info = %s' % account_info, log_utils.LOGNOTICE)
                FormatDateTime = "%Y-%m-%dT%H:%M:%S.%fZ"
                try:
                    expires = datetime.strptime(account_info['expiration'],
                                                FormatDateTime)
                except:
                    expires = datetime(*(time.strptime(
                        account_info['expiration'], FormatDateTime)[0:6]))
                days_remaining = (expires - datetime.today()).days  # int
                if self.withinRangeCheck('realdebrid', days_remaining):
                    control.notification(
                        message='Real-Debrid Account expires in %s days' %
                        days_remaining,
                        icon=control.joinPath(control.artPath(),
                                              'realdebrid.png'))
 def refresh_token(self):
     traktToken = None
     traktRefresh = None
     traktExpires = None
     data = {
         "client_id": self.client_id,
         "client_secret": self.client_secret,
         "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
         "grant_type": "refresh_token",
         "refresh_token": control.setting('trakt.refresh')
     }
     response = self.call("oauth/token", data=data, with_auth=False)
     if response:
         traktToken = response["access_token"]
         traktRefresh = response["refresh_token"]
         traktExpires = time.time() + 7776000
         control.setSetting('trakt.token', traktToken)
         control.setSetting('trakt.refresh', traktRefresh)
         control.setSetting('trakt.expires', traktExpires)
     self.token = traktToken
Exemple #22
0
def getGDrive():
	gdrive = {'gdrive': {}}
	gdrive['gdrive']['url'] = control.setting('gdrive.cloudflare_url')
	return gdrive
Exemple #23
0
 def __init__(self):
     self.api_endpoint = 'https://api-v2launch.trakt.tv/%s'
     self.client_id = '1ff09b52d009f286be2d9bdfc0314c688319cbf931040d5f8847e7694a01de42'
     self.client_secret = '0c5134e5d15b57653fefed29d813bfbd58d73d51fb9bcd6442b5065f30c4d4dc'
     self.expires_at = control.setting('trakt.expires')
     self.token = control.setting('trakt.token')
Exemple #24
0
def getIMDb():
	imdb = {'imdb': {}}
	imdb['imdb']['user'] = control.setting('imdb.user')
	return imdb
Exemple #25
0
	My Accounts
'''

from myaccounts.modules import control
from myaccounts.modules import log_utils


class AddonCheckUpdate:
	def run(self):
		log_utils.log('My Accounts checking available updates', log_utils.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:
				log_utils.log('Could not connect to My Accounts repo XML, status: %s' % repo_xml.status_code, log_utils.LOGNOTICE)
				return
			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)
				log_utils.log('A newer version of My Accounts is available. Installed Version: v%s, Repo Version: v%s' % (local_version, repo_version), log_utils.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:
			log_utils.error()
			pass

if control.setting('general.checkAddonUpdates') == 'true':
	AddonCheckUpdate().run()
	xbmc.log('[ script.module.myaccounts ] Addon update check complete', xbmc.LOGNOTICE)
Exemple #26
0
def getEasyNews():
	easyNews = {'easyNews': {}}
	easyNews['easyNews']['username'] = control.setting('easynews.username')
	easyNews['easyNews']['password'] = control.setting('easynews.password')
	return easyNews
Exemple #27
0
def getOrro():
	ororo = {'ororo': {}}
	ororo['ororo']['email'] = control.setting('ororo.email')
	ororo['ororo']['password'] = control.setting('ororo.password')
	return ororo
Exemple #28
0
def getFanart_tv():
	fanart = {'fanart_tv': {}}
	fanart['fanart_tv']['api_key'] = control.setting('fanart.tv.api.key')
	return fanart
Exemple #29
0
def getAD():
	ad = {'alldebrid': {}}
	ad['alldebrid']['token'] = control.setting('alldebrid.token')
	ad['alldebrid']['username'] = control.setting('alldebrid.username')
	return ad
Exemple #30
0
def getPM():
	pm = {'premiumize': {}}
	pm['premiumize']['token'] = control.setting('premiumize.token')
	pm['premiumize']['username'] = control.setting('premiumize.username')
	return pm