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): def decrypt(payload, private_key):
"""Decrypt an encrypted JSON payload and return the Magic Envelope document inside.""" """Decrypt an encrypted JSON payload and return the Magic Envelope document inside."""
cipher = PKCS1_v1_5.new(private_key) cipher = PKCS1_v1_5.new(private_key)
aes_key = json.loads( aes_key_str = cipher.decrypt(b64decode(payload.get("aes_key")), sentinel=None)
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")) key = b64decode(aes_key.get("key"))
iv = b64decode(aes_key.get("iv")) iv = b64decode(aes_key.get("iv"))
encrypted_magic_envelope = b64decode(payload.get("encrypted_magic_envelope")) 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.base import BaseProtocol
from federation.protocols.diaspora.encrypted import EncryptedPayload from federation.protocols.diaspora.encrypted import EncryptedPayload
from federation.protocols.diaspora.magic_envelope import MagicEnvelope from federation.protocols.diaspora.magic_envelope import MagicEnvelope
from federation.utils.text import decode_if_bytes
logger = logging.getLogger("federation") logger = logging.getLogger("federation")
@ -29,7 +30,7 @@ def identify_payload(payload):
""" """
# Private encrypted JSON payload # Private encrypted JSON payload
try: try:
data = json.loads(payload) data = json.loads(decode_if_bytes(payload))
if "encrypted_magic_envelope" in data: if "encrypted_magic_envelope" in data:
return True return True
except Exception: except Exception:
@ -67,7 +68,7 @@ class Protocol(BaseProtocol):
def store_magic_envelope_doc(self, payload): def store_magic_envelope_doc(self, payload):
"""Get the Magic Envelope, trying JSON first.""" """Get the Magic Envelope, trying JSON first."""
try: try:
json_payload = json.loads(payload) json_payload = json.loads(decode_if_bytes(payload))
except ValueError: except ValueError:
# XML payload # XML payload
xml = unquote_plus(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