From: Sebastian Golasch Date: Wed, 19 Jul 2017 17:30:51 +0000 (+0200) Subject: Merge pull request #66 from matejmosko/patch-2 X-Git-Url: http://git.code-monkey.de/?p=plugin.video.netflix.git;a=commitdiff_plain;h=19251d2cfa324ef7eff3223687e56b070b537635;hp=87796f8d62a56fb91ee5e110358b458bab930eb7 Merge pull request #66 from matejmosko/patch-2 Fix slovak translation --- diff --git a/README.md b/README.md index ce3656c..1c24ba2 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ The trademark "Netflix" is registered by "Netflix, Inc." Prerequisites ------------- -- Kodi 18 [agile build](https://github.com/FernetMenta/kodi-agile) +- Kodi 18 [nightlybuild](http://mirrors.kodi.tv/nightlies/) - Libwidevine 1.4.8.962 (A german description how to get/install it, can be found [here](https://www.kodinerds.net/index.php/Thread/51486-Kodi-17-Inputstream-HowTo-AddOns-f%C3%BCr-Kodi-17-ab-Beta-6-aktuelle-Git-builds-Updat/)) -- Inputstream.adaptive [agile branch build](https://github.com/liberty-developer/inputstream.adaptive/tree/agile) +- Inputstream.adaptive [v2.0.4](https://github.com/peak3d/inputstream.adaptive) FAQ --- @@ -54,8 +54,8 @@ If something doesn't work for you, please: - Enable verbose logging in the plugin settings - Enable the Debug log in you Kodi settings - Open an issue with a titles that summarises your problems and include: - - Kodi version (git sha as long as we´re on agile only) - - Inputstream.adaptive version (git sha as long as we´re on the agile branch) + - Kodi version (git sha if possible) + - Inputstream.adaptive version (git sha if possible) - Your OS and OS version - Libwedevine version - A Kodi debug log that represents your issue diff --git a/addon.xml b/addon.xml index d04de3e..d26c343 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + @@ -28,7 +28,18 @@ MIT http://www.kodinerds.net/index.php/Thread/55607-Inputstream-Agile-Betatest-Netflix/ https://github.com/asciidisco/plugin.video.netflix - v0.11.11 (2017-4-10) + v0.11.14 (2017-07-02) + - Fix issue with Unicode escaping + + v0.11.13 (2017-07-02) + - Update number of requested list items (see https://github.com/asciidisco/plugin.video.netflix/issues/42 for details) + + v0.11.12 (2017-07-02) + - Fix missing isFirstUse inline setting + - Fix dynamic ESN loading for widevine + - Fix unicode decoding problems + + v0.11.11 (2017-4-10) - Portugese translations - Swedish translations @@ -38,11 +49,6 @@ v0.11.9 (2017-4-5) - Fix issues with persisted msl manifests - - v0.11.8 (2017-3-17) - - Fix 1 sec delay per request on windows (see https://github.com/asciidisco/plugin.video.netflix/issues/21 for details) - - v0.11.7 (2017-3-17) - - Remove initial connection check as it´s causing trouble + diff --git a/resources/language/Dutch/strings.po b/resources/language/Dutch/strings.po index 366bd37..962d907 100644 --- a/resources/language/Dutch/strings.po +++ b/resources/language/Dutch/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 965a0b3..6779545 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/German/strings.po b/resources/language/German/strings.po index a20a107..76decf5 100644 --- a/resources/language/German/strings.po +++ b/resources/language/German/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Polish/strings.po b/resources/language/Polish/strings.po index 0580e17..4ac70c8 100644 --- a/resources/language/Polish/strings.po +++ b/resources/language/Polish/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Portugese/strings.po b/resources/language/Portugese/strings.po index 63e8ac3..0bca0c4 100644 --- a/resources/language/Portugese/strings.po +++ b/resources/language/Portugese/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Slovak/strings.po b/resources/language/Slovak/strings.po index c0e9a27..5023400 100644 --- a/resources/language/Slovak/strings.po +++ b/resources/language/Slovak/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Spanish/strings.po b/resources/language/Spanish/strings.po index 16071d8..d019e8a 100644 --- a/resources/language/Spanish/strings.po +++ b/resources/language/Spanish/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/language/Swedish/strings.po b/resources/language/Swedish/strings.po index c5cf9ae..540fc1d 100644 --- a/resources/language/Swedish/strings.po +++ b/resources/language/Swedish/strings.po @@ -1,7 +1,7 @@ # Kodi Media Center language file # Addon Name: Netflix # Addon id: plugin.video.netflix -# Addon version: 0.11.11 +# Addon version: 0.11.14 # Addon Provider: libdev + jojo + asciidisco msgid "" msgstr "" diff --git a/resources/lib/KodiHelper.py b/resources/lib/KodiHelper.py index 100f94e..a75f2e7 100644 --- a/resources/lib/KodiHelper.py +++ b/resources/lib/KodiHelper.py @@ -7,7 +7,9 @@ import xbmcplugin import xbmcgui import xbmc import json -from os.path import join +from MSL import MSL +from os import remove +from os.path import join, isfile from urllib import urlencode from xbmcaddon import Addon from uuid import uuid4 @@ -190,6 +192,34 @@ class KodiHelper: 'password': self.get_addon().getSetting('password') } + def get_esn(self): + """ + Returns the esn from settings + """ + self.log(msg='Is FILE: ' + str(isfile(self.msl_data_path + 'msl_data.json'))) + self.log(msg=self.get_addon().getSetting('esn')) + return self.get_addon().getSetting('esn') + + def set_esn(self, esn): + """ + Returns the esn from settings + """ + stored_esn = self.get_esn() + if not stored_esn and esn: + self.set_setting('esn', esn) + self.delete_manifest_data() + return esn + return stored_esn + + def delete_manifest_data(self): + if isfile(self.msl_data_path + 'msl_data.json'): + remove(self.msl_data_path + 'msl_data.json') + if isfile(self.msl_data_path + 'manifest.json'): + remove(self.msl_data_path + 'manifest.json') + msl = MSL(kodi_helper=self) + msl.perform_key_handshake() + msl.save_msl_data() + def get_dolby_setting(self): """ Returns if the dolby sound is enabled @@ -644,6 +674,7 @@ class KodiHelper: bool List could be build """ + self.set_esn(esn) addon = self.get_addon() inputstream_addon = self.get_inputstream_addon() if inputstream_addon == None: @@ -744,7 +775,9 @@ class KodiHelper: if 'mpaa' in entry_keys: infos.update({'mpaa': entry['mpaa']}) else: - infos.update({'mpaa': str(entry['maturity']['board']) + '-' + str(entry['maturity']['value'])}) + if entry.get('maturity', None) is not None: + if entry['maturity']['board'] is not None and entry['maturity']['value'] is not None: + infos.update({'mpaa': str(entry['maturity']['board'].encode('utf-8')) + '-' + str(entry['maturity']['value'].encode('utf-8'))}) if 'rating' in entry_keys: infos.update({'rating': int(entry['rating']) * 2}) if 'synopsis' in entry_keys: diff --git a/resources/lib/MSL.py b/resources/lib/MSL.py index 5b7381d..d038797 100644 --- a/resources/lib/MSL.py +++ b/resources/lib/MSL.py @@ -42,7 +42,7 @@ class MSL: last_drm_context = '' last_playback_context = '' #esn = "NFCDCH-LX-CQE0NU6PA5714R25VPLXVU2A193T36" - esn = "WWW-BROWSE-D7GW1G4NPXGR1F0X1H3EQGY3V1F5WE" + #esn = "WWW-BROWSE-D7GW1G4NPXGR1F0X1H3EQGY3V1F5WE" #esn = "NFCDIE-02-DCH84Q2EK3N6VFVQJ0NLRQ27498N0F" current_message_id = 0 session = requests.session() @@ -71,13 +71,18 @@ class MSL: elif self.file_exists(self.kodi_helper.msl_data_path, 'rsa_key.bin'): self.kodi_helper.log(msg='RSA Keys do already exist load old ones') self.__load_rsa_keys() - self.__perform_key_handshake() + if self.kodi_helper.get_esn(): + self.__perform_key_handshake() else: self.kodi_helper.log(msg='Create new RSA Keys') # Create new Key Pair and save self.rsa_key = RSA.generate(2048) self.__save_rsa_keys() - self.__perform_key_handshake() + if self.kodi_helper.get_esn(): + self.__perform_key_handshake() + + def perform_key_handshake(self): + self.__perform_key_handshake() def load_manifest(self, viewable_id): """ @@ -406,6 +411,7 @@ class MSL: } def __generate_msl_request_data(self, data): + self.__load_msl_data() header_encryption_envelope = self.__encrypt(self.__generate_msl_header()) header = { 'headerdata': base64.standard_b64encode(header_encryption_envelope), @@ -453,9 +459,10 @@ class MSL: :return: The base64 encoded JSON String of the header """ self.current_message_id = self.rndm.randint(0, pow(2, 52)) + esn = self.kodi_helper.get_esn() header_data = { - 'sender': self.esn, + 'sender': esn, 'handshake': is_handshake, 'nonreplayable': False, 'capabilities': { @@ -507,10 +514,12 @@ class MSL: :param plaintext: :return: Serialized JSON String of the encryption Envelope """ + esn = self.kodi_helper.get_esn() + iv = get_random_bytes(16) encryption_envelope = { 'ciphertext': '', - 'keyid': self.esn + '_' + str(self.sequence_number), + 'keyid': esn + '_' + str(self.sequence_number), 'sha256': 'AA==', 'iv': base64.standard_b64encode(iv) } @@ -535,11 +544,13 @@ class MSL: def __perform_key_handshake(self): header = self.__generate_msl_header(is_key_request=True, is_handshake=True, compressionalgo="", encrypt=False) + esn = self.kodi_helper.get_esn() + request = { 'entityauthdata': { 'scheme': 'NONE', 'authdata': { - 'identity': self.esn + 'identity': esn } }, 'headerdata': base64.standard_b64encode(header), @@ -596,6 +607,10 @@ class MSL: self.encryption_key = base64.standard_b64decode(msl_data['encryption_key']) self.sign_key = base64.standard_b64decode(msl_data['sign_key']) + + def save_msl_data(self): + self.__save_msl_data() + def __save_msl_data(self): """ Saves the keys and tokens in json file diff --git a/resources/lib/NetflixHttpSubRessourceHandler.py b/resources/lib/NetflixHttpSubRessourceHandler.py index a4113a4..55d95ca 100644 --- a/resources/lib/NetflixHttpSubRessourceHandler.py +++ b/resources/lib/NetflixHttpSubRessourceHandler.py @@ -40,6 +40,7 @@ class NetflixHttpSubRessourceHandler: self.profiles = self.netflix_session.profiles else: self.profiles = [] + self.kodi_helper.set_esn(self.netflix_session.esn) def is_logged_in (self, params): """Existing login proxy function diff --git a/resources/lib/NetflixSession.py b/resources/lib/NetflixSession.py index f4c9be3..ca4bd5c 100644 --- a/resources/lib/NetflixSession.py +++ b/resources/lib/NetflixSession.py @@ -149,7 +149,7 @@ class NetflixSession: :obj:`list` of :obj:`dict` List of all the serialized data pulled out of the pagws