gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: return default limits from /kyc-


From: gnunet
Subject: [taler-exchange] branch master updated: return default limits from /kyc-check if limits is NULL, instead of no limits
Date: Wed, 11 Sep 2024 22:57:12 +0200

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 fad6728a3 return default limits from /kyc-check if limits is NULL, 
instead of no limits
fad6728a3 is described below

commit fad6728a3f36892bf3187fcddcabf5ae544bf56e
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Sep 11 22:57:06 2024 +0200

    return default limits from /kyc-check if limits is NULL, instead of no 
limits
---
 src/kyclogic/kyclogic_api.c | 173 +++++++++++++++++++++++++++-----------------
 1 file changed, 105 insertions(+), 68 deletions(-)

diff --git a/src/kyclogic/kyclogic_api.c b/src/kyclogic/kyclogic_api.c
index a61baf3be..9105522d4 100644
--- a/src/kyclogic/kyclogic_api.c
+++ b/src/kyclogic/kyclogic_api.c
@@ -784,85 +784,122 @@ TALER_KYCLOGIC_status2s (enum TALER_KYCLOGIC_KycStatus 
status)
 json_t *
 TALER_KYCLOGIC_rules_to_limits (const json_t *jrules)
 {
-  json_t *limits;
-  json_t *limit;
-  json_t *rule;
-  size_t idx;
-
-  limits = json_array ();
-  GNUNET_assert (NULL != limits);
-  json_array_foreach ((json_t *) jrules, idx, rule)
-  {
-    struct GNUNET_TIME_Relative timeframe;
-    struct TALER_Amount threshold;
-    bool exposed = false;
-    const json_t *jmeasures;
-    enum TALER_KYCLOGIC_KycTriggerEvent operation_type;
-    struct GNUNET_JSON_Specification spec[] = {
-      TALER_JSON_spec_kycte ("operation_type",
-                             &operation_type),
-      GNUNET_JSON_spec_relative_time ("timeframe",
-                                      &timeframe),
-      TALER_JSON_spec_amount_any ("threshold",
-                                  &threshold),
-      GNUNET_JSON_spec_array_const ("measures",
-                                    &jmeasures),
-      GNUNET_JSON_spec_mark_optional (
-        GNUNET_JSON_spec_bool ("exposed",
-                               &exposed),
-        NULL),
-      GNUNET_JSON_spec_end ()
-    };
-    bool forbidden = false;
-    size_t i;
-    json_t *jmeasure;
-
-    if (GNUNET_OK !=
-        GNUNET_JSON_parse (jrules,
-                           spec,
-                           NULL, NULL))
+  if (NULL == jrules)
+  {
+    /* default limits apply */
+    const struct TALER_KYCLOGIC_KycRule *rules
+      = default_rules.kyc_rules;
+    unsigned int num_rules
+      = default_rules.num_kyc_rules;
+    json_t *jlimits;
+
+    jlimits = json_array ();
+    GNUNET_assert (NULL != jlimits);
+    for (unsigned int i = 0; i<num_rules; i++)
     {
-      GNUNET_break_op (0);
-      json_decref (limits);
-      return NULL;
+      const struct TALER_KYCLOGIC_KycRule *rule = &rules[i];
+      json_t *limit;
+
+      if (! rule->exposed)
+        continue;
+      limit = GNUNET_JSON_PACK (
+        GNUNET_JSON_pack_bool ("soft_limit",
+                               ! rule->verboten),
+        TALER_JSON_pack_kycte ("operation_type",
+                               rule->trigger),
+        GNUNET_JSON_pack_time_rel ("timeframe",
+                                   rule->timeframe),
+        TALER_JSON_pack_amount ("threshold",
+                                &rule->threshold)
+        );
+      GNUNET_assert (0 ==
+                     json_array_append_new (jlimits,
+                                            limit));
     }
-    if (! exposed)
-      continue;
-    json_array_foreach (jmeasures, i, jmeasure)
+    return jlimits;
+  }
+
+  {
+    json_t *limits;
+    json_t *limit;
+    json_t *rule;
+    size_t idx;
+
+    limits = json_array ();
+    GNUNET_assert (NULL != limits);
+    json_array_foreach ((json_t *) jrules, idx, rule)
     {
-      const char *val;
+      struct GNUNET_TIME_Relative timeframe;
+      struct TALER_Amount threshold;
+      bool exposed = false;
+      const json_t *jmeasures;
+      enum TALER_KYCLOGIC_KycTriggerEvent operation_type;
+      struct GNUNET_JSON_Specification spec[] = {
+        TALER_JSON_spec_kycte ("operation_type",
+                               &operation_type),
+        GNUNET_JSON_spec_relative_time ("timeframe",
+                                        &timeframe),
+        TALER_JSON_spec_amount_any ("threshold",
+                                    &threshold),
+        GNUNET_JSON_spec_array_const ("measures",
+                                      &jmeasures),
+        GNUNET_JSON_spec_mark_optional (
+          GNUNET_JSON_spec_bool ("exposed",
+                                 &exposed),
+          NULL),
+        GNUNET_JSON_spec_end ()
+      };
+      bool forbidden = false;
+      size_t i;
+      json_t *jmeasure;
 
-      val = json_string_value (jmeasure);
-      if (NULL == val)
+      if (GNUNET_OK !=
+          GNUNET_JSON_parse (jrules,
+                             spec,
+                             NULL, NULL))
       {
         GNUNET_break_op (0);
         json_decref (limits);
         return NULL;
       }
-      if (0 == strcasecmp (KYC_MEASURE_IMPOSSIBLE,
-                           val))
-        forbidden = true;
-    }
+      if (! exposed)
+        continue;
+      json_array_foreach (jmeasures, i, jmeasure)
+      {
+        const char *val;
 
-    limit = GNUNET_JSON_PACK (
-      TALER_JSON_pack_kycte (
-        "operation_type",
-        operation_type),
-      GNUNET_JSON_pack_time_rel (
-        "timeframe",
-        timeframe),
-      TALER_JSON_pack_amount (
-        "threshold",
-        &threshold),
-      /* optional since v21, defaults to 'false' */
-      GNUNET_JSON_pack_bool (
-        "soft_limit",
-        ! forbidden));
-    GNUNET_assert (0 ==
-                   json_array_append_new (limits,
-                                          limit));
+        val = json_string_value (jmeasure);
+        if (NULL == val)
+        {
+          GNUNET_break_op (0);
+          json_decref (limits);
+          return NULL;
+        }
+        if (0 == strcasecmp (KYC_MEASURE_IMPOSSIBLE,
+                             val))
+          forbidden = true;
+      }
+
+      limit = GNUNET_JSON_PACK (
+        TALER_JSON_pack_kycte (
+          "operation_type",
+          operation_type),
+        GNUNET_JSON_pack_time_rel (
+          "timeframe",
+          timeframe),
+        TALER_JSON_pack_amount (
+          "threshold",
+          &threshold),
+        /* optional since v21, defaults to 'false' */
+        GNUNET_JSON_pack_bool (
+          "soft_limit",
+          ! forbidden));
+      GNUNET_assert (0 ==
+                     json_array_append_new (limits,
+                                            limit));
+    }
+    return limits;
   }
-  return limits;
 }
 
 

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