aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevendra2014-03-25 11:47:03 +0530
committerDevendra2014-03-25 11:47:03 +0530
commit9ac3ccf6283772b404a0c80945e3cdf3406ac5bf (patch)
tree11ff9dc1a4e585617a522bc9cb56172dfa4adda9
parentb8d1dd86a0d8c4261d4f3765f3ca227d7b555c84 (diff)
downloadpubnub-python-9ac3ccf6283772b404a0c80945e3cdf3406ac5bf.tar.bz2
making version 2 and version 3 work same timepython3
-rw-r--r--common/PubnubBase.py13
-rw-r--r--common/PubnubCrypto.py79
-rw-r--r--python/Pubnub.py148
-rw-r--r--python/unassembled/Platform.py34
4 files changed, 253 insertions, 21 deletions
diff --git a/common/PubnubBase.py b/common/PubnubBase.py
index b8817c1..4c5b422 100644
--- a/common/PubnubBase.py
+++ b/common/PubnubBase.py
@@ -3,7 +3,8 @@ except ImportError: import simplejson as json
import time
import hashlib
-import uuid
+import uuid
+import sys
class PubnubBase(object):
def __init__(
@@ -41,7 +42,7 @@ class PubnubBase(object):
self.secret_key = secret_key
self.cipher_key = cipher_key
self.ssl = ssl_on
- self.pc = PubnubCrypto()
+
if self.ssl :
self.origin = 'https://' + self.origin
@@ -49,6 +50,14 @@ class PubnubBase(object):
self.origin = 'http://' + self.origin
self.uuid = UUID or str(uuid.uuid4())
+
+ if type(sys.version_info) is tuple:
+ self.python_version = 2
+ self.pc = PubnubCrypto2()
+ else:
+ self.python_version = 3
+ self.pc = PubnubCrypto3()
+
if not isinstance(self.uuid, str):
raise AttributeError("pres_uuid must be a string")
diff --git a/common/PubnubCrypto.py b/common/PubnubCrypto.py
index 1f5fc8d..3489216 100644
--- a/common/PubnubCrypto.py
+++ b/common/PubnubCrypto.py
@@ -4,7 +4,84 @@ from base64 import encodestring, decodestring
import hashlib
import hmac
-class PubnubCrypto() :
+class PubnubCrypto2() :
+ """
+ #**
+ #* PubnubCrypto
+ #*
+ #**
+
+ ## Initiate Class
+ pc = PubnubCrypto
+
+ """
+
+ def pad( self, msg, block_size=16 ):
+ """
+ #**
+ #* pad
+ #*
+ #* pad the text to be encrypted
+ #* appends a padding character to the end of the String
+ #* until the string has block_size length
+ #* @return msg with padding.
+ #**
+ """
+ padding = block_size - (len(msg) % block_size)
+ return msg + chr(padding)*padding
+
+ def depad( self, msg ):
+ """
+ #**
+ #* depad
+ #*
+ #* depad the decryptet message"
+ #* @return msg without padding.
+ #**
+ """
+ return msg[0:-ord(msg[-1])]
+
+ def getSecret( self, key ):
+ """
+ #**
+ #* getSecret
+ #*
+ #* hases the key to MD5
+ #* @return key in MD5 format
+ #**
+ """
+ return hashlib.sha256(key).hexdigest()
+
+ def encrypt( self, key, msg ):
+ """
+ #**
+ #* encrypt
+ #*
+ #* encrypts the message
+ #* @return message in encrypted format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ enc = encodestring(cipher.encrypt(self.pad(msg)))
+ return enc
+ def decrypt( self, key, msg ):
+ """
+ #**
+ #* decrypt
+ #*
+ #* decrypts the message
+ #* @return message in decryped format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ return self.depad((cipher.decrypt(decodestring(msg))))
+
+
+class PubnubCrypto3() :
"""
#**
#* PubnubCrypto
diff --git a/python/Pubnub.py b/python/Pubnub.py
index aa7068b..91f67ad 100644
--- a/python/Pubnub.py
+++ b/python/Pubnub.py
@@ -16,7 +16,84 @@ from base64 import encodestring, decodestring
import hashlib
import hmac
-class PubnubCrypto() :
+class PubnubCrypto2() :
+ """
+ #**
+ #* PubnubCrypto
+ #*
+ #**
+
+ ## Initiate Class
+ pc = PubnubCrypto
+
+ """
+
+ def pad( self, msg, block_size=16 ):
+ """
+ #**
+ #* pad
+ #*
+ #* pad the text to be encrypted
+ #* appends a padding character to the end of the String
+ #* until the string has block_size length
+ #* @return msg with padding.
+ #**
+ """
+ padding = block_size - (len(msg) % block_size)
+ return msg + chr(padding)*padding
+
+ def depad( self, msg ):
+ """
+ #**
+ #* depad
+ #*
+ #* depad the decryptet message"
+ #* @return msg without padding.
+ #**
+ """
+ return msg[0:-ord(msg[-1])]
+
+ def getSecret( self, key ):
+ """
+ #**
+ #* getSecret
+ #*
+ #* hases the key to MD5
+ #* @return key in MD5 format
+ #**
+ """
+ return hashlib.sha256(key).hexdigest()
+
+ def encrypt( self, key, msg ):
+ """
+ #**
+ #* encrypt
+ #*
+ #* encrypts the message
+ #* @return message in encrypted format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ enc = encodestring(cipher.encrypt(self.pad(msg)))
+ return enc
+ def decrypt( self, key, msg ):
+ """
+ #**
+ #* decrypt
+ #*
+ #* decrypts the message
+ #* @return message in decryped format
+ #**
+ """
+ secret = self.getSecret(key)
+ Initial16bytes='0123456789012345'
+ cipher = AES.new(secret[0:32],AES.MODE_CBC,Initial16bytes)
+ return self.depad((cipher.decrypt(decodestring(msg))))
+
+
+class PubnubCrypto3() :
"""
#**
#* PubnubCrypto
@@ -97,7 +174,8 @@ except ImportError: import simplejson as json
import time
import hashlib
-import uuid
+import uuid
+import sys
class PubnubBase(object):
def __init__(
@@ -128,14 +206,14 @@ class PubnubBase(object):
pubnub = Pubnub( 'PUBLISH-KEY', 'SUBSCRIBE-KEY', 'SECRET-KEY', False )
"""
- self.origin = origin
- self.limit = 1800
- self.publish_key = publish_key
- self.subscribe_key = subscribe_key
- self.secret_key = secret_key
- self.cipher_key = cipher_key
- self.ssl = ssl_on
- self.pc = PubnubCrypto()
+ self.origin = origin
+ self.limit = 1800
+ self.publish_key = publish_key
+ self.subscribe_key = subscribe_key
+ self.secret_key = secret_key
+ self.cipher_key = cipher_key
+ self.ssl = ssl_on
+
if self.ssl :
self.origin = 'https://' + self.origin
@@ -143,6 +221,14 @@ class PubnubBase(object):
self.origin = 'http://' + self.origin
self.uuid = UUID or str(uuid.uuid4())
+
+ if type(sys.version_info) is tuple:
+ self.python_version = 2
+ self.pc = PubnubCrypto2()
+ else:
+ self.python_version = 3
+ self.pc = PubnubCrypto3()
+
if not isinstance(self.uuid, str):
raise AttributeError("pres_uuid must be a string")
@@ -574,8 +660,10 @@ class PubnubCore(PubnubBase):
return True
-
-import urllib.request
+try:
+ import urllib.request
+except:
+ import urllib2
class Pubnub(PubnubCore):
def __init__(
@@ -597,19 +685,51 @@ class Pubnub(PubnubCore):
origin = origin,
uuid = pres_uuid
)
+ if self.python_version == 2:
+ self._request = self._request2
+ else:
+ self._request = self._request3
- def _request( self, request, callback = None ) :
+ def _request2( self, request, callback = None ) :
+ ## Build URL
+ url = self.getUrl(request)
+
+ ## Send Request Expecting JSONP Response
+ try:
+ try: usock = urllib2.urlopen( url, None, 310 )
+ except TypeError: usock = urllib2.urlopen( url, None )
+ response = usock.read()
+ usock.close()
+ resp_json = json.loads(response)
+ except:
+ return None
+
+ if (callback):
+ callback(resp_json)
+ else:
+ return resp_json
+
+
+ def _request3( self, request, callback = None ) :
## Build URL
url = self.getUrl(request)
- print(url)
## Send Request Expecting JSONP Response
try:
response = urllib.request.urlopen(url,timeout=310)
resp_json = json.loads(response.read().decode("utf-8"))
except Exception as e:
+ print(e)
return None
if (callback):
callback(resp_json)
else:
return resp_json
+
+ '''
+ def _request(self, request, callback = None):
+ if self.python_version == 2:
+ return self._request2(request,callback)
+ else:
+ return self._request3(request, callback)
+ '''
diff --git a/python/unassembled/Platform.py b/python/unassembled/Platform.py
index 55ec449..c60690f 100644
--- a/python/unassembled/Platform.py
+++ b/python/unassembled/Platform.py
@@ -1,5 +1,7 @@
-
-import urllib.request
+try:
+ import urllib.request
+except:
+ import urllib2
class Pubnub(PubnubCore):
def __init__(
@@ -21,16 +23,40 @@ class Pubnub(PubnubCore):
origin = origin,
uuid = pres_uuid
)
+ if self.python_version == 2:
+ self._request = self._request2
+ else:
+ self._request = self._request3
+
+ def _request2( self, request, callback = None ) :
+ ## Build URL
+ url = self.getUrl(request)
+
+ ## Send Request Expecting JSONP Response
+ try:
+ try: usock = urllib2.urlopen( url, None, 310 )
+ except TypeError: usock = urllib2.urlopen( url, None )
+ response = usock.read()
+ usock.close()
+ resp_json = json.loads(response)
+ except:
+ return None
+
+ if (callback):
+ callback(resp_json)
+ else:
+ return resp_json
+
- def _request( self, request, callback = None ) :
+ def _request3( self, request, callback = None ) :
## Build URL
url = self.getUrl(request)
- print(url)
## Send Request Expecting JSONP Response
try:
response = urllib.request.urlopen(url,timeout=310)
resp_json = json.loads(response.read().decode("utf-8"))
except Exception as e:
+ print(e)
return None
if (callback):