From ddc14cfab1c1a5d46cd51ec8cc6a70d7699493ca Mon Sep 17 00:00:00 2001 From: Jason Robinson Date: Mon, 12 Sep 2016 21:53:25 +0300 Subject: [PATCH] Deprecate receiving user 'key' attribute for Diaspora protocol Instead correct attribute should be 'private_key'. We already use 'private_key' in the message creation code so this is just to unify the user related required attributes. There is a fallback with 'key' for user objects in the receiving payload part of the Diaspora protocol until 0.8.0. --- federation/protocols/diaspora/protocol.py | 16 +++++++++++++--- .../tests/protocols/diaspora/test_diaspora.py | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/federation/protocols/diaspora/protocol.py b/federation/protocols/diaspora/protocol.py index acbc14d..26e87a2 100644 --- a/federation/protocols/diaspora/protocol.py +++ b/federation/protocols/diaspora/protocol.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import logging +import warnings from base64 import b64decode, urlsafe_b64decode, b64encode, urlsafe_b64encode from json import loads, dumps from urllib.parse import unquote_plus @@ -54,6 +55,16 @@ class Protocol(BaseProtocol): self.verify_signature() return self.sender_handle, self.content + def _get_user_key(self, user): + if not hasattr(self.user, "private_key") or not self.user.private_key: + if hasattr(self.user, "key") and self.user.key: + warnings.warn("Using `key` in user object for private key has been deprecated. Please " + "have available `private_key` instead. Usage of `key` will be removed after 0.8.0.", + DeprecationWarning) + return self.user.key + raise EncryptedMessageError("Cannot decrypt private message without user key") + return self.user.private_key + def find_header(self): self.header = self.doc.find(".//{"+PROTOCOL_NS+"}header") if self.header != None: @@ -63,12 +74,11 @@ class Protocol(BaseProtocol): raise NoHeaderInMessageError("Could not find header in message") if not self.user: raise EncryptedMessageError("Cannot decrypt private message without user object") - if not hasattr(self.user, "key") or not self.user.key: - raise EncryptedMessageError("Cannot decrypt private message without user key") + user_private_key = self._get_user_key(self.user) self.encrypted = True self.header = self.parse_header( self.doc.find(".//{"+PROTOCOL_NS+"}encrypted_header").text, - self.user.key + user_private_key ) def get_sender(self): diff --git a/federation/tests/protocols/diaspora/test_diaspora.py b/federation/tests/protocols/diaspora/test_diaspora.py index 73d65be..ecda298 100644 --- a/federation/tests/protocols/diaspora/test_diaspora.py +++ b/federation/tests/protocols/diaspora/test_diaspora.py @@ -13,11 +13,11 @@ from federation.tests.fixtures.payloads import ENCRYPTED_DIASPORA_PAYLOAD, UNENC class MockUser(object): - key = "foobar" + private_key = "foobar" def __init__(self, nokey=False): if nokey: - self.key = None + self.private_key = None def mock_get_contact_key(contact):