kopia lustrzana https://gitlab.com/jaywink/federation
rodzic
92e7a95700
commit
670ec79fd5
|
@ -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"))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
def decode_if_bytes(text):
|
||||||
|
try:
|
||||||
|
return text.decode("utf-8")
|
||||||
|
except AttributeError:
|
||||||
|
return text
|
Ładowanie…
Reference in New Issue