Ensure JSON payloads are decoded from bytes when needed

Refs: #83
merge-requests/130/head
Jason Robinson 2017-07-05 00:56:28 +03:00
rodzic 92e7a95700
commit 670ec79fd5
3 zmienionych plików z 10 dodań i 5 usunięć

Wyświetl plik

@ -20,9 +20,8 @@ class EncryptedPayload:
def decrypt(payload, private_key):
"""Decrypt an encrypted JSON payload and return the Magic Envelope document inside."""
cipher = PKCS1_v1_5.new(private_key)
aes_key = json.loads(
cipher.decrypt(b64decode(payload.get("aes_key")), sentinel=None)
)
aes_key_str = cipher.decrypt(b64decode(payload.get("aes_key")), sentinel=None)
aes_key = json.loads(aes_key_str.decode("utf-8"))
key = b64decode(aes_key.get("key"))
iv = b64decode(aes_key.get("iv"))
encrypted_magic_envelope = b64decode(payload.get("encrypted_magic_envelope"))

Wyświetl plik

@ -14,6 +14,7 @@ from federation.exceptions import EncryptedMessageError, NoSenderKeyFoundError,
from federation.protocols.base import BaseProtocol
from federation.protocols.diaspora.encrypted import EncryptedPayload
from federation.protocols.diaspora.magic_envelope import MagicEnvelope
from federation.utils.text import decode_if_bytes
logger = logging.getLogger("federation")
@ -29,7 +30,7 @@ def identify_payload(payload):
"""
# Private encrypted JSON payload
try:
data = json.loads(payload)
data = json.loads(decode_if_bytes(payload))
if "encrypted_magic_envelope" in data:
return True
except Exception:
@ -67,7 +68,7 @@ class Protocol(BaseProtocol):
def store_magic_envelope_doc(self, payload):
"""Get the Magic Envelope, trying JSON first."""
try:
json_payload = json.loads(payload)
json_payload = json.loads(decode_if_bytes(payload))
except ValueError:
# XML payload
xml = unquote_plus(payload)

Wyświetl plik

@ -0,0 +1,5 @@
def decode_if_bytes(text):
try:
return text.decode("utf-8")
except AttributeError:
return text