Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions adobe.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import urllib, urllib2, xml.dom.minidom, uuid
from settings import Settings
from settings import Settings, log
from cookies import Cookies


Expand Down Expand Up @@ -32,7 +32,7 @@ def sessionDevice(streamProvider):
try:
resp = opener.open(AdobePass.SESSION_DEVICE_URI, urllib.urlencode(values))
except urllib2.URLError, e:
print e.args
log (e.args, True)
return False
Cookies.saveCookieJar(jar)

Expand Down Expand Up @@ -82,7 +82,7 @@ def preAuthorize(streamProvider, channels):
try:
resp = opener.open(AdobePass.PREAUTHORIZE_URI, value_str)
except urllib2.URLError, e:
print e.args
log (e.args, True)
return None
Cookies.saveCookieJar(jar)

Expand Down Expand Up @@ -128,19 +128,19 @@ def authorizeDevice(streamProvider, mso_id, channel):
try:
resp = opener.open(AdobePass.AUTHORIZE_URI, urllib.urlencode(values))
except urllib2.URLError, e:
print e.args
log (e.args, True)
return False
Cookies.saveCookieJar(jar)

resp_xml = resp.read()
if resp_xml.find('notAuthorized') >= 0:
print "Unable to authorise for channel '" + channel + "'"
log ("Unable to authorise for channel '" + channel + "'")
return False

try:
dom = xml.dom.minidom.parseString(resp_xml)
except:
print "Unable to parse device authorization xml."
log ("Unable to parse device authorization xml.", True)
return False

result_node = dom.getElementsByTagName('result')[0]
Expand Down Expand Up @@ -189,7 +189,7 @@ def deviceShortAuthorize(streamProvider, mso_id):
try:
resp = opener.open(AdobePass.DEVICE_SHORT_AUTHORIZE, urllib.urlencode(values))
except urllib2.URLError, e:
print e.args
log (e.args, True)
return ''
Cookies.saveCookieJar(jar)

Expand Down
22 changes: 13 additions & 9 deletions default.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ def getAuthCredentials():

mso = __settings__.getSetting("mso")

log("Got from settings the username '" + username + "' for provider '" + mso + "'")

return { 'u' : username, 'p' : password, 'm' : mso }


Expand All @@ -49,6 +51,8 @@ def createMainMenu():
values = { 'menu' : 'channel', 'name' : desc,
'id' : channel['neulion_id'], 'abbr' : channel['id'] }

log("Channel information: " + format(values))

title = values['name']
showTitle = channel['name']

Expand Down Expand Up @@ -92,25 +96,25 @@ def playChannel(values):
token = stream['token']
stream = stream['stream']
headers = {
':authority': 'prod-lic2widevine.sd-ngp.net',
':method': 'POST',
':path': '/proxy',
':scheme': 'https',
'method': 'POST',
'accept': '*/*',
'origin': 'https://now.sportsnet.ca',
'authority': 'prod-lic2widevine.sd-ngp.net',
'path': '/proxy',
'scheme': 'https',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-CA%2Cen-GB%3Bq%3D0.9%2Cen-US%3Bq%3D0.8%2Cen%3Bq%3D0.7',
'authorization': 'bearer {}'.format(token),
'origin': 'https://now.sportsnet.ca',
'referer': 'https://now.sportsnet.ca/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'content-type': '',
'Accept-Charset': ''
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
};

header_str = '&'.join(["{}={}".format(k, v) for k, v in headers.items()])
lic_srv = 'https://prod-lic2widevine.sd-ngp.net/proxy|{0}|R{{SSM}}|'.format(header_str)
name = values['name'][0]

log ("Trying to play '" + values['name'][0] + "' with license server string '" + lic_srv + "'")

inputstream_helper = inputstreamhelper.Helper('mpd', drm='widevine')
if inputstream_helper.check_inputstream():
li = xbmcgui.ListItem(name)
Expand Down Expand Up @@ -146,7 +150,7 @@ def getChannelStream(channelId, channelName, msoName):
stream = sn.getChannel(channelId, channelName, msoName)
if not stream:
# auth token may have expired - attempt re-auth first
print('Auth token may have expired. Attempting re-auth.')
log ("Auth token may have expired. Attempting re-auth.")
creds = getAuthCredentials()
if sn.authorize(creds['u'], creds['p'], creds['m']):
return sn.getChannel(channelId, channelName, msoName)
Expand Down
1 change: 1 addition & 0 deletions resources/language/English/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,5 @@
<string id="30050">Username</string>
<string id="30051">Password</string>
<string id="30052">Cable Provider</string>
<string id="30053">Turn on LOGNOTICE logging?</string>
</strings>
1 change: 1 addition & 0 deletions resources/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
<setting id="username" type="text" label="30050"/>
<setting id="password" type="text" label="30051" option="hidden"/>
<setting id="mso" type="labelenum" label="30052" values="Sportsnet|Rogers|ShawGo|Telus|Cogeco" default="Sportsnet" />
<setting id="LOGNOTICElevel" type="labelenum" label="30053" values="Yes|No" default="No" />
</settings>
5 changes: 3 additions & 2 deletions rogers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import urllib, urllib2, re
from cookies import Cookies
from settings import log

class Rogers:
"""
Expand Down Expand Up @@ -33,7 +34,7 @@ def authorize(streamProvider, username, password):
try:
resp = opener.open(uri)
except:
print "Unable get OAUTH location"
log ("Unable get OAUTH location", True)
return None
Cookies.saveCookieJar(jar)

Expand Down Expand Up @@ -79,7 +80,7 @@ def getOAuthToken(username, password, viewstate, viewstategen, validation, url):
try:
resp = opener.open(url, urllib.urlencode(values))
except urllib2.URLError, e:
print e.args
log (e.args, True)
Cookies.saveCookieJar(jar)

return True
14 changes: 10 additions & 4 deletions settings.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
import os, json
import os, json, xbmcaddon
__settings__ = xbmcaddon.Addon(id='plugin.video.snnow')
noticeloglevel = __settings__.getSetting("LOGNOTICElevel")

def log(msg, error = False):
full_msg = "plugin.video.snnow: {0}".format(msg)
try:
import xbmc
full_msg = "plugin.video.mlslive: {0}".format(msg)
xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGINFO)
except:
print msg
if noticeloglevel == "Yes":
xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGNOTICE)
else:
xbmc.log(full_msg, level=xbmc.LOGERROR if error else xbmc.LOGDEBUG)
except Exception as e:
xbmc.log(e, level= xbmc.LOGDEBUG)

class Settings:

Expand Down
18 changes: 9 additions & 9 deletions snnow.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def checkMSOs(self):
try:
resp = opener.open(self.AUTHORIZED_MSO_URI)
except:
print "Unable get OAUTH location"
log("Unable get OAUTH location", True)
return None
Cookies.saveCookieJar(jar)

Expand Down Expand Up @@ -113,7 +113,7 @@ def getGuideData(self):
try:
resp = opener.open(url)
except urllib2.URLError, e:
print e.args
log(e.args, True)
return None
Cookies.saveCookieJar(jar)

Expand Down Expand Up @@ -171,7 +171,7 @@ def getChannels(self):
try:
resp = opener.open(self.CONFIG_URI)
except urllib2.URLError, e:
print e.args
log(e.args, True)
return None
Cookies.saveCookieJar(jar)

Expand All @@ -193,25 +193,25 @@ def authorize(self, username, password, msoName='Rogers'):
# Get the MSO class from the
mso = MSOFactory.getMSO(msoName)
if mso == None:
print "Invalid MSO"
log("Invalid MSO", True)
return None

# Authorize with the MSO
if not mso.authorize(self, username, password):
print "Failed to authorize with MSO"
log ("Failed to authorize with MSO", True)
return False

channels = self.getChannels()
if mso.getID() == 'Sportsnet':
return True

if not AdobePass.sessionDevice(self):
print "Session device failed."
log ("Session device failed.", True)
return False

result = AdobePass.preAuthorize(self, channels)
if not result:
print "Preauthorize failed."
log ("Preauthorize failed.", True)
return False

return True
Expand All @@ -231,15 +231,15 @@ def getChannel(self, id, name, msoName):
"""
mso = MSOFactory.getMSO(msoName)
if mso == None:
print "Invalid MSO"
log ("Invalid MSO", True)
return None

mso_id = mso.getID()
token = None
if mso_id != 'Sportsnet':
ap = AdobePass()
if not ap.authorizeDevice(self, mso_id, name):
print "Authorize device failed"
log ("Authorize device failed", True)
return None

token = AdobePass.deviceShortAuthorize(self, msoName)
Expand Down
7 changes: 4 additions & 3 deletions sportsnet.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import urllib, urllib2, time, json, re
from cookies import Cookies
from settings import log

class Sportsnet:
"""
Expand Down Expand Up @@ -51,7 +52,7 @@ def mvpd():
resp = opener.open('https://now.sportsnet.ca/mvpd?',
urllib.urlencode(values))
except:
print "Unable to login with mvpd"
log ("Unable to login with mvpd", True)
return False

res = resp.read()
Expand All @@ -70,7 +71,7 @@ def signinmvpd():
resp = opener.open('https://now.sportsnet.ca/signinmvpd?',
urllib.urlencode(values))
except:
print "Unable to login with signinmvpd"
log ("Unable to login with signinmvpd", True)
return False

res = resp.read()
Expand All @@ -90,7 +91,7 @@ def callback(username, password):
try:
resp = opener.open('https://now.sportsnet.ca/secure/mvpd/myrogers?'+urllib.urlencode(values))
except:
print "Unable to login with signinmvpd"
log ("Unable to login with signinmvpd", True)
return False

res = resp.read()
Expand Down