Move to new positions
This commit is contained in:
71
obok_src/obok/legacy_obok.py
Normal file
71
obok_src/obok/legacy_obok.py
Normal file
@@ -0,0 +1,71 @@
|
||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
import os, sys
|
||||
import binascii, hashlib, re, string
|
||||
|
||||
class legacy_obok(object):
|
||||
def __init__(self):
|
||||
self._userkey = ''
|
||||
|
||||
@property
|
||||
def get_legacy_cookie_id(self):
|
||||
if self._userkey != '':
|
||||
return self._userkey
|
||||
self._userkey = self.__oldcookiedeviceid()
|
||||
return self._userkey
|
||||
|
||||
def __bytearraytostring(self, bytearr):
|
||||
wincheck = re.match('@ByteArray\\((.+)\\)', bytearr)
|
||||
if wincheck:
|
||||
return wincheck.group(1)
|
||||
return bytearr
|
||||
|
||||
def plist_to_dictionary(self, filename):
|
||||
from subprocess import Popen, PIPE
|
||||
from plistlib import readPlistFromString
|
||||
'Pipe the binary plist through plutil and parse the xml output'
|
||||
with open(filename, 'rb') as f:
|
||||
content = f.read()
|
||||
args = ['plutil', '-convert', 'xml1', '-o', '-', '--', '-']
|
||||
p = Popen(args, stdin=PIPE, stdout=PIPE)
|
||||
p.stdin.write(content)
|
||||
out, err = p.communicate()
|
||||
return readPlistFromString(out)
|
||||
|
||||
def __oldcookiedeviceid(self):
|
||||
'''Optionally attempt to get a device id using the old cookie method.
|
||||
Must have _winreg installed on Windows machines for successful key retrieval.'''
|
||||
wsuid = ''
|
||||
pwsdid = ''
|
||||
try:
|
||||
if sys.platform.startswith('win'):
|
||||
import _winreg
|
||||
regkey_browser = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Software\\Kobo\\Kobo Desktop Edition\\Browser')
|
||||
cookies = _winreg.QueryValueEx(regkey_browser, 'cookies')
|
||||
bytearrays = cookies[0]
|
||||
elif sys.platform.startswith('darwin'):
|
||||
prefs = os.path.join(os.environ['HOME'], 'Library/Preferences/com.kobo.Kobo Desktop Edition.plist')
|
||||
cookies = self.plist_to_dictionary(prefs)
|
||||
bytearrays = cookies['Browser.cookies']
|
||||
for bytearr in bytearrays:
|
||||
cookie = self.__bytearraytostring(bytearr)
|
||||
wsuidcheck = re.match("^wsuid=([0-9a-f-]+)", cookie)
|
||||
if(wsuidcheck):
|
||||
wsuid = wsuidcheck.group(1)
|
||||
pwsdidcheck = re.match('^pwsdid=([0-9a-f-]+)', cookie)
|
||||
if (pwsdidcheck):
|
||||
pwsdid = pwsdidcheck.group(1)
|
||||
if (wsuid == '' or pwsdid == ''):
|
||||
return None
|
||||
preuserkey = string.join((pwsdid, wsuid), '')
|
||||
userkey = hashlib.sha256(preuserkey).hexdigest()
|
||||
return binascii.a2b_hex(userkey[32:])
|
||||
except KeyError:
|
||||
print ('No "cookies" key found in Kobo plist: no legacy user key found.')
|
||||
return None
|
||||
except:
|
||||
print ('Error parsing Kobo plist: no legacy user key found.')
|
||||
return None
|
||||
Reference in New Issue
Block a user