gnunet-svn
[Top][All Lists]
Advanced

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

[taler-anastasis] branch master updated: implement 'add_provider' transi


From: gnunet
Subject: [taler-anastasis] branch master updated: implement 'add_provider' transition
Date: Wed, 17 Feb 2021 12:57:12 +0100

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

grothoff pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new afbefd1  implement 'add_provider' transition
afbefd1 is described below

commit afbefd1bd2678103f5f918c0d2102c7bf699c8d6
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Feb 17 12:57:09 2021 +0100

    implement 'add_provider' transition
---
 src/reducer/anastasis_api_backup_redux.c | 94 +++++++++++++++++++++++++++++---
 1 file changed, 87 insertions(+), 7 deletions(-)

diff --git a/src/reducer/anastasis_api_backup_redux.c 
b/src/reducer/anastasis_api_backup_redux.c
index d5afee9..1043c4e 100644
--- a/src/reducer/anastasis_api_backup_redux.c
+++ b/src/reducer/anastasis_api_backup_redux.c
@@ -2100,13 +2100,10 @@ back_finished (json_t *state,
  * "add_provider" action.  Adds another Anastasis provider
  * to the list of available providers for storing information.
  *
- * Returns an #ANASTASIS_ReduxAction if operation is async.
- *
  * @param state state to operate on
  * @param arguments arguments with a provider URL to add
  * @param cb callback (#DispatchHandler) to call during/after operation
  * @param cb_cls callback closure
- * @return NULL
  */
 static struct ANASTASIS_ReduxAction *
 add_provider (json_t *state,
@@ -2114,9 +2111,64 @@ add_provider (json_t *state,
               ANASTASIS_ActionCallback cb,
               void *cb_cls)
 {
-  // FIXME: to be implemented!
-  GNUNET_break (0);
-  return NULL;
+  json_t *urls;
+  json_t *tlist;
+
+  tlist = json_object_get (state,
+                           "authentication_providers");
+  if (NULL == tlist)
+  {
+    tlist = json_object ();
+    GNUNET_assert (NULL != tlist);
+    GNUNET_assert (0 ==
+                   json_object_set_new (state,
+                                        "authentication_providers",
+                                        tlist));
+  }
+
+  if (NULL == arguments)
+  {
+    ANASTASIS_redux_fail_ (cb,
+                           cb_cls,
+                           TALER_EC_ANASTASIS_REDUCER_INPUT_INVALID,
+                           "arguments missing");
+    return NULL;
+  }
+  urls = json_object_get (arguments,
+                          "urls");
+  if (NULL == urls)
+  {
+    ANASTASIS_redux_fail_ (cb,
+                           cb_cls,
+                           TALER_EC_ANASTASIS_REDUCER_INPUT_INVALID,
+                           "'urls' missing");
+    return NULL;
+  }
+  {
+    size_t index;
+    json_t *url;
+
+    json_array_foreach (urls, index, url)
+    {
+      const char *url_str = json_string_value (url);
+
+      if (NULL == url_str)
+      {
+        ANASTASIS_redux_fail_ (cb,
+                               cb_cls,
+                               TALER_EC_ANASTASIS_REDUCER_INPUT_INVALID,
+                               "'urls' must be strings");
+        return NULL;
+      }
+      GNUNET_assert (json_object_set_new (tlist,
+                                          url_str,
+                                          json_object ()));
+    }
+  }
+  return ANASTASIS_REDUX_backup_begin_ (state,
+                                        arguments,
+                                        cb,
+                                        cb_cls);
 }
 
 
@@ -2366,13 +2418,41 @@ static void
 providers_complete (struct BackupStartState *bss)
 {
   struct BackupStartStateProviderEntry *pe;
+  json_t *tlist;
 
+  tlist = json_object_get (bss->state,
+                           "authentication_providers");
+  if (NULL == tlist)
+  {
+    tlist = json_object ();
+    GNUNET_assert (NULL != tlist);
+    GNUNET_assert (0 ==
+                   json_object_set_new (bss->state,
+                                        "authentication_providers",
+                                        tlist));
+  }
   while (NULL != (pe = bss->pe_head))
   {
+    json_t *provider_list;
+
     GNUNET_CONTAINER_DLL_remove (bss->pe_head,
                                  bss->pe_tail,
                                  pe);
-    // FIXME: merge pe->istate into bss->state!
+    provider_list = json_object_get (pe->istate,
+                                     "authentication_providers");
+    /* merge provider_list into tlist (overriding existing entries) */
+    if (NULL != provider_list)
+    {
+      const char *url;
+      json_t *value;
+
+      json_object_foreach (provider_list, url, value) {
+        GNUNET_assert (0 ==
+                       json_object_set (tlist,
+                                        url,
+                                        value));
+      }
+    }
     json_decref (pe->istate);
     GNUNET_free (pe);
   }

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