gnunet-svn
[Top][All Lists]
Advanced

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

[taler-anastasis] 01/03: add_policy


From: gnunet
Subject: [taler-anastasis] 01/03: add_policy
Date: Mon, 02 Nov 2020 11:44:30 +0100

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

dennis-neufeld pushed a commit to branch master
in repository anastasis.

commit e329f11811491bf256e6f6374f1c91dbf7e7fce6
Author: Dennis Neufeld <dennis.neufeld@students.bfh.ch>
AuthorDate: Sat Oct 31 19:29:39 2020 +0100

    add_policy
---
 src/lib/anastasis_api_backup_redux.c | 87 +++++++++++++++++++++++++++++++++++-
 1 file changed, 86 insertions(+), 1 deletion(-)

diff --git a/src/lib/anastasis_api_backup_redux.c 
b/src/lib/anastasis_api_backup_redux.c
index 2bcec84..a1b9af5 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_backup_redux.c
@@ -509,7 +509,92 @@ add_policy (json_t *state,
             ANASTASIS_ActionCallback cb,
             void *cb_cls)
 {
-  // FIXME: implement
+  size_t index;
+  json_t *method;
+  struct TALER_Amount recovery_cost;
+  json_t *methods = json_array ();
+
+  GNUNET_assert (json_is_array (methods));
+  json_t *policy = json_object ();
+
+  GNUNET_assert (NULL != policy);
+  json_t *policies = json_object_get (state,
+                                      "policies");
+
+  GNUNET_assert (json_is_array (policies));
+  json_t *arg_array = json_object_get (arguments,
+                                       "policy");
+
+  GNUNET_assert (json_is_array (arg_array));
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_amount_get_zero (
+                   json_string_value (json_object_get (state,
+                                                       "currency")),
+                   &recovery_cost));
+
+  json_array_foreach (arg_array, index, method)
+  {
+    struct TALER_Amount method_cost;
+    size_t provider_index;
+    json_t *provider;
+    json_t *auth_method_arr = json_object_get (state,
+                                               "authentication_methods");
+
+    GNUNET_assert (json_is_array (auth_method_arr));
+    size_t index = json_integer_value (json_object_get (method,
+                                                        "auth_method_index"));
+
+    const char *method_type = json_string_value (json_array_get (
+                                                   auth_method_arr,
+                                                   index));
+
+    const char *provider_id = json_string_value (json_object_get (method,
+                                                                  "provider"));
+
+    json_t *auth_provider_arr = json_object_get (json_object_get (state,
+                                                                  
"authentication_providers"),
+                                                 method_type);
+
+    GNUNET_assert (json_is_array (auth_provider_arr));
+    json_array_foreach (auth_provider_arr, provider_index, provider)
+    {
+      json_t *provider_data;
+      if (NULL != (provider_data = json_object_get (provider,
+                                                    provider_id)))
+      {
+        GNUNET_assert (GNUNET_OK ==
+                       TALER_string_to_amount (
+                         json_string_value (json_object_get (provider_data,
+                                                             "method_cost")),
+                         &method_cost));
+        if (0 >
+            TALER_amount_add (&recovery_cost,
+                              &recovery_cost,
+                              &method_cost))
+        {
+          GNUNET_break (0);
+          return NULL;
+        }
+        json_decref (provider_data);
+        break;
+      }
+    }
+    json_decref (auth_provider_arr);
+    json_array_append_new (methods,
+                           json_pack ("{s:I, s:s}",
+                                      "authentication_method",
+                                      (json_int_t) index,
+                                      "provider",
+                                      provider_id));
+  }
+  policy = json_pack ("{s:o, s:o}",
+                      "recovery_cost",
+                      TALER_JSON_from_amount (&recovery_cost),
+                      "methods",
+                      methods);
+  json_array_append_new (policies,
+                         policy);
+
   cb (cb_cls,
       ANASTASIS_EC_NONE,
       state);

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