summaryrefslogtreecommitdiffstats
path: root/Other_Tools
diff options
context:
space:
mode:
authorapprenticeharper <[email protected]>2015-09-03 07:49:09 +0100
committerapprenticeharper <[email protected]>2015-09-03 07:49:09 +0100
commitd54dc38c2d3083eb802557aa363498cf27f25f39 (patch)
tree872735b41dbbad61965ed5ae7eb47cfc22faf717 /Other_Tools
parent3c322f3695d126476dcfcc4ce4f848b382d40e06 (diff)
Fix for Kobo Desktop 3.17
Diffstat (limited to 'Other_Tools')
-rw-r--r--Other_Tools/Kobo/obok.py45
1 files changed, 35 insertions, 10 deletions
diff --git a/Other_Tools/Kobo/obok.py b/Other_Tools/Kobo/obok.py
index 42620d2..0545152 100644
--- a/Other_Tools/Kobo/obok.py
+++ b/Other_Tools/Kobo/obok.py
@@ -1,6 +1,12 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# Version 3.1.4 September 2015
+# Updated for version 3.17 of the Windows Desktop app.
+#
+# Version 3.1.3 August 2015
+# Add translations for Portuguese and Arabic
+#
# Version 3.1.2 January 2015
# Add coding, version number and version announcement
#
@@ -109,7 +115,7 @@
#
"""Manage all Kobo books, either encrypted or DRM-free."""
-__version__ = '3.1.1'
+__version__ = '3.1.3'
import sys
import os
@@ -217,7 +223,7 @@ class KoboLibrary(object):
of books, their titles, and the user's encryption key(s)."""
def __init__ (self):
- print u"Obok v{0}\nCopyright © 2012-2014 Physisticated et al.".format(__version__)
+ print u"Obok v{0}\nCopyright © 2012-2015 Physisticated et al.".format(__version__)
if sys.platform.startswith('win'):
if sys.getwindowsversion().major > 5:
self.kobodir = os.environ['LOCALAPPDATA']
@@ -246,9 +252,8 @@ class KoboLibrary(object):
"""
if len(self._userkeys) != 0:
return self._userkeys
- userid = self.__getuserid()
for macaddr in self.__getmacaddrs():
- self._userkeys.append(self.__getuserkey(macaddr, userid))
+ self._userkeys.extend(self.__getuserkeys(macaddr))
return self._userkeys
@property
@@ -294,13 +299,33 @@ class KoboLibrary(object):
macaddrs.append(m[0].upper())
return macaddrs
- def __getuserid (self):
- return self.__cursor.execute('SELECT UserID FROM user WHERE HasMadePurchase = "true"').fetchone()[0]
-
- def __getuserkey (self, macaddr, userid):
+ def __getuserids (self):
+ userids = []
+ cursor = self.__cursor.execute('SELECT UserID FROM user WHERE HasMadePurchase = "true"')
+ row = cursor.fetchone()
+ while row is not None:
+ try:
+ userid = row[0]
+ userids.append(userid)
+ except:
+ pass
+ row = cursor.fetchone()
+ return userids
+
+ def __getuserkeys (self, macaddr):
+ userids = self.__getuserids()
+ userkeys = []
+ # This version is used for versions before 3.17.0.
deviceid = hashlib.sha256('NoCanLook' + macaddr).hexdigest()
- userkey = hashlib.sha256(deviceid + userid).hexdigest()
- return binascii.a2b_hex(userkey[32:])
+ for userid in userids:
+ userkey = hashlib.sha256(deviceid + userid).hexdigest()
+ userkeys.append(binascii.a2b_hex(userkey[32:]))
+ # This version is used for 3.17.0 and later.
+ deviceid = hashlib.sha256('XzUhGYdFp' + macaddr).hexdigest()
+ for userid in userids:
+ userkey = hashlib.sha256(deviceid + userid).hexdigest()
+ userkeys.append(binascii.a2b_hex(userkey[32:]))
+ return userkeys
class KoboBook(object):
"""A Kobo book.