[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-anastasis] branch master updated: implement 'add_provider' transition,
gnunet <=