Skip to content
Snippets Groups Projects
Commit 0228d596 authored by Vincent Texier's avatar Vincent Texier
Browse files

[enh] #95 add Identity.from_lookup_response() to simplify examples

parent ff8a9c47
No related branches found
No related tags found
No related merge requests found
......@@ -257,3 +257,47 @@ Timestamp: {timestamp}
identity.signatures = [signature]
return identity
@classmethod
def from_bma_lookup_response(
cls: Type[IdentityType],
version: int,
currency: str,
pubkey: str,
lookup_response: dict,
) -> IdentityType:
"""
Return Identity instance from bma.lookup request response
:param pubkey:
:param version: Document version
:param currency: Currency codename
:param pubkey: Requested identity pubkey
:param lookup_response: Lookup request response
:return:
"""
identity = None
# parse results
for result in lookup_response["results"]:
if result["pubkey"] == pubkey:
uids = result["uids"]
uid_data = uids[0]
# capture data
timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"])
uid = uid_data["uid"] # type: str
signature = uid_data["self"] # type: str
# return self-certification document
identity = cls(
version=version,
currency=currency,
pubkey=pubkey,
uid=uid,
timestamp=timestamp,
)
identity.signatures = [signature]
if identity is None:
raise Exception("Identity pubkey not found")
return identity
......@@ -19,7 +19,7 @@ from typing import Optional
from duniterpy.api import bma
from duniterpy.api.client import Client
from duniterpy.documents import BlockUID, Identity, Revocation
from duniterpy.documents import Identity, Revocation
from duniterpy.key import SigningKey
if "XDG_CONFIG_HOME" in os.environ:
......@@ -65,31 +65,11 @@ def get_identity_document(
:rtype: Identity
"""
# Here we request for the path wot/lookup/pubkey
lookup_data = client(bma.wot.lookup, pubkey)
identity = None
# parse results
for result in lookup_data["results"]:
if result["pubkey"] == pubkey:
uids = result["uids"]
uid_data = uids[0]
# capture data
timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"])
uid = uid_data["uid"] # type: str
signature = uid_data["self"] # type: str
# return self-certification document
identity = Identity(
version=10,
currency=current_block["currency"],
pubkey=pubkey,
uid=uid,
timestamp=timestamp,
)
identity.signatures = [signature]
break
lookup_response = client(bma.wot.lookup, pubkey)
return identity
return Identity.from_bma_lookup_response(
PROTOCOL_VERSION, current_block["currency"], pubkey, lookup_response
)
def get_signed_raw_revocation_document(
......
......@@ -29,6 +29,9 @@ from duniterpy.key import SigningKey
# Here we use the secure BASIC_MERKLED_API (BMAS)
BMAS_ENDPOINT = "BMAS g1-test.duniter.org 443"
# Current protocol version
PROTOCOL_VERSION = 10
################################################
......@@ -46,31 +49,11 @@ def get_identity_document(
:rtype: Identity
"""
# Here we request for the path wot/lookup/pubkey
lookup_data = client(bma.wot.lookup, pubkey)
identity = None
# parse results
for result in lookup_data["results"]:
if result["pubkey"] == pubkey:
uids = result["uids"]
uid_data = uids[0]
# capture data
timestamp = BlockUID.from_str(uid_data["meta"]["timestamp"])
uid = uid_data["uid"] # type: str
signature = uid_data["self"] # type: str
# return self-certification document
identity = Identity(
version=10,
currency=current_block["currency"],
pubkey=pubkey,
uid=uid,
timestamp=timestamp,
)
identity.signatures = [signature]
break
lookup_response = client(bma.wot.lookup, pubkey)
return identity
return Identity.from_bma_lookup_response(
PROTOCOL_VERSION, current_block["currency"], pubkey, lookup_response
)
def get_certification_document(
......@@ -117,7 +100,7 @@ def send_certification():
pubkey_from = key.pubkey
# prompt entry
pubkey_to = input("Enter certified pubkey: ")
pubkey_to = input("Enter pubkey to certify: ")
# capture current block to get version and currency and blockstamp
current_block = client(bma.blockchain.current)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment