From 4572f255fbf4e8450552926ffe8d87ebc78250a9 Mon Sep 17 00:00:00 2001 From: Kevin F Date: Sat, 1 Oct 2022 04:25:46 +0000 Subject: [PATCH] Wot adjustments, blockdb plugin events --- src/blockdb/__init__.py | 6 ++++-- .../official-plugins/wot/cli/__init__.py | 1 + static-data/official-plugins/wot/main.py | 16 +++++++++++--- .../wot/wot/blockprocessingevent.py | 21 +++++++++---------- .../processidentityannounce.py | 2 +- .../processrevokeidentity.py | 2 +- .../processrevokesignature.py | 4 +++- .../processtrustsignature.py | 2 +- .../official-plugins/wot/wot/wotcommand.py | 7 +++++++ .../wot/test_process_identity_revoke.py | 6 +++++- 10 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 static-data/official-plugins/wot/cli/__init__.py create mode 100644 static-data/official-plugins/wot/wot/wotcommand.py diff --git a/src/blockdb/__init__.py b/src/blockdb/__init__.py index 67968cd8..82e5156c 100644 --- a/src/blockdb/__init__.py +++ b/src/blockdb/__init__.py @@ -1,6 +1,7 @@ from typing import Callable, Generator, List from onionrblocks import Block +from onionrplugins import onionrevents import db @@ -15,8 +16,9 @@ block_storage_observers: List[Callable] = [] def add_block_to_db(block: Block): - # Raises db.DuplicateKey if dupe - db.set_if_new(block_db_path, block.id, block.raw) + onionrevents.event('before_block_db_add', block, threaded=False) + db.set_if_new(block_db_path, block.id, block.raw) # Raises db.DuplicateKey if dupe + onionrevents.event('after_block_db_add', block, threaded=False) def has_block(block_hash): diff --git a/static-data/official-plugins/wot/cli/__init__.py b/static-data/official-plugins/wot/cli/__init__.py new file mode 100644 index 00000000..a93def53 --- /dev/null +++ b/static-data/official-plugins/wot/cli/__init__.py @@ -0,0 +1 @@ +import tty \ No newline at end of file diff --git a/static-data/official-plugins/wot/main.py b/static-data/official-plugins/wot/main.py index bed5bc52..5faa9ca1 100644 --- a/static-data/official-plugins/wot/main.py +++ b/static-data/official-plugins/wot/main.py @@ -14,6 +14,7 @@ from gossip.peerset import gossip_peer_set from logger import log as logging import onionrplugins +from onionrplugins.pluginapis import plugin_apis locale.setlocale(locale.LC_ALL, '') sys.path.insert(0, os.path.dirname(os.path.realpath(__file__))) @@ -34,15 +35,24 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ plugin_name = 'wot' -PLUGIN_VERSION = '0.0.0' +PLUGIN_VERSION = '0.0.1' from wot.identity import identities from wot.loadfromblocks import load_identities_from_blocks - +from wot.identity import get_distance def on_init(api, data=None): logging.info( f"Web of Trust Plugin v{PLUGIN_VERSION} enabled") #onionrplugins.plugin_apis['wot'] = wot_test + plugin_apis['wot.get_distance'] = get_distance - list(map(lambda x: identities.add(x), load_identities_from_blocks())) + list( + map( + lambda x: identities.add(x), + load_identities_from_blocks()) + ) + + +def on_wot_cmd(api, data=None): + return diff --git a/static-data/official-plugins/wot/wot/blockprocessingevent.py b/static-data/official-plugins/wot/wot/blockprocessingevent.py index 7ecd2d84..7ec147b4 100644 --- a/static-data/official-plugins/wot/wot/blockprocessingevent.py +++ b/static-data/official-plugins/wot/wot/blockprocessingevent.py @@ -1,20 +1,11 @@ from typing import TYPE_CHECKING -from enum import IntEnum, auto -import struct - -import msgpack +from .identityprocessing import process_identity_announce if TYPE_CHECKING: from onionrblocks import Block from wot.exceptions import InvalidWotBlock - - -class WotCommand(IntEnum): - TRUST = 1 - REVOKE_TRUST = auto() - ANNOUNCE = auto() - REVOKE = auto() +from wot.wotcommand import WotCommand class WotPayload: @@ -26,6 +17,14 @@ class WotPayload: match wot_command(WotCommand): case WotCommand.TRUST: pass + case WotCommand.REVOKE_TRUST: + pass + case WotCommand.ANNOUNCE: + process_identity_announce(block_data[1:]) + case WotCommand.REVOKE: + pass + case _: + raise InvalidWotBlock('Invalid WOT command') def process_block(bl: 'Block'): diff --git a/static-data/official-plugins/wot/wot/identityprocessing/processidentityannounce.py b/static-data/official-plugins/wot/wot/identityprocessing/processidentityannounce.py index ce03c804..959ea5a3 100644 --- a/static-data/official-plugins/wot/wot/identityprocessing/processidentityannounce.py +++ b/static-data/official-plugins/wot/wot/identityprocessing/processidentityannounce.py @@ -2,7 +2,7 @@ from logger import log as logging from nacl.signing import VerifyKey -from wot.blockprocessingevent import WotCommand +from wot.wotcommand import WotCommand from wot.identity import Identity from wot.identity.identityset import identities diff --git a/static-data/official-plugins/wot/wot/identityprocessing/processrevokeidentity.py b/static-data/official-plugins/wot/wot/identityprocessing/processrevokeidentity.py index bb48e480..128e14d0 100644 --- a/static-data/official-plugins/wot/wot/identityprocessing/processrevokeidentity.py +++ b/static-data/official-plugins/wot/wot/identityprocessing/processrevokeidentity.py @@ -2,7 +2,7 @@ from logger import log as logging from nacl.signing import VerifyKey -from wot.blockprocessingevent import WotCommand +from wot.wotcommand import WotCommand from wot.identity import Identity from wot.identity.identityset import identities diff --git a/static-data/official-plugins/wot/wot/identityprocessing/processrevokesignature.py b/static-data/official-plugins/wot/wot/identityprocessing/processrevokesignature.py index 12587998..c6ca7144 100644 --- a/static-data/official-plugins/wot/wot/identityprocessing/processrevokesignature.py +++ b/static-data/official-plugins/wot/wot/identityprocessing/processrevokesignature.py @@ -5,7 +5,9 @@ from nacl.signing import VerifyKey from logger import log as logging from wot.getbykey import get_identity_by_key -from wot.blockprocessingevent import WotCommand +from wot.wotcommand import WotCommand + +from utils import identifyhome def process_revoke_signature(revoke_signature_payload): diff --git a/static-data/official-plugins/wot/wot/identityprocessing/processtrustsignature.py b/static-data/official-plugins/wot/wot/identityprocessing/processtrustsignature.py index fcd37d30..199c2a6d 100644 --- a/static-data/official-plugins/wot/wot/identityprocessing/processtrustsignature.py +++ b/static-data/official-plugins/wot/wot/identityprocessing/processtrustsignature.py @@ -4,7 +4,7 @@ from logger import log as logging from nacl.signing import VerifyKey from wot.getbykey import get_identity_by_key -from wot.blockprocessingevent import WotCommand +from wot.wotcommand import WotCommand def process_trust_signature(sig_payload: bytes): diff --git a/static-data/official-plugins/wot/wot/wotcommand.py b/static-data/official-plugins/wot/wot/wotcommand.py new file mode 100644 index 00000000..a131c7a5 --- /dev/null +++ b/static-data/official-plugins/wot/wot/wotcommand.py @@ -0,0 +1,7 @@ +from enum import IntEnum, auto + +class WotCommand(IntEnum): + TRUST = 1 + REVOKE_TRUST = auto() + ANNOUNCE = auto() + REVOKE = auto() diff --git a/tests/default-plugin-tests/wot/test_process_identity_revoke.py b/tests/default-plugin-tests/wot/test_process_identity_revoke.py index 14885303..2c7acea7 100644 --- a/tests/default-plugin-tests/wot/test_process_identity_revoke.py +++ b/tests/default-plugin-tests/wot/test_process_identity_revoke.py @@ -5,6 +5,7 @@ from enum import IntEnum, auto from nacl.signing import SigningKey, VerifyKey from nacl.exceptions import BadSignatureError import nacl +import nacl.exceptions import secrets import onionrblocks @@ -43,8 +44,11 @@ class TestRevokeIdentityPayload(unittest.TestCase): signed = signing_key.sign(wot_cmd + bytes(main_iden.key)) revoke_payload = wot_cmd + bytes(signing_key.verify_key) + signed.signature + revoke_payload = bytearray(revoke_payload) + revoke_payload[63] = revoke_payload[63] + 1 + revoke_payload = bytes(revoke_payload) - self.assertRaises(nacl.exceptions.Inv process_identity_revoke(revoke_payload) + self.assertRaises(nacl.exceptions.BadSignatureError, process_identity_revoke, revoke_payload) self.assertEqual(len(identities), 1)