diff options
| author | Devendra | 2014-03-25 11:47:03 +0530 | 
|---|---|---|
| committer | Devendra | 2014-03-25 11:47:03 +0530 | 
| commit | 9ac3ccf6283772b404a0c80945e3cdf3406ac5bf (patch) | |
| tree | 11ff9dc1a4e585617a522bc9cb56172dfa4adda9 | |
| parent | b8d1dd86a0d8c4261d4f3765f3ca227d7b555c84 (diff) | |
| download | pubnub-python-9ac3ccf6283772b404a0c80945e3cdf3406ac5bf.tar.bz2 | |
making version 2 and version 3 work same timepython3
| -rw-r--r-- | common/PubnubBase.py | 13 | ||||
| -rw-r--r-- | common/PubnubCrypto.py | 79 | ||||
| -rw-r--r-- | python/Pubnub.py | 148 | ||||
| -rw-r--r-- | python/unassembled/Platform.py | 34 | 
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): | 
