feat(msl): Move functionality from common.py to KodiHelper.py & remove common.py
authorSebastian Golasch <public@asciidisco.com>
Sat, 4 Feb 2017 15:35:20 +0000 (16:35 +0100)
committerSebastian Golasch <public@asciidisco.com>
Sat, 4 Feb 2017 15:35:20 +0000 (16:35 +0100)
resources/lib/KodiHelper.py
resources/lib/MSL.py
resources/lib/MSLHttpRequestHandler.py
resources/lib/common.py [deleted file]
service.py

index 44d992bfae5ad67b678a22339b833748e907a233..27b77f973ba6ffb934638d5f04685df1713c2fd1 100644 (file)
@@ -18,9 +18,6 @@ except:
 class KodiHelper:
     """Consumes all the configuration data from Kodi as well as turns data into lists of folders and videos"""
 
-    msl_service_server_url = 'http://localhost:%PORT%'
-    """str: MSL service url"""
-
     def __init__ (self, plugin_handle, base_url):
         """Fetches all needed info from Kodi & configures the baseline of the plugin
 
@@ -42,6 +39,7 @@ class KodiHelper:
         self.cookie_path = self.base_data_path + 'COOKIE'
         self.data_path = self.base_data_path + 'DATA'
         self.config_path = os.path.join(self.base_data_path, 'config')
+        self.msl_data_path = xbmc.translatePath('special://profile/addon_data/service.msl').decode('utf-8') + '/'
         self.verb_log = self.addon.getSetting('logging') == 'true'
         self.default_fanart = self.addon.getAddonInfo('fanart')
         self.win = xbmcgui.Window(xbmcgui.getCurrentWindowId())
@@ -647,7 +645,7 @@ class KodiHelper:
             return False
 
         # inputstream addon properties
-        msl_service_url = self.msl_service_server_url.replace('%PORT%', str(self.addon.getSetting('msl_service_port')))
+        msl_service_url = 'http://localhost:' + str(self.addon.getSetting('msl_service_port'))
         play_item = xbmcgui.ListItem(path=msl_service_url + '/manifest?id=' + video_id)
         play_item.setProperty(inputstream_addon + '.license_type', 'com.widevine.alpha')
         play_item.setProperty(inputstream_addon + '.manifest_type', 'mpd')
index bbf0e21d27a4f1cc40db43692e166992f6ecc724..163da5307f13f4c2e6019cd5acdc5467da965ce4 100644 (file)
@@ -18,8 +18,14 @@ from Crypto.Random import get_random_bytes
 # from Crypto.Hash import HMAC, SHA256
 from Crypto.Util import Padding
 import xml.etree.ElementTree as ET
-from common import log
-from common import ADDONUSERDATA
+from KodiHelper import KodiHelper
+
+plugin_handle = int(sys.argv[1])
+base_url = sys.argv[0]
+kodi_helper = KodiHelper(
+    plugin_handle=plugin_handle,
+    base_url=base_url
+)
 
 pp = pprint.PrettyPrinter(indent=4)
 
@@ -57,7 +63,7 @@ class MSL:
         self.email = email
         self.password = password
         try:
-            os.mkdir(ADDONUSERDATA)
+            os.mkdir(kodi_helper.msl_data_path)
         except OSError:
             pass
 
@@ -65,11 +71,11 @@ class MSL:
             self.__load_msl_data()
             self.handshake_performed = True
         elif self.file_exists('rsa_key.bin'):
-            log('RSA Keys do already exist load old ones')
+            kodi_helper.log(msg='RSA Keys do already exist load old ones')
             self.__load_rsa_keys()
             self.__perform_key_handshake()
         else:
-            log('Create new RSA Keys')
+            kodi_helper.log(msg='Create new RSA Keys')
             # Create new Key Pair and save
             self.rsa_key = RSA.generate(2048)
             self.__save_rsa_keys()
@@ -113,7 +119,7 @@ class MSL:
 
         try:
             resp.json()
-            log('MANIFEST RESPONE JSON: '+resp.text)
+            kodi_helper.log(msg='MANIFEST RESPONE JSON: '+resp.text)
         except ValueError:
             # Maybe we have a CHUNKED response
             resp = self.__parse_chunked_msl_response(resp.text)
@@ -161,7 +167,7 @@ class MSL:
 
         try:
             resp.json()
-            log('LICENSE RESPONE JSON: '+resp.text)
+            kodi_helper.log(msg='LICENSE RESPONE JSON: '+resp.text)
         except ValueError:
             # Maybe we have a CHUNKED response
             resp = self.__parse_chunked_msl_response(resp.text)
@@ -456,21 +462,21 @@ class MSL:
             'headerdata': base64.standard_b64encode(header),
             'signature': '',
         }
-        log('Key Handshake Request:')
-        log(json.dumps(request))
+        kodi_helper.log(msg='Key Handshake Request:')
+        kodi_helper.log(msg=json.dumps(request))
 
 
         resp = self.session.post(self.endpoints['manifest'], json.dumps(request, sort_keys=True))
         if resp.status_code == 200:
             resp = resp.json()
             if 'errordata' in resp:
-                log('Key Exchange failed')
-                log(base64.standard_b64decode(resp['errordata']))
+                kodi_helper.log(msg='Key Exchange failed')
+                kodi_helper.log(msg=base64.standard_b64decode(resp['errordata']))
                 return False
             self.__parse_crypto_keys(json.JSONDecoder().decode(base64.standard_b64decode(resp['headerdata'])))
         else:
-            log('Key Exchange failed')
-            log(resp.text)
+            kodi_helper.log(msg='Key Exchange failed')
+            kodi_helper.log(msg=resp.text)
 
     def __parse_crypto_keys(self, headerdata):
         self.__set_master_token(headerdata['keyresponsedata']['mastertoken'])
@@ -521,7 +527,7 @@ class MSL:
         self.rsa_key = RSA.importKey(loaded_key)
 
     def __save_rsa_keys(self):
-        log('Save RSA Keys')
+        kodi_helper.log(msg='Save RSA Keys')
         # Get the DER Base64 of the keys
         encrypted_key = self.rsa_key.exportKey()
         self.save_file('rsa_key.bin', encrypted_key)
@@ -533,7 +539,7 @@ class MSL:
         :param filename: The filename
         :return: True if so
         """
-        return os.path.isfile(ADDONUSERDATA + filename)
+        return os.path.isfile(kodi_helper.msl_data_path + filename)
 
     @staticmethod
     def save_file(filename, content):
@@ -542,7 +548,7 @@ class MSL:
         :param filename: The filename
         :param content: The content of the file
         """
-        with open(ADDONUSERDATA + filename, 'w') as file_:
+        with open(kodi_helper.msl_data_path + filename, 'w') as file_:
             file_.write(content)
             file_.flush()
 
@@ -553,6 +559,6 @@ class MSL:
         :param filename: The file to load
         :return: The content of the file
         """
-        with open(ADDONUSERDATA + filename) as file_:
+        with open(kodi_helper.msl_data_path + filename) as file_:
             file_content = file_.read()
         return file_content
index 395dd5aedd9fef1d560bf5d316d62c850fbce57b..c9e01d008082e0f590309ee569fce1b7aee80661 100644 (file)
@@ -3,9 +3,18 @@ import base64
 from urlparse import urlparse, parse_qs
 
 from MSL import MSL
-from common import ADDON
-email = ADDON.getSetting('email')
-password = ADDON.getSetting('password')
+from KodiHelper import KodiHelper
+
+plugin_handle = int(sys.argv[1])
+base_url = sys.argv[0]
+kodi_helper = KodiHelper(
+    plugin_handle=plugin_handle,
+    base_url=base_url
+)
+
+account = kodi_helper.addon.get_credentials()
+email = account['email']
+password = account['password']
 msl = MSL(email, password)
 
 class MSLHttpRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
diff --git a/resources/lib/common.py b/resources/lib/common.py
deleted file mode 100644 (file)
index d197938..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-import os
-import xbmc
-import xbmcaddon
-import xbmcgui
-import xbmcvfs
-
-ADDON = xbmcaddon.Addon()
-ADDONVERSION = ADDON.getAddonInfo('version')
-ADDONNAME = ADDON.getAddonInfo('name')
-ADDONPATH = ADDON.getAddonInfo('path').decode('utf-8')
-ADDONPROFILE = xbmc.translatePath( ADDON.getAddonInfo('profile') ).decode('utf-8')
-ADDONUSERDATA = xbmc.translatePath("special://profile/addon_data/service.msl").decode('utf-8') + "/"
-ICON = ADDON.getAddonInfo('icon')
-
-def log(txt):
-    if isinstance (txt,str):
-        txt = txt.decode("utf-8")
-    message = u'%s: %s' % ("service.msl", txt)
-    xbmc.log(msg=message.encode("utf-8"), level=xbmc.LOGDEBUG)
index 2af981351995a7db48d9769a63274cdd21591fea..12d8ab833c3e828e26525307d2420e356fe9916f 100644 (file)
@@ -3,7 +3,7 @@ import SocketServer
 import xbmc
 import xbmcaddon
 import socket
-from resources.lib.common import log
+from resources.lib.KodiHelper import KodiHelper
 from resources.lib.MSLHttpRequestHandler import MSLHttpRequestHandler
 
 def select_unused_port():
@@ -13,10 +13,18 @@ def select_unused_port():
   s.close()
   return port
 
+plugin_handle = int(sys.argv[1])
+base_url = sys.argv[0]
 addon = xbmcaddon.Addon()
+
+kodi_helper = KodiHelper(
+    plugin_handle=plugin_handle,
+    base_url=base_url
+)
+
 PORT = select_unused_port()
 addon.setSetting('msl_service_port', str(PORT))
-log("Picked Port: " + str(PORT))
+kodi_helper.log(msg='Picked Port: ' + str(PORT))
 Handler = MSLHttpRequestHandler
 SocketServer.TCPServer.allow_reuse_address = True
 server = SocketServer.TCPServer(('127.0.0.1', PORT), Handler)
@@ -37,4 +45,4 @@ if __name__ == '__main__':
     server.server_close()
     server.socket.close()
     server.shutdown()
-    log("Stopped MSL Service")
+    kodi_helper.log(msg='Stopped MSL Service')