From 006632f5d118d2feb7536f53e798a860a059a979 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Thu, 11 Nov 2021 15:32:55 +0200 Subject: [PATCH 1/3] Add a check for sendBroadcast API command with nonexisting address --- src/tests/test_api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/tests/test_api.py b/src/tests/test_api.py index 835b4afb..57ec196d 100644 --- a/src/tests/test_api.py +++ b/src/tests/test_api.py @@ -420,6 +420,13 @@ class TestAPI(TestAPIProto): finally: self.assertEqual(self.api.deleteAddress(addr), 'success') + # sending from an address without private key + # (Bitmessage new releases/announcements) + result = self.api.sendBroadcast( + 'BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw', + base64.encodestring('test_subject'), msg) + self.assertRegexpMatches(result, r'^API Error 0013:') + def test_chan(self): """Testing chan creation/joining""" # Create chan with known address From 0a2470ebb7715999064294e994f97ca02ca2d5a5 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Mon, 29 Nov 2021 17:30:39 +0200 Subject: [PATCH 2/3] Use BMConfigParser.safeGetBoolean() in the methods for send* API commands --- src/api.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/api.py b/src/api.py index de220cc4..b2833070 100644 --- a/src/api.py +++ b/src/api.py @@ -1117,10 +1117,8 @@ class BMRPCDispatcher(object): toAddress = addBMIfNotPresent(toAddress) fromAddress = addBMIfNotPresent(fromAddress) self._verifyAddress(fromAddress) - try: - fromAddressEnabled = self.config.getboolean( - fromAddress, 'enabled') - except BaseException: + fromAddressEnabled = self.config.safeGetBoolean(fromAddress, 'enabled') + if fromAddressEnabled is None: raise APIError( 13, 'Could not find your fromAddress in the keys.dat file.') if not fromAddressEnabled: @@ -1163,9 +1161,7 @@ class BMRPCDispatcher(object): TTL = 28 * 24 * 60 * 60 fromAddress = addBMIfNotPresent(fromAddress) self._verifyAddress(fromAddress) - try: - self.config.getboolean(fromAddress, 'enabled') - except BaseException: + if not self.config.safeGetBoolean(fromAddress, 'enabled'): raise APIError( 13, 'Could not find your fromAddress in the keys.dat file.') toAddress = str_broadcast_subscribers From d45014e5589a41e6034f9d5001d286012bead264 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Sat, 11 Dec 2021 17:45:12 +0200 Subject: [PATCH 3/3] Format test_api for PEP8 --- src/tests/samples.py | 15 ++++++++----- src/tests/test_api.py | 50 ++++++++++++++++++++----------------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/tests/samples.py b/src/tests/samples.py index e1a3e676..e27eaaae 100644 --- a/src/tests/samples.py +++ b/src/tests/samples.py @@ -21,7 +21,8 @@ sample_ripe = b'003cd097eb7f35c87b5dc8b4538c22cb55312a9f' # stream: 1, version: 2 sample_address = 'BM-onkVu1KKL2UaUss5Upg9vXmqd3esTmV79' -sample_factor = 66858749573256452658262553961707680376751171096153613379801854825275240965733 +sample_factor = \ + 66858749573256452658262553961707680376751171096153613379801854825275240965733 # G * sample_factor sample_point = ( 33567437183004486938355437500683826356288335339807546987348409590129959362313, @@ -37,8 +38,12 @@ sample_daddr3_512 = 18875720106589866286514488037355423395410802084648916523381 sample_daddr4_512 = 25152821841976547050350277460563089811513157529113201589004 sample_statusbar_msg = "new status bar message" -sample_inbox_msg_ids = ['27e644765a3e4b2e973ee7ccf958ea20', '51fc5531-3989-4d69-bbb5-68d64b756f5b', - '2c975c515f8b414db5eea60ba57ba455', 'bc1f2d8a-681c-4cc0-9a12-6067c7e1ac24'] -# second address in sample_test_subscription_address is for the announcement broadcast -sample_test_subscription_address = ['BM-2cWQLCBGorT9pUGkYSuGGVr9LzE4mRnQaq', 'BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw'] +sample_inbox_msg_ids = [ + '27e644765a3e4b2e973ee7ccf958ea20', '51fc5531-3989-4d69-bbb5-68d64b756f5b', + '2c975c515f8b414db5eea60ba57ba455', 'bc1f2d8a-681c-4cc0-9a12-6067c7e1ac24'] +# second address in sample_subscription_addresses is +# for the announcement broadcast, but is it matter? +sample_subscription_addresses = [ + 'BM-2cWQLCBGorT9pUGkYSuGGVr9LzE4mRnQaq', + 'BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw'] sample_subscription_name = 'test sub' diff --git a/src/tests/test_api.py b/src/tests/test_api.py index 57ec196d..14617dfe 100644 --- a/src/tests/test_api.py +++ b/src/tests/test_api.py @@ -12,8 +12,9 @@ from six.moves import xmlrpc_client # nosec import psutil from .samples import ( - sample_seed, sample_deterministic_addr3, sample_deterministic_addr4, sample_statusbar_msg, - sample_inbox_msg_ids, sample_test_subscription_address, sample_subscription_name) + sample_deterministic_addr3, sample_deterministic_addr4, sample_seed, + sample_inbox_msg_ids, sample_statusbar_msg, sample_subscription_name, + sample_subscription_addresses) from .test_process import TestProcessProto @@ -114,19 +115,22 @@ class TestAPI(TestAPIProto): ) self.assertEqual( len(json.loads( - self.api.getInboxMessageById(hexlify(sample_inbox_msg_ids[2])))["inboxMessage"]), + self.api.getInboxMessageById( + hexlify(sample_inbox_msg_ids[2])))["inboxMessage"]), 1 ) self.assertEqual( len(json.loads( - self.api.getInboxMessagesByReceiver(sample_deterministic_addr4))["inboxMessages"]), + self.api.getInboxMessagesByReceiver( + sample_deterministic_addr4))["inboxMessages"]), 4 ) def test_message_trash(self): """Test message inbox methods""" - messages_before_delete = len(json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]) + messages_before_delete = len( + json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]) self.assertEqual( self.api.trashMessage(hexlify(sample_inbox_msg_ids[0])), 'Trashed message (assuming message existed).' @@ -136,8 +140,8 @@ class TestAPI(TestAPIProto): 'Trashed inbox message (assuming message existed).' ) self.assertEqual( - len(json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]), - messages_before_delete - 2 + messages_before_delete - 2, + len(json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]) ) self.assertEqual( self.api.undeleteMessage(hexlify(sample_inbox_msg_ids[0])), @@ -148,8 +152,8 @@ class TestAPI(TestAPIProto): 'Undeleted message' ) self.assertEqual( - len(json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]), - messages_before_delete + messages_before_delete, + len(json.loads(self.api.getAllInboxMessageIds())["inboxMessageIds"]) ) def test_clientstatus_consistency(self): @@ -265,7 +269,9 @@ class TestAPI(TestAPIProto): """Testing the API commands related to subscriptions""" self.assertEqual( - self.api.addSubscription(sample_test_subscription_address[0], sample_subscription_name.encode('base64')), + self.api.addSubscription( + sample_subscription_addresses[0], + sample_subscription_name.encode('base64')), 'Added subscription.' ) @@ -273,18 +279,16 @@ class TestAPI(TestAPIProto): # check_address for sub in json.loads(self.api.listSubscriptions())['subscriptions']: # special address, added when sqlThread starts - if sub['address'] == sample_test_subscription_address[0]: + if sub['address'] == sample_subscription_addresses[0]: added_subscription = sub + self.assertEqual( + base64.decodestring(sub['label']), sample_subscription_name) + self.assertTrue(sub['enabled']) break - self.assertEqual( - base64.decodestring(added_subscription['label']) if added_subscription['label'] else None, - sample_subscription_name) - self.assertTrue(added_subscription['enabled']) - for s in json.loads(self.api.listSubscriptions())['subscriptions']: # special address, added when sqlThread starts - if s['address'] == sample_test_subscription_address[1]: + if s['address'] == sample_subscription_addresses[1]: self.assertEqual( base64.decodestring(s['label']), 'Bitmessage new releases/announcements') @@ -295,17 +299,16 @@ class TestAPI(TestAPIProto): 'Could not find Bitmessage new releases/announcements' ' in subscriptions') self.assertEqual( - self.api.deleteSubscription(sample_test_subscription_address[0]), + self.api.deleteSubscription(sample_subscription_addresses[0]), 'Deleted subscription if it existed.') self.assertEqual( - self.api.deleteSubscription(sample_test_subscription_address[1]), + self.api.deleteSubscription(sample_subscription_addresses[1]), 'Deleted subscription if it existed.') self.assertEqual( json.loads(self.api.listSubscriptions())['subscriptions'], []) def test_send(self): """Test message sending""" - # self.api.createDeterministicAddresses(self._seed, 1, 4) addr = self._add_random_address('random_2') msg = base64.encodestring('test message') msg_subject = base64.encodestring('test_subject') @@ -330,13 +333,6 @@ class TestAPI(TestAPIProto): break else: raise KeyError - # Find the message in inbox - # for m in json.loads( - # self.api.getInboxMessagesByReceiver( - # 'BM-2cWzSnwjJ7yRP3nLEWUV5LisTZyREWSzUK'))['inboxMessages']: - # if m['subject'] == msg_subject: - # inbox_msg = m['message'] - # break except ValueError: self.fail('sendMessage returned error or ackData is not hex') except KeyError: