gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated (4560d383 -> 1b751d3f)


From: gnunet
Subject: [taler-merchant] branch master updated (4560d383 -> 1b751d3f)
Date: Thu, 11 Aug 2022 23:35:59 +0200

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

grothoff pushed a change to branch master
in repository merchant.

    from 4560d383 -typo
     new 7aec7a25 -migrate to new KYC API
     new 1b751d3f -fix handling of serialization failure

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../taler-merchant-httpd_post-orders-ID-pay.c      |  6 +++--
 ...r-merchant-httpd_private-get-instances-ID-kyc.c | 23 ++++++++++++++++++
 src/include/taler_merchant_service.h               | 12 ++++++----
 src/lib/merchant_api_get_kyc.c                     |  2 ++
 src/lib/merchant_api_merchant_get_order.c          |  6 +++++
 src/testing/test_kyc_api.c                         | 27 ++++++++++++++++++----
 src/testing/test_kyc_api.conf                      | 24 +++++++++++++++++++
 src/testing/test_merchant_api.c                    |  9 +++++---
 src/testing/testing_api_cmd_kyc_get.c              | 19 +++++++++++----
 src/testing/testing_api_cmd_merchant_get_order.c   |  6 -----
 10 files changed, 109 insertions(+), 25 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c 
b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
index 91533de5..72c3e4da 100644
--- a/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
+++ b/src/backend/taler-merchant-httpd_post-orders-ID-pay.c
@@ -942,7 +942,6 @@ handle_batch_deposit_ok (struct ExchangeGroup *eg,
                          const struct TALER_EXCHANGE_BatchDepositResult *dr)
 {
   struct PayContext *pc = eg->pc;
-  unsigned int j = 0;
   enum GNUNET_DB_QueryStatus qs
     = GNUNET_DB_STATUS_SUCCESS_NO_RESULTS;
 
@@ -954,6 +953,8 @@ handle_batch_deposit_ok (struct ExchangeGroup *eg,
               pc->hc->instance->settings.id);
   for (unsigned int r = 0; r<MAX_RETRIES; r++)
   {
+    unsigned int j = 0;
+
     TMH_db->preflight (TMH_db->cls);
     if (GNUNET_OK !=
         TMH_db->start (TMH_db->cls,
@@ -982,6 +983,7 @@ handle_batch_deposit_ok (struct ExchangeGroup *eg,
          it is possible to over-pay if two wallets literally make a concurrent
          payment, as the earlier check for 'paid' is not in the same 
transaction
          scope as this 'insert' operation. */
+      GNUNET_assert (j < dr->details.success.num_signatures);
       qs = TMH_db->insert_deposit (
         TMH_db->cls,
         pc->hc->instance->settings.id,
@@ -999,7 +1001,7 @@ handle_batch_deposit_ok (struct ExchangeGroup *eg,
       if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
       {
         TMH_db->rollback (TMH_db->cls);
-        continue;
+        break;
       }
       if (0 > qs)
       {
diff --git a/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c 
b/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c
index fbb4f63f..d3f32da2 100644
--- a/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c
+++ b/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c
@@ -114,6 +114,7 @@ struct ExchangeKycRequest
    * Last KYC status returned by the exchange.
    */
   bool kyc_ok;
+
 };
 
 
@@ -217,6 +218,13 @@ struct KycContext
    * True if @e h_wire was given.
    */
   bool have_h_wire;
+
+  /**
+   * We're still waiting on the exchange to determine
+   * the KYC status of our deposit(s).
+   */
+  bool kyc_serial_pending;
+
 };
 
 
@@ -615,6 +623,11 @@ kyc_status_cb (void *cls,
          <,
          STALE_KYC_TIMEOUT)) )
     return; /* KYC ok, ignore! */
+  if (0 == exchange_kyc_serial)
+  {
+    kc->kyc_serial_pending = true;
+    return;
+  }
   kc->response_code = MHD_HTTP_ACCEPTED;
   ekr = GNUNET_new (struct ExchangeKycRequest);
   GNUNET_CONTAINER_DLL_insert (kc->exchange_pending_head,
@@ -766,6 +779,16 @@ get_instances_ID_kyc (struct TMH_MerchantInstance *mi,
                                         "account_kyc_get_status");
       }
     }
+    if (kc->kyc_serial_pending)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                  "Exchange legitimization UUID unknown, assuming KYC 
pending\n");
+      return TALER_MHD_REPLY_JSON_PACK (
+        connection,
+        MHD_HTTP_SERVICE_UNAVAILABLE,
+        GNUNET_JSON_pack_string ("hint",
+                                 "awaiting legitimization UUID"));
+    }
     if (NULL == kc->exchange_pending_head)
       return TALER_MHD_reply_static (connection,
                                      MHD_HTTP_NO_CONTENT,
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index 2e6ea1fa..089518f8 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -2031,7 +2031,7 @@ typedef void
  * @param order_id order id to identify the payment
  * @param session_id sesion id for the payment (or NULL if the check is not
  *                   bound to a session)
- * @param transfer if true, obtain the wire transfer status from the exhcange.
+ * @param transfer if true, obtain the wire transfer status from the exchange.
  *               Otherwise, the wire transfer status MAY be returned if it is 
available.
  * @param timeout timeout to use in long polling (how long may the server wait 
to reply
  *        before generating an unpaid response). Note that this is just 
provided to
@@ -3561,12 +3561,14 @@ struct TALER_MERCHANT_TipStatusResponse
   /**
    * Details depending on the HTTP status.
    */
-  union {
+  union
+  {
 
     /**
      * Details on #MHD_HTTP_OK.
      */
-    struct {
+    struct
+    {
 
       /**
        * Amount that was authorized under this tip
@@ -3603,9 +3605,9 @@ struct TALER_MERCHANT_TipStatusResponse
        */
       struct TALER_MERCHANT_PickupDetail *pickups;
     } success;
-    
+
   } details;
-  
+
 };
 
 
diff --git a/src/lib/merchant_api_get_kyc.c b/src/lib/merchant_api_get_kyc.c
index 2a1725cf..bc688eed 100644
--- a/src/lib/merchant_api_get_kyc.c
+++ b/src/lib/merchant_api_get_kyc.c
@@ -217,6 +217,8 @@ handle_get_kyc_finished (void *cls,
     kr.hr.hint = TALER_JSON_get_error_hint (json);
     /* Nothing really to verify, merchant says we need to authenticate. */
     break;
+  case MHD_HTTP_SERVICE_UNAVAILABLE:
+    break;
   default:
     /* unexpected response code */
     kr.hr.ec = TALER_JSON_get_error_code (json);
diff --git a/src/lib/merchant_api_merchant_get_order.c 
b/src/lib/merchant_api_merchant_get_order.c
index f3181a3c..0e6b53bf 100644
--- a/src/lib/merchant_api_merchant_get_order.c
+++ b/src/lib/merchant_api_merchant_get_order.c
@@ -378,6 +378,12 @@ handle_merchant_order_get_finished (void *cls,
   case MHD_HTTP_OK:
     /* see below */
     break;
+  case MHD_HTTP_ACCEPTED:
+    /* see below */
+    omgh->cb (omgh->cb_cls,
+              &osr);
+    TALER_MERCHANT_merchant_order_get_cancel (omgh);
+    return;
   case MHD_HTTP_UNAUTHORIZED:
     osr.hr.ec = TALER_JSON_get_error_code (json);
     osr.hr.hint = TALER_JSON_get_error_hint (json);
diff --git a/src/testing/test_kyc_api.c b/src/testing/test_kyc_api.c
index f10803d1..cde93368 100644
--- a/src/testing/test_kyc_api.c
+++ b/src/testing/test_kyc_api.c
@@ -222,17 +222,34 @@ run (void *cls,
     CMD_EXEC_AGGREGATOR ("run-aggregator"),
     /* KYC: hence nothing happened at the bank yet: */
     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-2"),
+    /* KYC: we don't even know the legitimization UUID yet */
+    TALER_TESTING_cmd_merchant_kyc_get ("kyc-pending",
+                                        merchant_url,
+                                        NULL,
+                                        NULL,
+                                        EXCHANGE_URL,
+                                        MHD_HTTP_SERVICE_UNAVAILABLE),
+    /* now we get the legi UUID */
+    TALER_TESTING_cmd_merchant_get_order ("get-order-kyc",
+                                          merchant_url,
+                                          "create-proposal-1",
+                                          TALER_MERCHANT_OSC_PAID,
+                                          false,
+                                          MHD_HTTP_OK,
+                                          NULL),
+    /* Now we should get a status of pending */
     TALER_TESTING_cmd_merchant_kyc_get ("kyc-pending",
                                         merchant_url,
                                         NULL,
                                         NULL,
                                         EXCHANGE_URL,
                                         MHD_HTTP_ACCEPTED),
-    TALER_TESTING_cmd_proof_kyc ("kyc-do",
-                                 "kyc-pending",
-                                 "pass",
-                                 "state",
-                                 MHD_HTTP_SEE_OTHER),
+    TALER_TESTING_cmd_proof_kyc_oauth2 ("kyc-do",
+                                        "kyc-pending",
+                                        "kyc-provider-test-oauth2",
+                                        "pass",
+                                        "state",
+                                        MHD_HTTP_SEE_OTHER),
     CMD_EXEC_AGGREGATOR ("run-aggregator"),
     TALER_TESTING_cmd_check_bank_transfer ("check_bank_transfer-498c",
                                            EXCHANGE_URL,
diff --git a/src/testing/test_kyc_api.conf b/src/testing/test_kyc_api.conf
index e28cd641..126762d8 100644
--- a/src/testing/test_kyc_api.conf
+++ b/src/testing/test_kyc_api.conf
@@ -103,6 +103,7 @@ MASTER_PUBLIC_KEY = 
T1VVFQZZARQ1CMF4BN58EE7SKTW5AV2BS18S87ZEGYS4S29J6DNG
 BASE_URL = "http://localhost:8081/";
 
 
+# OLD style KYC:
 KYC_MODE = OAUTH2
 
 KYC_WALLET_BALANCE_LIMIT = EUR:1
@@ -120,6 +121,29 @@ KYC_OAUTH2_CLIENT_ID = taler-exchange
 KYC_OAUTH2_CLIENT_SECRET = exchange-secret
 KYC_OAUTH2_POST_URL = http://example.com/
 
+# end old-style KYC
+
+[kyc-provider-test-oauth2]
+COST = 0
+LOGIC = oauth2
+USER_TYPE = INDIVIDUAL
+PROVIDED_CHECKS = DUMMY
+KYC_OAUTH2_VALIDITY = forever
+KYC_OAUTH2_AUTH_URL = http://localhost:6666/oauth/v2/token
+KYC_OAUTH2_LOGIN_URL = http://localhost:6666/oauth/v2/login
+KYC_OAUTH2_INFO_URL = http://localhost:6666/api/user/me
+KYC_OAUTH2_CLIENT_ID = taler-exchange
+KYC_OAUTH2_CLIENT_SECRET = exchange-secret
+KYC_OAUTH2_POST_URL = http://example.com/
+
+[kyc-legitimization-deposit-any]
+OPERATION_TYPE = DEPOSIT
+REQUIRED_CHECKS = DUMMY
+THRESHOLD = EUR:0
+TIMEFRAME = 1d
+
+
+
 
 [exchangedb-postgres]
 CONFIG = "postgres:///talercheck"
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index 3a32a981..9d9802a6 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -242,7 +242,8 @@ run (void *cls,
                                           "create-proposal-4",
                                           TALER_MERCHANT_OSC_UNPAID,
                                           false,
-                                          MHD_HTTP_OK),
+                                          MHD_HTTP_OK,
+                                          NULL),
     TALER_TESTING_cmd_merchant_delete_order ("delete-order-4",
                                              merchant_url,
                                              "4",
@@ -381,7 +382,8 @@ run (void *cls,
                                           "create-proposal-1",
                                           TALER_MERCHANT_OSC_CLAIMED,
                                           false,
-                                          MHD_HTTP_OK),
+                                          MHD_HTTP_OK,
+                                          NULL),
     TALER_TESTING_cmd_wallet_poll_order_start ("poll-order-wallet-start-1",
                                                merchant_url,
                                                "create-proposal-1",
@@ -435,7 +437,8 @@ run (void *cls,
                                           "create-proposal-1",
                                           TALER_MERCHANT_OSC_PAID,
                                           false,
-                                          MHD_HTTP_OK),
+                                          MHD_HTTP_OK,
+                                          NULL),
     TALER_TESTING_cmd_merchant_get_orders ("get-orders-1-paid",
                                            merchant_url,
                                            MHD_HTTP_OK,
diff --git a/src/testing/testing_api_cmd_kyc_get.c 
b/src/testing/testing_api_cmd_kyc_get.c
index f35a0028..f6f947df 100644
--- a/src/testing/testing_api_cmd_kyc_get.c
+++ b/src/testing/testing_api_cmd_kyc_get.c
@@ -133,6 +133,7 @@ kyc_get_cb (void *cls,
       const char *end;
       char *dec;
       const char *eq;
+      const char *nq;
       size_t toklen;
 
       url = kr->details.kyc_status.pending_kycs[0].kyc_url;
@@ -148,7 +149,18 @@ kyc_get_cb (void *cls,
       (void) GNUNET_STRINGS_urldecode (tok,
                                        toklen,
                                        &dec);
-      eq = strrchr (dec, '/');
+      eq = strstr (dec, "/kyc-proof/");
+      if (NULL == eq)
+      {
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                    "Received unexpected KYC URL `%s' (%s)\n",
+                    url,
+                    dec);
+        GNUNET_free (dec);
+        TALER_TESTING_FAIL (cs->is);
+      }
+      eq += strlen ("/kyc-proof/");
+      nq = strchr (eq, '/');
       if (NULL == eq)
       {
         GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -158,10 +170,9 @@ kyc_get_cb (void *cls,
         GNUNET_free (dec);
         TALER_TESTING_FAIL (cs->is);
       }
-      eq++;
       if (GNUNET_OK !=
           GNUNET_STRINGS_string_to_data (eq,
-                                         strlen (eq),
+                                         nq - eq,
                                          &cs->h_payto,
                                          sizeof (cs->h_payto)))
       {
@@ -257,7 +268,7 @@ kyc_get_traits (void *cls,
 {
   struct KycGetState *cs = cls;
   struct TALER_TESTING_Trait traits[] = {
-                                         TALER_TESTING_make_trait_h_payto (
+    TALER_TESTING_make_trait_h_payto (
       &cs->h_payto),
     TALER_TESTING_trait_end ()
   };
diff --git a/src/testing/testing_api_cmd_merchant_get_order.c 
b/src/testing/testing_api_cmd_merchant_get_order.c
index 8001ac43..467b6d61 100644
--- a/src/testing/testing_api_cmd_merchant_get_order.c
+++ b/src/testing/testing_api_cmd_merchant_get_order.c
@@ -693,12 +693,6 @@ TALER_TESTING_cmd_merchant_get_order2 (const char *label,
   gos->wired = wired;
   gos->refunded = refunded;
   gos->http_status = http_status;
-  gos->transfers = NULL;
-  gos->transfers_length = 0;
-  gos->refunds = NULL;
-  gos->refunds_length = 0;
-  gos->forgets = NULL;
-  gos->forgets_length = 0;
   if (wired)
   {
     for (const char **clabel = transfers; *clabel != NULL; ++clabel)

-- 
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]