From 118d65cbd84bf407ff15efaad47918b7504ff718 Mon Sep 17 00:00:00 2001 From: kiv1n Date: Wed, 10 Aug 2016 16:14:46 +0300 Subject: [PATCH 1/3] Fix Yowsup stack and env --- session.py | 2 +- yowsupwrapper.py | 86 ++++++++++++++++++++---------------------------- 2 files changed, 37 insertions(+), 51 deletions(-) diff --git a/session.py b/session.py index 2e0ad99..e90577a 100644 --- a/session.py +++ b/session.py @@ -26,7 +26,7 @@ import logging import urllib import time -from PIL import Image +# from PIL import Image import sys import os diff --git a/yowsupwrapper.py b/yowsupwrapper.py index 3a88938..cf997e7 100644 --- a/yowsupwrapper.py +++ b/yowsupwrapper.py @@ -1,13 +1,14 @@ import logging from yowsup import env +from yowsup.env import S40YowsupEnv from yowsup.stacks import YowStack from yowsup.common import YowConstants from yowsup.layers import YowLayerEvent, YowParallelLayer from yowsup.layers.auth import AuthError # Layers -from yowsup.layers.axolotl import YowAxolotlLayer +# from yowsup.layers.axolotl import YowAxolotlLayer from yowsup.layers.auth import YowCryptLayer, YowAuthenticationProtocolLayer from yowsup.layers.coder import YowCoderLayer from yowsup.layers.logger import YowLoggerLayer @@ -46,62 +47,47 @@ from functools import partial #from session import MsgIDs # Temporarily work around yowsup padding bugs with new protocol -class UpdatedYowAxolotlLayer(YowAxolotlLayer): - def decodeInt7bit(self, string): - idx = 0 - while ord(string[idx]) >= 128: - idx += 1 - consumedBytes = idx + 1 - value = 0 - while idx >= 0: - value <<= 7 - value += ord(string[idx]) % 128 - idx -= 1 - return value, consumedBytes - - def unpadV2Plaintext(self, v2plaintext): - end = -ord(v2plaintext[-1]) # length of the left padding - length,consumed = self.decodeInt7bit(v2plaintext[1:]) - return v2plaintext[1+consumed:end] +# class UpdatedYowAxolotlLayer(YowAxolotlLayer): +# def decodeInt7bit(self, string): +# idx = 0 +# while ord(string[idx]) >= 128: +# idx += 1 +# consumedBytes = idx + 1 +# value = 0 +# while idx >= 0: +# value <<= 7 +# value += ord(string[idx]) % 128 +# idx -= 1 +# return value, consumedBytes +# +# def unpadV2Plaintext(self, v2plaintext): +# end = -ord(v2plaintext[-1]) # length of the left padding +# length,consumed = self.decodeInt7bit(v2plaintext[1:]) +# return v2plaintext[1+consumed:end] # Temporary env until yowsup updates -class UpdatedS40YowsupEnv(env.S40YowsupEnv): - _VERSION = "2.13.39" - _OS_NAME= "S40" - _OS_VERSION = "14.26" - _DEVICE_NAME = "302" - _MANUFACTURER = "Nokia" - _TOKEN_STRING = "PdA2DJyKoUrwLw1Bg6EIhzh502dF9noR9uFCllGk{phone}" - _AXOLOTL = True +# class UpdatedS40YowsupEnv(env.S40YowsupEnv): +# _VERSION = "2.13.39" +# _OS_NAME= "S40" +# _OS_VERSION = "14.26" +# _DEVICE_NAME = "302" +# _MANUFACTURER = "Nokia" +# _TOKEN_STRING = "PdA2DJyKoUrwLw1Bg6EIhzh502dF9noR9uFCllGk{phone}" +# _AXOLOTL = True +from yowsup.stacks import YowStackBuilder + class YowsupApp(object): def __init__(self): - env.CURRENT_ENV = UpdatedS40YowsupEnv() + env.CURRENT_ENV = env.S40YowsupEnv() - layers = (YowsupAppLayer, - YowParallelLayer((YowAuthenticationProtocolLayer, - YowMessagesProtocolLayer, - YowReceiptProtocolLayer, - YowAckProtocolLayer, - YowMediaProtocolLayer, - YowIbProtocolLayer, - YowIqProtocolLayer, - YowNotificationsProtocolLayer, - YowContactsIqProtocolLayer, - YowChatstateProtocolLayer, - YowCallsProtocolLayer, - YowPrivacyProtocolLayer, - YowProfilesProtocolLayer, - YowGroupsProtocolLayer, - YowPresenceProtocolLayer)), - UpdatedYowAxolotlLayer, - YowCoderLayer, - YowCryptLayer, - YowStanzaRegulator, - YowNetworkLayer - ) self.logger = logging.getLogger(self.__class__.__name__) - self.stack = YowStack(layers) + stackBuilder = YowStackBuilder() + + self.stack = stackBuilder \ + .pushDefaultLayers(True) \ + .push(YowsupAppLayer) \ + .build() self.stack.broadcastEvent( YowLayerEvent(YowsupAppLayer.EVENT_START, caller = self) ) From c12b136b76dbbcf66cee93d2d3909cc028ca9dbe Mon Sep 17 00:00:00 2001 From: kiv1n Date: Wed, 10 Aug 2016 22:08:00 +0300 Subject: [PATCH 2/3] Fix text encode for cyrillic --- session.py | 2 +- utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/session.py b/session.py index e90577a..5886f65 100644 --- a/session.py +++ b/session.py @@ -268,7 +268,7 @@ class Session(YowsupApp): self.logger.debug('received TextMessage' + ' '.join(map(str, [ _id, _from, to, notify, timestamp, - participant, offline, retry, body + participant, offline, retry, body.encode("utf-8") ])) ) buddy = _from.split('@')[0] diff --git a/utils.py b/utils.py index f6d120c..5e5c571 100644 --- a/utils.py +++ b/utils.py @@ -43,7 +43,7 @@ def ago(secs): return "%d %s ago" % (diff, period) def softToUni(message): - message = message.decode("utf-8") + message = message.encode("utf-8") return e4u.translate(message, reverse=False, **e4u.SOFTBANK_TRANSLATE_PROFILE) def decodePassword(password): From 8e92eaedc2ecdeac9659a5b042cc7aaa7e3416a8 Mon Sep 17 00:00:00 2001 From: kiv1n Date: Wed, 24 Aug 2016 20:52:02 +0300 Subject: [PATCH 3/3] Add feature for send data for decrypt image on onImage() method --- session.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/session.py b/session.py index 5886f65..eca70c3 100644 --- a/session.py +++ b/session.py @@ -298,7 +298,11 @@ class Session(YowsupApp): participant = image.participant if image.caption is None: image.caption = '' - message = image.url + ' ' + image.caption + # Add to message data for descrypt + iv, cipherKey = image.getDecryptData(); + ivHexString = "".join("{:02x}".format(ord(c)) for c in iv) + cipherKeyHexString = "".join("{:02x}".format(ord(c)) for c in cipherKey) + message = image.url + ';' + ivHexString + ';' + cipherKeyHexString if participant is not None: # Group message partname = participant.split('@')[0] self.sendGroupMessageToXMPP(buddy, partname, message, image.timestamp)