gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated: deletion and listing of payment initia


From: gnunet
Subject: [libeufin] branch master updated: deletion and listing of payment initiations
Date: Sat, 07 Aug 2021 13:09:22 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 266c074  deletion and listing of payment initiations
266c074 is described below

commit 266c074d4e9ed45a0a0f54904e3acde2b84417c7
Author: Florian Dold <florian@dold.me>
AuthorDate: Sat Aug 7 13:09:17 2021 +0200

    deletion and listing of payment initiations
---
 cli/bin/libeufin-cli                               | 109 ++++++++++++++++++---
 .../tech/libeufin/nexus/server/NexusServer.kt      |  20 +++-
 util/src/main/kotlin/DBTypes.kt                    |   4 +-
 3 files changed, 115 insertions(+), 18 deletions(-)

diff --git a/cli/bin/libeufin-cli b/cli/bin/libeufin-cli
index fcba669..fd7bc94 100755
--- a/cli/bin/libeufin-cli
+++ b/cli/bin/libeufin-cli
@@ -7,6 +7,9 @@ import json
 import hashlib
 import errno
 from datetime import datetime
+import requests
+
+# FIXME: always use qualified name
 from requests import post, get, auth, delete
 from urllib.parse import urljoin
 from getpass import getpass
@@ -19,6 +22,7 @@ def check_response_status(resp, expected_status_code=200):
         print("Unexpected response status: {}".format(resp.status_code))
         sys.exit(1)
 
+
 def tell_user(resp, expected_status_code=200, withsuccess=False):
     if resp.status_code != expected_status_code:
         print(resp.content.decode("utf-8"))
@@ -26,6 +30,7 @@ def tell_user(resp, expected_status_code=200, 
withsuccess=False):
     if withsuccess:
         print(resp.content.decode("utf-8"))
 
+
 # FIXME: deprecate this in favor of NexusContext
 def fetch_env():
     if "--help" in sys.argv:
@@ -75,11 +80,13 @@ def connections(ctx):
 def users(ctx):
     ctx.obj = NexusContext()
 
+
 @cli.group()
 @click.pass_context
 def permissions(ctx):
     ctx.obj = NexusContext()
 
+
 @users.command("list", help="List users")
 @click.pass_obj
 def list_users(obj):
@@ -94,6 +101,7 @@ def list_users(obj):
     tell_user(resp, withsuccess=True)
     check_response_status(resp)
 
+
 @users.command(help="Change user's password (as superuser)")
 @click.argument("username")
 @click.option(
@@ -167,6 +175,7 @@ def list_permission(obj):
     print(resp.content.decode("utf-8"))
     check_response_status(resp)
 
+
 @permissions.command("grant", help="Grant permission to a subject")
 @click.pass_obj
 @click.argument("subject-type")
@@ -174,7 +183,9 @@ def list_permission(obj):
 @click.argument("resource-type")
 @click.argument("resource-id")
 @click.argument("permission-name")
-def grant_permission(obj, subject_type, subject_id, resource_type, 
resource_id, permission_name):
+def grant_permission(
+    obj, subject_type, subject_id, resource_type, resource_id, permission_name
+):
     url = urljoin(obj.nexus_base_url, f"/permissions")
     try:
         permission = dict(
@@ -188,7 +199,11 @@ def grant_permission(obj, subject_type, subject_id, 
resource_type, resource_id,
             permission=permission,
             action="grant",
         )
-        resp = post(url, json=body, 
auth=auth.HTTPBasicAuth(obj.nexus_username, obj.nexus_password))
+        resp = post(
+            url,
+            json=body,
+            auth=auth.HTTPBasicAuth(obj.nexus_username, obj.nexus_password),
+        )
     except Exception as e:
         print(e)
         print("Could not reach nexus at " + url)
@@ -197,6 +212,7 @@ def grant_permission(obj, subject_type, subject_id, 
resource_type, resource_id,
     print(resp.content.decode("utf-8"))
     check_response_status(resp)
 
+
 @permissions.command("revoke", help="Revoke permission from a subject")
 @click.pass_obj
 @click.argument("subject-type")
@@ -204,7 +220,9 @@ def grant_permission(obj, subject_type, subject_id, 
resource_type, resource_id,
 @click.argument("resource-type")
 @click.argument("resource-id")
 @click.argument("permission-name")
-def revoke_permission(obj, subject_type, subject_id, resource_type, 
resource_id, permission_name):
+def revoke_permission(
+    obj, subject_type, subject_id, resource_type, resource_id, permission_name
+):
     url = urljoin(obj.nexus_base_url, f"/permissions")
     try:
         permission = dict(
@@ -218,7 +236,11 @@ def revoke_permission(obj, subject_type, subject_id, 
resource_type, resource_id,
             permission=permission,
             action="revoke",
         )
-        resp = post(url, json=body, 
auth=auth.HTTPBasicAuth(obj.nexus_username, obj.nexus_password))
+        resp = post(
+            url,
+            json=body,
+            auth=auth.HTTPBasicAuth(obj.nexus_username, obj.nexus_password),
+        )
     except Exception as e:
         print(e)
         print("Could not reach nexus at " + url)
@@ -486,7 +508,9 @@ def import_bank_account(
     check_response_status(resp)
 
 
-@connections.command(help="Update list of bank accounts available through this 
connection.")
+@connections.command(
+    help="Update list of bank accounts available through this connection."
+)
 @click.argument("connection-name")
 @click.pass_obj
 def download_bank_accounts(obj, connection_name):
@@ -716,11 +740,11 @@ def prepare_payment(
         print("Could not reach nexus at " + url)
         exit(1)
 
-    tell_user(resp, withsuccess=True)
+    tell_user(resp)
     check_response_status(resp)
 
 
-@accounts.command(help="submit a prepared payment")
+@accounts.command(help="Submit a payment initiation")
 @click.option("--payment-uuid", help="payment unique identifier", 
required=True)
 @click.argument("account-name")
 @click.pass_obj
@@ -743,7 +767,64 @@ def submit_payment(obj, account_name, payment_uuid):
     check_response_status(resp)
 
 
-@accounts.command(help="fetch transactions from the bank")
+@accounts.command(help="Show status of a payment initiation")
+@click.option("--payment-uuid", help="payment unique identifier", 
required=True)
+@click.argument("account-name")
+@click.pass_obj
+def show_payment(obj, account_name, payment_uuid):
+    url = urljoin(
+        obj.nexus_base_url,
+        f"/bank-accounts/{account_name}/payment-initiations/{payment_uuid}",
+    )
+    try:
+        resp = get(url, auth=auth.HTTPBasicAuth(obj.username, obj.password))
+    except Exception:
+        print("Could not reach nexus at" + url)
+        exit(1)
+
+    tell_user(resp, withsuccess=True)
+    check_response_status(resp)
+
+
+@accounts.command(help="List payment initiations")
+@click.argument("account-name")
+@click.pass_obj
+def show_payment(obj, account_name):
+    url = urljoin(
+        obj.nexus_base_url, 
f"/bank-accounts/{account_name}/payment-initiations"
+    )
+    try:
+        resp = get(url, auth=auth.HTTPBasicAuth(obj.username, obj.password))
+    except Exception:
+        print("Could not reach nexus at" + url)
+        exit(1)
+
+    tell_user(
+        resp,
+    )
+    check_response_status(resp)
+
+
+@accounts.command(help="Delete a payment initiation")
+@click.argument("account-name")
+@click.option("--payment-uuid", help="payment unique identifier", 
required=True)
+@click.pass_obj
+def show_payment(obj, account_name, payment_uuid):
+    url = urljoin(
+        obj.nexus_base_url,
+        f"/bank-accounts/{account_name}/payment-initiations/{payment_uuid}",
+    )
+    try:
+        resp = delete(url, auth=auth.HTTPBasicAuth(obj.username, obj.password))
+    except Exception:
+        print("Could not reach nexus at" + url)
+        exit(1)
+
+    tell_user(resp)
+    check_response_status(resp)
+
+
+@accounts.command(help="Fetch transactions from the bank")
 @click.option(
     "--range-type",
     default="all",
@@ -757,7 +838,7 @@ def fetch_transactions(obj, account_name, range_type, 
level):
         obj.nexus_base_url, 
"/bank-accounts/{}/fetch-transactions".format(account_name)
     )
     try:
-        resp = post(
+        resp = requests.post(
             url,
             json=dict(rangeType=range_type, level=level),
             auth=auth.HTTPBasicAuth(obj.username, obj.password),
@@ -805,6 +886,7 @@ def transactions(obj, compact, account_name):
         tell_user(resp, withsuccess=True)
     check_response_status(resp)
 
+
 @facades.command("list", help="List active facades in the Nexus")
 @click.pass_obj
 def list_facades(obj):
@@ -819,7 +901,9 @@ def list_facades(obj):
     check_response_status(resp)
 
 
-@facades.command("new-taler-wire-gateway-facade", help="create a new Taler 
Wire Gateway facade")
+@facades.command(
+    "new-taler-wire-gateway-facade", help="create a new Taler Wire Gateway 
facade"
+)
 @click.option("--facade-name", help="Name of the facade", required=True)
 @click.option("--currency", help="Facade's currency", required=True)
 @click.argument("connection-name")
@@ -1075,7 +1159,10 @@ def simulate_incoming_transaction(
     subject,
 ):
     sandbox_base_url = obj.require_sandbox_base_url()
-    url = urljoin(sandbox_base_url, 
f"/admin/bank-accounts/{account_name}/simulate-incoming-transaction")
+    url = urljoin(
+        sandbox_base_url,
+        f"/admin/bank-accounts/{account_name}/simulate-incoming-transaction",
+    )
     body = dict(
         debtorIban=debtor_iban,
         debtorBic=debtor_bic,
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
index 97de022..a3b17c4 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
@@ -418,11 +418,11 @@ fun serverMain(dbName: String, host: String, port: Int) {
                 call.respond(object {})
                 return@post
             }
-            get("/bank-accounts/{accountid}/schedule") {
+            get("/bank-accounts/{accountId}/schedule") {
                 requireSuperuser(call.request)
                 val resp = jacksonObjectMapper().createObjectNode()
                 val ops = jacksonObjectMapper().createObjectNode()
-                val accountId = ensureNonNull(call.parameters["accountid"])
+                val accountId = ensureNonNull(call.parameters["accountId"])
                 resp.set<JsonNode>("schedule", ops)
                 transaction {
                     NexusBankAccountEntity.findByName(accountId)
@@ -443,10 +443,10 @@ fun serverMain(dbName: String, host: String, port: Int) {
                 return@get
             }
 
-            post("/bank-accounts/{accountid}/schedule") {
+            post("/bank-accounts/{accountId}/schedule") {
                 requireSuperuser(call.request)
                 val schedSpec = call.receive<CreateAccountTaskRequest>()
-                val accountId = ensureNonNull(call.parameters["accountid"])
+                val accountId = ensureNonNull(call.parameters["accountId"])
                 transaction {
                     authenticateRequest(call.request)
                     NexusBankAccountEntity.findByName(accountId)
@@ -635,6 +635,16 @@ fun serverMain(dbName: String, host: String, port: Int) {
                 return@get
             }
 
+            delete("/bank-accounts/{accountId}/payment-initiations/{uuid}") {
+                requireSuperuser(call.request)
+                val uuid = ensureLong(call.parameters["uuid"])
+                transaction {
+                    val paymentInitiation = getPaymentInitiation(uuid)
+                    paymentInitiation.delete()
+                }
+                call.respond(NexusMessage(message = "Payment initiation $uuid 
deleted"))
+            }
+
             // Adds a new payment initiation.
             post("/bank-accounts/{accountid}/payment-initiations") {
                 requireSuperuser(call.request)
@@ -644,7 +654,7 @@ fun serverMain(dbName: String, host: String, port: Int) {
                     authenticateRequest(call.request)
                     val bankAccount = 
NexusBankAccountEntity.findByName(accountId)
                     if (bankAccount == null) {
-                        throw NexusError(HttpStatusCode.NotFound, "unknown 
bank account")
+                        throw NexusError(HttpStatusCode.NotFound, "unknown 
bank account ($accountId)")
                     }
                     val amount = parseAmount(body.amount)
                     val paymentEntity = addPaymentInitiation(
diff --git a/util/src/main/kotlin/DBTypes.kt b/util/src/main/kotlin/DBTypes.kt
index 713cee8..ec3dc50 100644
--- a/util/src/main/kotlin/DBTypes.kt
+++ b/util/src/main/kotlin/DBTypes.kt
@@ -30,7 +30,7 @@ const val NUMBER_MAX_DIGITS = 20
 class BadAmount(badValue: Any?) : Exception("Value '${badValue}' is not a 
valid amount")
 
 /**
- * Any number can become a Amount IF it does NOT need to be rounded to comply 
to the scale == 2.
+ * Any number can become an Amount IF it does NOT need to be rounded to comply 
to the scale == 2.
  */
 typealias Amount = BigDecimal
 
@@ -42,7 +42,7 @@ class AmountColumnType : ColumnType() {
                 return when (valueFromDB) {
                     is BigDecimal -> valueFromDB.setScale(SCALE_TWO, 
RoundingMode.UNNECESSARY)
                     is Double -> 
BigDecimal.valueOf(valueFromDB).setScale(SCALE_TWO, RoundingMode.UNNECESSARY)
-                    is Float -> 
BigDecimal(java.lang.Float.toString(valueFromDB)).setScale(
+                    is Float -> BigDecimal(valueFromDB.toString()).setScale(
                         SCALE_TWO,
                         RoundingMode.UNNECESSARY
                     )

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]