From 9849ea58cf9a64320202522087e57e5ddf26646f Mon Sep 17 00:00:00 2001
From: Moul <moul@moul.re>
Date: Sat, 13 Mar 2021 13:25:09 +0100
Subject: [PATCH] [feat] #314: cert: Implement display option

The generated document is displayed
In case the option is passed, display the table and
the generated document
Use send_doc_confirmation()
---
 silkaj/cert.py | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/silkaj/cert.py b/silkaj/cert.py
index 17ba70cf..f889b34e 100644
--- a/silkaj/cert.py
+++ b/silkaj/cert.py
@@ -24,19 +24,19 @@ from duniterpy.documents import BlockUID, block_uid, Identity, Certification
 
 from silkaj.auth import auth_method
 from silkaj.tools import message_exit, coroutine
-from silkaj.tui import convert_time, display_pubkey_and_checksum
 from silkaj.network_tools import ClientInstance
 from silkaj.blockchain_tools import BlockchainParams, HeadBlock
 from silkaj.license import license_approval
-from silkaj import wot
+from silkaj import wot, tui
 from silkaj.constants import SUCCESS_EXIT_STATUS
 from silkaj.crypto_tools import is_pubkey_and_check
 
 
 @click.command("cert", help="Send certification")
 @click.argument("uid_pubkey_to_certify")
+@click.pass_context
 @coroutine
-async def send_certification(uid_pubkey_to_certify):
+async def send_certification(ctx, uid_pubkey_to_certify):
     client = ClientInstance().client
 
     checked_pubkey = is_pubkey_and_check(uid_pubkey_to_certify)
@@ -69,7 +69,7 @@ async def send_certification(uid_pubkey_to_certify):
             # ĞT: 0<–>4.8m - 4.8m + 12.5d
             renewable = cert["expiresIn"] - params["sigValidity"] + params["sigReplay"]
             if renewable > 0:
-                renewable_date = convert_time(time() + renewable, "date")
+                renewable_date = tui.convert_time(time() + renewable, "date")
                 message_exit("Certification renewable the " + renewable_date)
 
     # Check if the certification is already in the pending certifications
@@ -84,7 +84,7 @@ async def send_certification(uid_pubkey_to_certify):
 
     # Certification confirmation
     await certification_confirmation(
-        issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify
+        ctx, issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify
     )
 
     identity = Identity(
@@ -105,6 +105,10 @@ async def send_certification(uid_pubkey_to_certify):
         signature="",
     )
 
+    if ctx.obj["DISPLAY_DOCUMENT"]:
+        click.echo(certification.signed_raw(), nl=False)
+        await tui.send_doc_confirmation("certification")
+
     # Sign document
     certification.sign([key])
 
@@ -120,7 +124,7 @@ async def send_certification(uid_pubkey_to_certify):
 
 
 async def certification_confirmation(
-    issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify
+    ctx, issuer, issuer_pubkey, pubkey_to_certify, idty_to_certify
 ):
     cert = list()
     cert.append(["Cert", "Issuer", "–>", "Recipient: Published: #block-hash date"])
@@ -129,22 +133,21 @@ async def certification_confirmation(
     block_uid_idty = block_uid(idty_timestamp)
     block = await client(bma.blockchain.block, block_uid_idty.number)
     block_uid_date = (
-        ": #" + idty_timestamp[:15] + "… " + convert_time(block["time"], "all")
+        ": #" + idty_timestamp[:15] + "… " + tui.convert_time(block["time"], "all")
     )
     cert.append(["ID", issuer["uid"], "–>", idty_to_certify["uid"] + block_uid_date])
     cert.append(
         [
             "Pubkey",
-            display_pubkey_and_checksum(issuer_pubkey),
+            tui.display_pubkey_and_checksum(issuer_pubkey),
             "–>",
-            display_pubkey_and_checksum(pubkey_to_certify),
+            tui.display_pubkey_and_checksum(pubkey_to_certify),
         ]
     )
     params = await BlockchainParams().params
-    cert_begins = convert_time(time(), "date")
-    cert_ends = convert_time(time() + params["sigValidity"], "date")
+    cert_begins = tui.convert_time(time(), "date")
+    cert_ends = tui.convert_time(time() + params["sigValidity"], "date")
     cert.append(["Valid", cert_begins, "—>", cert_ends])
     click.echo(tabulate(cert, tablefmt="fancy_grid"))
-    if not click.confirm("Do you confirm sending this certification?"):
-        await client.close()
-        sys.exit(SUCCESS_EXIT_STATUS)
+    if not ctx.obj["DISPLAY_DOCUMENT"]:
+        await tui.send_doc_confirmation("certification")
-- 
GitLab