gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: add logic to parse AML decisions


From: gnunet
Subject: [taler-exchange] branch master updated: add logic to parse AML decisions response
Date: Thu, 02 Feb 2023 17:16:19 +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 a703171f add logic to parse AML decisions response
a703171f is described below

commit a703171f083bab8bb5f316edc47bcffced1f171a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Thu Feb 2 17:16:13 2023 +0100

    add logic to parse AML decisions response
---
 src/lib/exchange_api_lookup_aml_decision.c  | 16 +++---
 src/lib/exchange_api_lookup_aml_decisions.c | 78 +++++++++++++++++++++++++++--
 2 files changed, 84 insertions(+), 10 deletions(-)

diff --git a/src/lib/exchange_api_lookup_aml_decision.c 
b/src/lib/exchange_api_lookup_aml_decision.c
index 537101b1..31c772a5 100644
--- a/src/lib/exchange_api_lookup_aml_decision.c
+++ b/src/lib/exchange_api_lookup_aml_decision.c
@@ -123,12 +123,14 @@ parse_kyc_attributes (const json_t *kyc_attributes,
   json_array_foreach (kyc_attributes, idx, obj)
   {
     struct TALER_EXCHANGE_KycHistoryDetail *kyc = &kyc_attributes_ar[idx];
-    json_t *attributes;
+    json_t *attributes = NULL;
     struct GNUNET_JSON_Specification spec[] = {
       GNUNET_JSON_spec_timestamp ("collection_time",
                                   &kyc->collection_time),
-      GNUNET_JSON_spec_json ("attributes",
-                             &attributes),
+      GNUNET_JSON_spec_mark_optional (
+        GNUNET_JSON_spec_json ("attributes",
+                               &attributes),
+        NULL),
       GNUNET_JSON_spec_string ("provider_section",
                                &kyc->provider_section),
       GNUNET_JSON_spec_end ()
@@ -187,10 +189,10 @@ parse_decision_ok (struct 
TALER_EXCHANGE_LookupAmlDecision *lh,
   lr.details.success.aml_history_length = json_array_size (aml_history);
   lr.details.success.kyc_attributes_length = json_array_size (kyc_attributes);
   {
-    struct TALER_EXCHANGE_AmlDecisionDetail aml_history_ar
-    [GNUNET_NZL (lr.details.success.aml_history_length)];
-    struct TALER_EXCHANGE_KycHistoryDetail kyc_attributes_ar
-    [lr.details.success.kyc_attributes_length];
+    struct TALER_EXCHANGE_AmlDecisionDetail aml_history_ar[
+      GNUNET_NZL (lr.details.success.aml_history_length)];
+    struct TALER_EXCHANGE_KycHistoryDetail kyc_attributes_ar[
+      lr.details.success.kyc_attributes_length];
     enum GNUNET_GenericReturnValue ret = GNUNET_SYSERR;
 
     lr.details.success.aml_history = aml_history_ar;
diff --git a/src/lib/exchange_api_lookup_aml_decisions.c 
b/src/lib/exchange_api_lookup_aml_decisions.c
index fb5bfaa2..da17aa78 100644
--- a/src/lib/exchange_api_lookup_aml_decisions.c
+++ b/src/lib/exchange_api_lookup_aml_decisions.c
@@ -63,6 +63,49 @@ struct TALER_EXCHANGE_LookupAmlDecisions
 };
 
 
+/**
+ * Parse AML decision summary array.
+ *
+ * @param decisions JSON array with AML decision summaries
+ * @param[out] decision_ar where to write the result
+ * @return #GNUNET_OK on success
+ */
+static enum GNUNET_GenericReturnValue
+parse_aml_decisions (const json_t *decisions,
+                     struct TALER_EXCHANGE_AmlDecisionSummary *decision_ar)
+{
+  json_t *obj;
+  size_t idx;
+
+  json_array_foreach (decisions, idx, obj)
+  {
+    struct TALER_EXCHANGE_AmlDecisionSummary *decision = &decision_ar[idx];
+    uint32_t state32;
+    struct GNUNET_JSON_Specification spec[] = {
+      GNUNET_JSON_spec_timestamp ("last_decision_time",
+                                  &decision->last_decision_time),
+      GNUNET_JSON_spec_fixed_auto ("h_payto",
+                                   &decision->h_payto),
+      GNUNET_JSON_spec_uint32 ("current_state",
+                               &state32),
+      GNUNET_JSON_spec_end ()
+    };
+
+    if (GNUNET_OK !=
+        GNUNET_JSON_parse (obj,
+                           spec,
+                           NULL,
+                           NULL))
+    {
+      GNUNET_break_op (0);
+      return GNUNET_SYSERR;
+    }
+    decision->current_state = (enum TALER_AmlDecisionState) state32;
+  }
+  return GNUNET_OK;
+}
+
+
 /**
  * Parse the provided decision data from the "200 OK" response.
  *
@@ -78,10 +121,39 @@ parse_decisions_ok (struct 
TALER_EXCHANGE_LookupAmlDecisions *lh,
     .hr.reply = json,
     .hr.http_status = MHD_HTTP_OK
   };
-  int ret = GNUNET_SYSERR;
+  json_t *records;
+  struct GNUNET_JSON_Specification spec[] = {
+    GNUNET_JSON_spec_json ("records",
+                           &records),
+    GNUNET_JSON_spec_end ()
+  };
+
+  if (GNUNET_OK !=
+      GNUNET_JSON_parse (json,
+                         spec,
+                         NULL,
+                         NULL))
+  {
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
+  }
+  lr.details.success.decisions_length = json_array_size (records);
+  {
+    struct TALER_EXCHANGE_AmlDecisionSummary decisions[
+      GNUNET_NZL (lr.details.success.decisions_length)];
+    enum GNUNET_GenericReturnValue ret = GNUNET_SYSERR;
 
-  GNUNET_break (0); // FIXME: parse response!
-  return ret;
+    lr.details.success.decisions = decisions;
+    ret = parse_aml_decisions (records,
+                               decisions);
+    if (GNUNET_OK == ret)
+    {
+      lh->decisions_cb (lh->decisions_cb_cls,
+                        &lr);
+      lh->decisions_cb = NULL;
+    }
+    return ret;
+  }
 }
 
 

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