[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.