fix(msl): If mastertoken is expired it gets renewed
[plugin.video.netflix.git] / resources / lib / MSL.py
index 409411322adeb342fb32fb2a09432144617ff31e..ba6dc2dd42045011ad8cfe4742bfa60728e2fe10 100644 (file)
@@ -10,6 +10,8 @@ import os
 import pprint
 import random
 from StringIO import StringIO
+
+from datetime import datetime
 import requests
 import zlib
 
@@ -361,7 +363,7 @@ class MSL:
             subtiles_adaption_set = ET.SubElement(period, 'AdaptationSet',
                                                   lang=text_track['bcp47'],
                                                   contentType='text',
-                                                  mimeType='text/vtt')
+                                                  mimeType='text/ttml')
             for downloadable in text_track['downloadables']:
                 rep = ET.SubElement(subtiles_adaption_set, 'Representation',
                                     bandwidth='0',
@@ -583,6 +585,18 @@ class MSL:
 
     def __load_msl_data(self):
         msl_data = json.JSONDecoder().decode(self.load_file(self.kodi_helper.msl_data_path, 'msl_data.json'))
+        #Check expire date of the token
+        master_token = json.JSONDecoder().decode(base64.standard_b64decode(msl_data['tokens']['mastertoken']['tokendata']))
+        valid_until = datetime.utcfromtimestamp(int(master_token['expiration']))
+        present = datetime.now()
+        difference = valid_until - present
+        difference = difference.total_seconds() / 60 / 60
+        # If token expires in less then 10 hours or is expires renew it
+        if difference < 10:
+            self.__load_rsa_keys()
+            self.__perform_key_handshake()
+            return
+
         self.__set_master_token(msl_data['tokens']['mastertoken'])
         self.encryption_key = base64.standard_b64decode(msl_data['encryption_key'])
         self.sign_key = base64.standard_b64decode(msl_data['sign_key'])