gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -debug KYC webhook logic


From: gnunet
Subject: [taler-exchange] branch master updated: -debug KYC webhook logic
Date: Sat, 28 Jan 2023 12:20:26 +0100

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 8c5a1230 -debug KYC webhook logic
8c5a1230 is described below

commit 8c5a12302ef6a1962121770c1ee67d3a1eaae042
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Jan 28 12:20:18 2023 +0100

    -debug KYC webhook logic
---
 src/exchange/taler-exchange-httpd_kyc-webhook.c | 13 ++---
 src/kyclogic/kyclogic-kycaid.conf               |  2 +-
 src/kyclogic/kyclogic-oauth2.conf               |  2 +-
 src/kyclogic/kyclogic-persona.conf              |  9 +++-
 src/kyclogic/plugin_kyclogic_persona.c          | 46 +++++++++---------
 src/kyclogic/taler-exchange-kyc-tester.c        | 64 +++++++++++++++----------
 6 files changed, 79 insertions(+), 57 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_kyc-webhook.c 
b/src/exchange/taler-exchange-httpd_kyc-webhook.c
index e3acc1b4..f8fe711d 100644
--- a/src/exchange/taler-exchange-httpd_kyc-webhook.c
+++ b/src/exchange/taler-exchange-httpd_kyc-webhook.c
@@ -296,11 +296,12 @@ handler_kyc_webhook_generic (
     rc->rh_ctx = kwh;
     rc->rh_cleaner = &clean_kwh;
 
-    if (GNUNET_OK !=
-        TALER_KYCLOGIC_lookup_logic (args[0],
-                                     &kwh->plugin,
-                                     &kwh->pd,
-                                     &kwh->provider_section))
+    if ( (NULL == args[0]) ||
+         (GNUNET_OK !=
+          TALER_KYCLOGIC_lookup_logic (args[0],
+                                       &kwh->plugin,
+                                       &kwh->pd,
+                                       &kwh->provider_section)) )
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   "KYC logic `%s' unknown (check KYC provider 
configuration)\n",
@@ -308,7 +309,7 @@ handler_kyc_webhook_generic (
       return TALER_MHD_reply_with_error (rc->connection,
                                          MHD_HTTP_NOT_FOUND,
                                          
TALER_EC_EXCHANGE_KYC_GENERIC_LOGIC_UNKNOWN,
-                                         "$NAME");
+                                         args[0]);
     }
     kwh->wh = kwh->plugin->webhook (kwh->plugin->cls,
                                     kwh->pd,
diff --git a/src/kyclogic/kyclogic-kycaid.conf 
b/src/kyclogic/kyclogic-kycaid.conf
index 3cfb0e79..0e1fe96e 100644
--- a/src/kyclogic/kyclogic-kycaid.conf
+++ b/src/kyclogic/kyclogic-kycaid.conf
@@ -18,5 +18,5 @@ KYC_KYCAID_AUTH_TOKEN = XXX
 # Form to use.
 KYC_KYCAID_FORM_ID = XXX
 
-# Authentication token to use.
+# URL to go to after the process is complete.
 KYC_KYCAID_POST_URL = https://example.com/
diff --git a/src/kyclogic/kyclogic-oauth2.conf 
b/src/kyclogic/kyclogic-oauth2.conf
index d3df585d..40e0bd12 100644
--- a/src/kyclogic/kyclogic-oauth2.conf
+++ b/src/kyclogic/kyclogic-oauth2.conf
@@ -32,4 +32,4 @@ KYC_OAUTH2_CLIENT_SECRET = password
 # This is just an example, details will depend on the
 # provider!
 #
-KYC_ATTRIBUTE_TEMPLATE = "{"fullname":"{{first_name}} 
{{last_name}}","phone":"{{phone}}"}"
\ No newline at end of file
+KYC_OAUTH2_ATTRIBUTE_TEMPLATE = "{"fullname":"{{first_name}} 
{{last_name}}","phone":"{{phone}}"}"
\ No newline at end of file
diff --git a/src/kyclogic/kyclogic-persona.conf 
b/src/kyclogic/kyclogic-persona.conf
index e29d19db..7f02bf49 100644
--- a/src/kyclogic/kyclogic-persona.conf
+++ b/src/kyclogic/kyclogic-persona.conf
@@ -6,7 +6,10 @@
 
 [kyclogic-persona]
 
-# Optional authorization token for the webhook
+# Optional authorization token for the webhook.
+# This must be the same for all uses of the
+# Persona provider, and is thus not in a
+# template-specific section.
 #WEBHOOK_AUTH_TOKEN = wbhsec_698b5a19-c790-47f6-b396-deb572ec82f9
 
 
@@ -31,3 +34,7 @@ KYC_PERSONA_TEMPLATE_ID = itempl_Uj6Xxxxx
 
 # Where do we redirect to after KYC finished successfully.
 KYC_PERSONA_POST_URL = https://taler.net/
+
+# Salt to give to requests for idempotency.
+# Optional.
+# KYC_PERSONA_SALT = salt
\ No newline at end of file
diff --git a/src/kyclogic/plugin_kyclogic_persona.c 
b/src/kyclogic/plugin_kyclogic_persona.c
index 2eec8a10..50afb424 100644
--- a/src/kyclogic/plugin_kyclogic_persona.c
+++ b/src/kyclogic/plugin_kyclogic_persona.c
@@ -942,35 +942,35 @@ convert_attributes (const json_t *attr)
   const char *birthdate = NULL;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("country_code",
+      GNUNET_JSON_spec_string ("country-code",
                                &country_code),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("name_first",
+      GNUNET_JSON_spec_string ("name-first",
                                &name_first),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("name_middle",
+      GNUNET_JSON_spec_string ("name-middle",
                                &name_middle),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("name_last",
+      GNUNET_JSON_spec_string ("name-last",
                                &name_last),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("address_street_1",
+      GNUNET_JSON_spec_string ("address-street-1",
                                &address_street_1),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("address_street_2",
+      GNUNET_JSON_spec_string ("address-street-2",
                                &address_street_2),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("address_city",
+      GNUNET_JSON_spec_string ("address-city",
                                &address_city),
       NULL),
     GNUNET_JSON_spec_mark_optional (
-      GNUNET_JSON_spec_string ("address_postal_code",
+      GNUNET_JSON_spec_string ("address-postal-code",
                                &address_postal_code),
       NULL),
     GNUNET_JSON_spec_mark_optional (
@@ -991,8 +991,8 @@ convert_attributes (const json_t *attr)
   }
   {
     char *name = NULL;
-    char *address_street = NULL;
-    char *address_city = NULL;
+    char *street = NULL;
+    char *city = NULL;
 
     if ( (NULL != name_last) ||
          (NULL != name_first) ||
@@ -1013,7 +1013,7 @@ convert_attributes (const json_t *attr)
     if ( (NULL != address_city) ||
          (NULL != address_postal_code) )
     {
-      GNUNET_asprintf (&address_city,
+      GNUNET_asprintf (&city,
                        "%s%s%s %s",
                        (NULL != country_code)
                        ? country_code
@@ -1031,7 +1031,7 @@ convert_attributes (const json_t *attr)
     if ( (NULL != address_street_1) ||
          (NULL != address_street_2) )
     {
-      GNUNET_asprintf (&address_street,
+      GNUNET_asprintf (&street,
                        "%s%s%s",
                        (NULL != address_street_1)
                        ? address_street_1
@@ -1056,16 +1056,18 @@ convert_attributes (const json_t *attr)
       GNUNET_JSON_pack_allow_null (
         GNUNET_JSON_pack_string (
           TALER_ATTRIBUTE_ADDRESS_STREET,
-          address_street)),
+          street)),
       GNUNET_JSON_pack_allow_null (
         GNUNET_JSON_pack_string (
           TALER_ATTRIBUTE_ADDRESS_CITY,
-          address_city)),
+          city)),
       GNUNET_JSON_pack_allow_null (
         GNUNET_JSON_pack_string (
           TALER_ATTRIBUTE_RESIDENCES,
           country_code))
       );
+    GNUNET_free (street);
+    GNUNET_free (city);
     GNUNET_free (name);
   }
   return ret;
@@ -1170,7 +1172,6 @@ handle_proof_finished (void *cls,
       const char *type = NULL;
       json_t *attributes;
       json_t *relationships;
-      json_t *included;
       struct GNUNET_JSON_Specification spec[] = {
         GNUNET_JSON_spec_string ("type",
                                  &type),
@@ -1180,8 +1181,6 @@ handle_proof_finished (void *cls,
                                &attributes),
         GNUNET_JSON_spec_json ("relationships",
                                &relationships),
-        GNUNET_JSON_spec_json ("included",
-                               &included),
         GNUNET_JSON_spec_end ()
       };
 
@@ -1210,10 +1209,10 @@ handle_proof_finished (void *cls,
         struct GNUNET_JSON_Specification ispec[] = {
           GNUNET_JSON_spec_string ("status",
                                    &status),
-          GNUNET_JSON_spec_string ("reference_id",
+          GNUNET_JSON_spec_string ("reference-id",
                                    &reference_id),
           GNUNET_JSON_spec_mark_optional (
-            GNUNET_JSON_spec_string ("expired_at",
+            GNUNET_JSON_spec_string ("expired-at",
                                      &expired_at),
             NULL),
           GNUNET_JSON_spec_end ()
@@ -1319,7 +1318,7 @@ handle_proof_finished (void *cls,
           struct GNUNET_TIME_Absolute expiration;
           json_t *attr;
 
-          attr = extract_attributes (included);
+          attr = convert_attributes (attributes);
           if (NULL == attr)
           {
             GNUNET_break_op (0);
@@ -1744,10 +1743,10 @@ handle_webhook_finished (void *cls,
         struct GNUNET_JSON_Specification ispec[] = {
           GNUNET_JSON_spec_string ("status",
                                    &status),
-          GNUNET_JSON_spec_string ("reference_id",
+          GNUNET_JSON_spec_string ("reference-id",
                                    &reference_id),
           GNUNET_JSON_spec_mark_optional (
-            GNUNET_JSON_spec_string ("expired_at",
+            GNUNET_JSON_spec_string ("expired-at",
                                      &expired_at),
             NULL),
           GNUNET_JSON_spec_end ()
@@ -2081,7 +2080,7 @@ persona_webhook (void *cls,
                     "payload"),
                   "data"),
                 "relationships"),
-              "inquiry_template"),
+              "inquiry-template"),
             "data"),
           "id"));
   if (NULL == wh->template_id)
@@ -2124,7 +2123,6 @@ persona_webhook (void *cls,
     return wh;
   }
 
-
   persona_inquiry_id
     = json_string_value (
         json_object_get (
diff --git a/src/kyclogic/taler-exchange-kyc-tester.c 
b/src/kyclogic/taler-exchange-kyc-tester.c
index bb9c61d5..84324f83 100644
--- a/src/kyclogic/taler-exchange-kyc-tester.c
+++ b/src/kyclogic/taler-exchange-kyc-tester.c
@@ -459,7 +459,6 @@ webhook_finished_cb (
   (void) expiration;
   (void) provider_section;
   kwh->wh = NULL;
-  GNUNET_break (NULL != attributes);
   GNUNET_break (0 == GNUNET_memcmp (account_id,
                                     &cmd_line_h_payto));
   GNUNET_break (0 == strcmp (provider_user_id,
@@ -474,6 +473,12 @@ webhook_finished_cb (
                 "KYC successful for user `%s' (legi: %s)\n",
                 provider_user_id,
                 provider_legitimization_id);
+    GNUNET_break (NULL != attributes);
+    fprintf (stderr,
+             "Extracted attributes:\n");
+    json_dumpf (attributes,
+                stderr,
+                JSON_INDENT (2));
     break;
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -563,6 +568,9 @@ handler_kyc_webhook_generic (
 {
   struct KycWebhookContext *kwh = rc->rh_ctx;
 
+  json_dumpf (root,
+              stderr,
+              JSON_INDENT (2));
   if (NULL == kwh)
   { /* first time */
     kwh = GNUNET_new (struct KycWebhookContext);
@@ -570,11 +578,12 @@ handler_kyc_webhook_generic (
     rc->rh_ctx = kwh;
     rc->rh_cleaner = &clean_kwh;
 
-    if (GNUNET_OK !=
-        TALER_KYCLOGIC_lookup_logic (args[0],
-                                     &kwh->plugin,
-                                     &kwh->pd,
-                                     &kwh->section_name))
+    if ( (NULL == args[0]) ||
+         (GNUNET_OK !=
+          TALER_KYCLOGIC_lookup_logic (args[0],
+                                       &kwh->plugin,
+                                       &kwh->pd,
+                                       &kwh->section_name)) )
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   "KYC logic `%s' unknown (check KYC provider 
configuration)\n",
@@ -584,14 +593,6 @@ handler_kyc_webhook_generic (
                                          
TALER_EC_EXCHANGE_KYC_GENERIC_LOGIC_UNKNOWN,
                                          args[0]);
     }
-    if (0 != strcmp (args[0],
-                     kwh->section_name))
-    {
-      return TALER_MHD_reply_with_error (rc->connection,
-                                         MHD_HTTP_BAD_REQUEST,
-                                         TALER_EC_GENERIC_PARAMETER_MALFORMED,
-                                         "$PROVIDER_SECTION");
-    }
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Calling KYC provider specific webhook\n");
     kwh->wh = kwh->plugin->webhook (kwh->plugin->cls,
@@ -652,6 +653,8 @@ handler_kyc_webhook_get (
   struct TEKT_RequestContext *rc,
   const char *const args[])
 {
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Webhook GET triggered\n");
   return handler_kyc_webhook_generic (rc,
                                       MHD_HTTP_METHOD_GET,
                                       NULL,
@@ -673,6 +676,8 @@ handler_kyc_webhook_post (
   const json_t *root,
   const char *const args[])
 {
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Webhook POST triggered\n");
   return handler_kyc_webhook_generic (rc,
                                       MHD_HTTP_METHOD_POST,
                                       root,
@@ -715,17 +720,26 @@ proof_cb (
               status,
               http_status,
               provider_user_id);
-  if (NULL != attributes)
+  if (TALER_KYCLOGIC_STATUS_SUCCESS == status)
+  {
+    GNUNET_break (NULL != attributes);
+    fprintf (stderr,
+             "Extracted attributes:\n");
     json_dumpf (attributes,
                 stderr,
                 JSON_INDENT (2));
-  MHD_resume_connection (rs->rc->connection);
-  TALER_MHD_daemon_trigger ();
+  }
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Returning response %p with status %u\n",
+              response,
+              http_status);
   rs->rc->response = response;
   rs->rc->http_status = http_status;
   GNUNET_CONTAINER_DLL_remove (rs_head,
                                rs_tail,
                                rs);
+  MHD_resume_connection (rs->rc->connection);
+  TALER_MHD_daemon_trigger ();
   GNUNET_free (rs);
 }
 
@@ -750,6 +764,8 @@ handler_kyc_proof_get (
   const char *section_name;
   const char *h_paytos;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "GET /kyc-proof triggered\n");
   if (NULL == args[0])
   {
     GNUNET_break_op (0);
@@ -1162,14 +1178,14 @@ handle_mhd_request (void *cls,
       }
       /* cache to avoid the loop next time */
       rc->rh = rh;
-      /* run handler */
-      return proceed_with_handler (rc,
-                                   url + tok_size + 1,
-                                   upload_data,
-                                   upload_data_size);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                  "Handler found for %s '%s'\n",
+                  method,
+                  url);
+      return MHD_YES;
     }
 
-    if (found) /* FIXME: this can never be true right now */
+    if (found)
     {
       /* we found a matching address, but the method is wrong */
       struct MHD_Response *reply;
@@ -1348,7 +1364,7 @@ initiate_cb (
     return;
   }
   fprintf (stdout,
-           "Visit `%s' to begin KYC process (-u: '%s', -U: '%s')\n",
+           "Visit `%s' to begin KYC process.\nAlso use: 
taler-exchange-kyc-tester -w -u '%s' -U '%s'\n",
            redirect_url,
            provider_user_id,
            provider_legitimization_id);

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