[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 01/02: refactoring
From: |
gnunet |
Subject: |
[taler-anastasis] 01/02: refactoring |
Date: |
Fri, 25 Sep 2020 19:22:17 +0200 |
This is an automated email from the git hooks/post-receive script.
dennis-neufeld pushed a commit to branch master
in repository anastasis.
commit 0a17e705b5682d076e3019afb855eb807434896f
Author: Dennis Neufeld <dennis.neufeld@students.bfh.ch>
AuthorDate: Thu Sep 24 12:06:24 2020 +0200
refactoring
---
src/cli/anastasis-cli-redux.c | 40 +-
src/include/anastasis_redux.h | 25 ++
src/lib/Makefile.am | 2 +
src/lib/anastasis_api_backup_redux.c | 401 +--------------------
src/lib/anastasis_api_recovery_redux.c | 142 ++++++++
...is_api_backup_redux.c => anastasis_api_redux.c} | 355 ++++++------------
6 files changed, 291 insertions(+), 674 deletions(-)
diff --git a/src/cli/anastasis-cli-redux.c b/src/cli/anastasis-cli-redux.c
index bd32856..e9434eb 100644
--- a/src/cli/anastasis-cli-redux.c
+++ b/src/cli/anastasis-cli-redux.c
@@ -161,12 +161,12 @@ run (void *cls,
"WARNING",
NULL));
- if (! (r_flag ^ b_flag ^ i_flag) || (r_flag && b_flag && i_flag))
+ if (! (r_flag ^ b_flag))
{
printf ("Please set one option: -b, -r, -i!\n");
printf (
"Example: anastasis-reducer -b prev.json action arguments.json
new.json\n");
- printf ("Example: anastasis-reducer -i init.json\n");
+ printf ("Example: anastasis-reducer -b -i init.json\n");
GNUNET_SCHEDULER_shutdown ();
return;
}
@@ -176,7 +176,10 @@ run (void *cls,
if (args[0])
{
path_new_state = (char *) args[0];
- new_state = ANASTASIS_backup_start (cfg);
+ if (b_flag)
+ new_state = ANASTASIS_backup_start (cfg);
+ else if (r_flag)
+ new_state = ANASTASIS_recovery_start (cfg);
if (! new_state)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -186,9 +189,7 @@ run (void *cls,
GNUNET_SCHEDULER_shutdown ();
return;
}
- if (! (0 == json_dump_file (new_state,
- path_new_state,
- JSON_COMPACT)))
+ if (0 != persist_new_state ())
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"At %s:%u failed to dump json into file!\n",
@@ -201,7 +202,7 @@ run (void *cls,
else
{
printf ("Please give path for json containing initial state!\n");
- printf ("Example: anastasis-reducer -i init.json\n");
+ printf ("Example: anastasis-reducer -b -i init.json\n");
GNUNET_SCHEDULER_shutdown ();
return;
}
@@ -259,18 +260,6 @@ run (void *cls,
&rc);
rc = GNUNET_CURL_gnunet_rc_create (ctx);
- if (i_flag)
- {
- new_state = ANASTASIS_backup_start (cfg);
- if (NULL != new_state)
- if (0 == persist_new_state ())
- return;
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to persist new state! \n");
- GNUNET_SCHEDULER_shutdown ();
- return;
- }
-
if (b_flag)
ANASTASIS_backup_action (prev_state,
action,
@@ -278,13 +267,12 @@ run (void *cls,
&action_cb,
cls);
-
-// if (r_flag)
-// ANASTASIS_recovery_action (prev_state,
-// action,
-// arguments,
-// &action_cb,
-// cls);
+ if (r_flag)
+ ANASTASIS_recovery_action (prev_state,
+ action,
+ arguments,
+ &action_cb,
+ cls);
}
diff --git a/src/include/anastasis_redux.h b/src/include/anastasis_redux.h
index 1d066e4..a6f4426 100644
--- a/src/include/anastasis_redux.h
+++ b/src/include/anastasis_redux.h
@@ -37,6 +37,12 @@ extern json_t *redux_countries;
*/
extern json_t *redux_id_attr;
+/**
+ * JSON containing anastasis providers.
+ */
+extern json_t *provider_list;
+
+
/**
* Returns an initial ANASTASIS backup state.
*
@@ -55,6 +61,25 @@ json_t *
ANASTASIS_recovery_start (const struct GNUNET_CONFIGURATION_Handle *cfg);
+/**
+ * Returns an initial ANASTASIS recovery state.
+ *
+ * @return NULL on failure
+ */
+json_t *
+ANASTASIS_recovery_start (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
+
+/**
+ * Function to load json containing all countries.
+ * Returns #GNUNET_OK if operation succeeded, else #GNUNET_SYSERR.
+ *
+ * @return int
+ */
+int
+redux_countries_init ();
+
+
/**
* Signature of the callback passed to #ANASTASIS_backup_action and
* #ANASTASIS_recover_action.
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 809308b..ae4c20c 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -101,6 +101,8 @@ libanastasisredux_la_LDFLAGS = \
-version-info 0:0:0 \
-no-undefined
libanastasisredux_la_SOURCES = \
+ anastasis_api_redux.c \
+ anastasis_api_recovery_redux.c \
anastasis_api_backup_redux.c
libanastasisredux_la_LIBADD = \
-lgnunetjson \
diff --git a/src/lib/anastasis_api_backup_redux.c
b/src/lib/anastasis_api_backup_redux.c
index 9690ece..1a32f70 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_backup_redux.c
@@ -15,7 +15,7 @@
*/
/**
* @file lib/anastasis_api_backup_redux.c
- * @brief anastasis reducer api
+ * @brief anastasis reducer backup api
* @author Christian Grothoff
* @author Dominik Meister
* @author Dennis Neufeld
@@ -26,22 +26,6 @@
#include "anastasis_redux.h"
#include "anastasis_error_codes.h"
-/**
- * JSON containing all supported countries and additional data.
- */
-json_t *redux_countries;
-
-/**
- * JSON containing country specific identity attributes to ask the user for.
- */
-json_t *redux_id_attr;
-
-/**
- * JSON containing anastasis providers.
- */
-json_t *provider_list;
-
-
/**
* Callback function FIXME: Description.
*
@@ -57,97 +41,6 @@ typedef void
void *cb_cls);
-/**
- * Function to load json containing all countries.
- * Returns #GNUNET_OK if operation succeeded, else #GNUNET_SYSERR.
- *
- * @return int
- */
-static int
-redux_countries_init ()
-{
- char *dn;
- json_error_t error;
-
- {
- char *path;
-
- path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
- if (NULL == path)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- GNUNET_asprintf (&dn,
- "%s/share/anastasis/redux.countries.json",
- path);
- GNUNET_free (path);
- }
- redux_countries = json_load_file (dn, JSON_COMPACT, &error);
- if (NULL == redux_countries)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to parse `%s': %s at %d:%d (%d)\n",
- dn,
- error.text,
- error.line,
- error.column,
- error.position);
- GNUNET_free (dn);
- return GNUNET_SYSERR;
- }
- GNUNET_free (dn);
- return GNUNET_OK;
-}
-
-
-/**
- * Function to load json containing country specific
- * identity attributes. Returns #GNUNET_OK if operation
- * succeeded, else #GNUNET_SYSERR.
- *
- * @param country_code country code (e.g. "de")
- * @return int
- */
-static int
-redux_id_attr_init (const char*country_code)
-{
- char *dn;
- json_error_t error;
-
- {
- char *path;
-
- path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
- if (NULL == path)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- GNUNET_asprintf (&dn,
- "%s/share/anastasis/redux.%s.json",
- path,
- country_code);
- GNUNET_free (path);
- }
- redux_id_attr = json_load_file (dn, JSON_COMPACT, &error);
- if (NULL == redux_id_attr)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to parse `%s': %s at %d:%d (%d)\n",
- dn,
- error.text,
- error.line,
- error.column,
- error.position);
- GNUNET_free (dn);
- return GNUNET_SYSERR;
- }
- GNUNET_free (dn);
- return GNUNET_OK;
-}
-
-
/**
* Returns an initial ANASTASIS backup state.
*
@@ -196,213 +89,6 @@ ANASTASIS_backup_start (const struct
GNUNET_CONFIGURATION_Handle *cfg)
}
-static void
-select_continent (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- size_t index;
- json_t *country;
- json_t *root = json_object_get (redux_countries, "countries");
- json_t *countries = json_array ();
- json_t *continent = json_object_get (arguments, "continent");
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == continent)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
-
- json_array_foreach (root, index, country)
- {
- json_t *temp_continent = json_object_get (country,
- "continent");
-
- if (1 == json_equal (continent, temp_continent))
- json_array_append_new (countries, country);
- }
-
- json_object_set (new_state,
- "backup-state",
- json_string ("ReduxContinentSelectedState"));
-
- json_object_set_new (new_state,
- "selected_continent",
- continent);
-
- json_object_set_new (new_state,
- "countries",
- countries);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
-static void
-select_country (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- json_t *root;
- json_t *country = json_object_get (arguments, "country_code");
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == country)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (GNUNET_SYSERR ==
- redux_id_attr_init (json_string_value (country)))
- {
- GNUNET_break (0);
- return NULL;
- }
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- root = json_object_get (redux_id_attr, "required_attributes");
-
- json_object_set (new_state,
- "backup-state",
- json_string ("ReduxCountrySelectedState"));
-
- json_object_set_new (new_state,
- "selected_country",
- country);
-
- json_object_set_new (new_state,
- "required_attributes",
- root);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
-static void
-enter_user_attributes (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- json_t *attributes = json_object_get (arguments, "identity");
- json_t *root;
- char *dn;
- json_error_t error;
-
- {
- char *path;
-
- path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
- if (NULL == path)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- GNUNET_asprintf (&dn,
- "%s/share/anastasis/provider-list.json",
- path);
- GNUNET_free (path);
- }
- provider_list = json_load_file (dn, JSON_COMPACT, &error);
- if (NULL == provider_list)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to parse `%s': %s at %d:%d (%d)\n",
- dn,
- error.text,
- error.line,
- error.column,
- error.position);
- GNUNET_free (dn);
- return GNUNET_SYSERR;
- }
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == attributes)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
-
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- root = json_object_get (provider_list, "anastasis-provider");
-
- json_object_set (new_state,
- "backup-state",
- json_string ("ReduxUserAttributesAddedState"));
-
- json_object_set_new (new_state,
- "identity_attributes",
- attributes);
-
- json_object_set_new (new_state,
- "provider-list",
- root);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
static void
edit_user_attributes (const json_t *state,
const json_t *arguments,
@@ -447,66 +133,6 @@ edit_user_attributes (const json_t *state,
}
-static void
-change_country (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- json_t *root;
- json_t *country = json_object_get (arguments, "country_code");
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == country)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (GNUNET_SYSERR ==
- redux_id_attr_init (json_string_value (country)))
- {
- GNUNET_break (0);
- return NULL;
- }
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- root = json_object_get (redux_id_attr, "required_attributes");
-
-
- json_object_set (new_state,
- "backup-state",
- json_string ("ReduxCountrySelectedState"));
-
- json_object_set_new (new_state,
- "selected_country",
- country);
-
- json_object_set_new (new_state,
- "required_attributes",
- root);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
static void
add_authentication (const json_t *state,
const json_t *arguments,
@@ -583,26 +209,6 @@ ANASTASIS_backup_action (const json_t *state,
const char *backup_action;
DispatchHandler fun;
} dispatchers[] = {
- {
- "ReduxInitialBackupState",
- "selection_continent",
- &select_continent
- },
- {
- "ReduxContinentSelectedState",
- "selection_country",
- &select_country
- },
- {
- "ReduxCountrySelectedState",
- "entering_user_attributes",
- &enter_user_attributes
- },
- {
- "ReduxCountrySelectedState",
- "changing_country",
- &change_country
- },
{
"ReduxUserAttributesAddedState",
"adding_authentication",
@@ -613,11 +219,6 @@ ANASTASIS_backup_action (const json_t *state,
"editing_user_attributes",
&edit_user_attributes
},
- {
- "ReduxUserAttributesAddedState",
- "changing_country",
- &change_country
- },
{
"ReduxAuthenticationAddedState",
"adding_policy",
diff --git a/src/lib/anastasis_api_recovery_redux.c
b/src/lib/anastasis_api_recovery_redux.c
new file mode 100644
index 0000000..459168a
--- /dev/null
+++ b/src/lib/anastasis_api_recovery_redux.c
@@ -0,0 +1,142 @@
+/*
+ This file is part of Anastasis
+ Copyright (C) 2020 Taler Systems SA
+
+ Anastasis is free software; you can redistribute it and/or modify it under
the
+ terms of the GNU Lesser General Public License as published by the Free
Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ Anastasis; see the file COPYING.GPL. If not, see
<http://www.gnu.org/licenses/>
+*/
+/**
+ * @file lib/anastasis_api_recovery_redux.c
+ * @brief anastasis reducer recovery api
+ * @author Christian Grothoff
+ * @author Dominik Meister
+ * @author Dennis Neufeld
+ */
+
+#include <platform.h>
+#include <jansson.h>
+#include "anastasis_redux.h"
+#include "anastasis_error_codes.h"
+
+/**
+ * Callback function FIXME: Description.
+ *
+ * @param state FIXME: Description
+ * @param arguments FIXME: Description
+ * @param cb FIXME: Description
+ * @param cb_cls FIXME: Description
+ */
+typedef void
+(*DispatchHandler)(const json_t *state,
+ const json_t *arguments,
+ ANASTASIS_ActionCallback cb,
+ void *cb_cls);
+
+
+/**
+ * Returns an initial ANASTASIS recovery state.
+ *
+ * @return NULL on failure
+ */
+json_t *
+ANASTASIS_recovery_start (const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+ json_t *initial_state;
+ json_t *temp_country;
+ size_t index;
+ json_t *continents = json_array ();
+ json_t *root;
+
+ if (GNUNET_SYSERR == redux_countries_init ())
+ {
+ GNUNET_break (0);
+ return NULL;
+ }
+ root = json_object_get (redux_countries, "countries");
+
+ json_array_foreach (root, index, temp_country)
+ {
+ size_t inner_index;
+ json_t *inner_continent;
+ json_t *continent = json_object_get (json_array_get (root, index),
+ "continent");
+
+ bool existing = false;
+ json_array_foreach (continents, inner_index, inner_continent)
+ {
+ if (1 == json_equal (continent, inner_continent))
+ {
+ existing = true;
+ break;
+ }
+ }
+ if (! existing)
+ json_array_append_new (continents, continent);
+ }
+
+ initial_state = json_pack ("{s:s, s:o}",
+ "recovery-state", "ReduxInitialRecoveryState",
+ "continents", continents);
+ return initial_state;
+}
+
+
+/**
+ * Operates on a recovery state depending on given #ANASTASIS_RecoveryState
+ * and #ANASTASIS_RecoveryAction. The new #ANASTASIS_RecoveryState is returned
+ * by a callback function.
+ * This function can do network access to talk to anastasis service providers.
+ *
+ * @param state input state
+ * @param action what action to perform
+ * @param arguments data for the @a action
+ * @param cb function to call with the result
+ * @param cb_cls closure for @a cb
+ * @return failure state or new state
+ */
+void
+ANASTASIS_recovery_action (const json_t *state,
+ const char *action,
+ const json_t *arguments,
+ ANASTASIS_ActionCallback cb,
+ void *cb_cls)
+{
+ struct Dispatcher
+ {
+ const char *recovery_state;
+ const char *recovery_action;
+ DispatchHandler fun;
+ } dispatchers[] = {
+ { NULL, NULL, NULL }
+ };
+ const char *s = json_string_value (json_object_get (state,
+ "recovery-state"));
+ if (NULL == s)
+ {
+ GNUNET_break (0);
+ cb (cb_cls,
+ ANASTASIS_EC_INVALID, // FIXME: Define correct error code
+ NULL);
+ }
+ for (unsigned int i = 0; NULL != dispatchers[i].fun; i++)
+ {
+ if ( (0 == strcmp (s, dispatchers[i].recovery_state)) &&
+ (0 == strcmp (action, dispatchers[i].recovery_action)) )
+ {
+ dispatchers[i].fun (state, arguments, cb, cb_cls);
+ return;
+ }
+ }
+ GNUNET_break (0);
+ cb (cb_cls,
+ ANASTASIS_EC_INVALID, // FIXME: Define correct error code
+ NULL);
+}
diff --git a/src/lib/anastasis_api_backup_redux.c
b/src/lib/anastasis_api_redux.c
similarity index 70%
copy from src/lib/anastasis_api_backup_redux.c
copy to src/lib/anastasis_api_redux.c
index 9690ece..3793772 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_redux.c
@@ -14,7 +14,7 @@
Anastasis; see the file COPYING.GPL. If not, see
<http://www.gnu.org/licenses/>
*/
/**
- * @file lib/anastasis_api_backup_redux.c
+ * @file lib/anastasis_api_redux.c
* @brief anastasis reducer api
* @author Christian Grothoff
* @author Dominik Meister
@@ -41,6 +41,11 @@ json_t *redux_id_attr;
*/
json_t *provider_list;
+/**
+ * backup or recovery mode
+ */
+static char *s_mode;
+
/**
* Callback function FIXME: Description.
@@ -63,7 +68,7 @@ typedef void
*
* @return int
*/
-static int
+int
redux_countries_init ()
{
char *dn;
@@ -148,54 +153,6 @@ redux_id_attr_init (const char*country_code)
}
-/**
- * Returns an initial ANASTASIS backup state.
- *
- * @return NULL on failure
- */
-json_t *
-ANASTASIS_backup_start (const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
- json_t *initial_state;
- json_t *temp_country;
- size_t index;
- json_t *continents = json_array ();
- json_t *root;
-
- if (GNUNET_SYSERR == redux_countries_init ())
- {
- GNUNET_break (0);
- return NULL;
- }
- root = json_object_get (redux_countries, "countries");
-
- json_array_foreach (root, index, temp_country)
- {
- size_t inner_index;
- json_t *inner_continent;
- json_t *continent = json_object_get (json_array_get (root, index),
- "continent");
-
- bool existing = false;
- json_array_foreach (continents, inner_index, inner_continent)
- {
- if (1 == json_equal (continent, inner_continent))
- {
- existing = true;
- break;
- }
- }
- if (! existing)
- json_array_append_new (continents, continent);
- }
-
- initial_state = json_pack ("{s:s, s:o}",
- "backup-state", "ReduxInitialBackupState",
- "continents", continents);
- return initial_state;
-}
-
-
static void
select_continent (const json_t *state,
const json_t *arguments,
@@ -242,7 +199,7 @@ select_continent (const json_t *state,
}
json_object_set (new_state,
- "backup-state",
+ s_mode,
json_string ("ReduxContinentSelectedState"));
json_object_set_new (new_state,
@@ -301,7 +258,7 @@ select_country (const json_t *state,
root = json_object_get (redux_id_attr, "required_attributes");
json_object_set (new_state,
- "backup-state",
+ s_mode,
json_string ("ReduxCountrySelectedState"));
json_object_set_new (new_state,
@@ -319,134 +276,6 @@ select_country (const json_t *state,
}
-static void
-enter_user_attributes (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- json_t *attributes = json_object_get (arguments, "identity");
- json_t *root;
- char *dn;
- json_error_t error;
-
- {
- char *path;
-
- path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
- if (NULL == path)
- {
- GNUNET_break (0);
- return GNUNET_SYSERR;
- }
- GNUNET_asprintf (&dn,
- "%s/share/anastasis/provider-list.json",
- path);
- GNUNET_free (path);
- }
- provider_list = json_load_file (dn, JSON_COMPACT, &error);
- if (NULL == provider_list)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to parse `%s': %s at %d:%d (%d)\n",
- dn,
- error.text,
- error.line,
- error.column,
- error.position);
- GNUNET_free (dn);
- return GNUNET_SYSERR;
- }
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == attributes)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
-
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- root = json_object_get (provider_list, "anastasis-provider");
-
- json_object_set (new_state,
- "backup-state",
- json_string ("ReduxUserAttributesAddedState"));
-
- json_object_set_new (new_state,
- "identity_attributes",
- attributes);
-
- json_object_set_new (new_state,
- "provider-list",
- root);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
-static void
-edit_user_attributes (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
- json_t *new_state;
- json_t *attributes = json_object_get (arguments, "identity");
-
- if (NULL == state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
- if (NULL == attributes)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
-
- new_state = json_deep_copy (state);
- if (NULL == new_state)
- {
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
- }
-
- json_object_set_new (new_state,
- "identity_attributes",
- attributes);
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- new_state);
- json_decref (new_state);
-}
-
-
static void
change_country (const json_t *state,
const json_t *arguments,
@@ -489,7 +318,7 @@ change_country (const json_t *state,
json_object_set (new_state,
- "backup-state",
+ s_mode,
json_string ("ReduxCountrySelectedState"));
json_object_set_new (new_state,
@@ -508,37 +337,81 @@ change_country (const json_t *state,
static void
-add_authentication (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
+enter_user_attributes (const json_t *state,
+ const json_t *arguments,
+ ANASTASIS_ActionCallback cb,
+ void *cb_cls)
{
json_t *new_state;
- json_t *methods = json_object_get (arguments, "authentication_methods");
+ json_t *attributes = json_object_get (arguments, "identity");
+ json_t *root;
+ char *dn;
+ json_error_t error;
- new_state = json_deep_copy (state);
- if (NULL == new_state)
+ {
+ char *path;
+
+ path = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
+ if (NULL == path)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ GNUNET_asprintf (&dn,
+ "%s/share/anastasis/provider-list.json",
+ path);
+ GNUNET_free (path);
+ }
+ provider_list = json_load_file (dn, JSON_COMPACT, &error);
+ if (NULL == provider_list)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to parse `%s': %s at %d:%d (%d)\n",
+ dn,
+ error.text,
+ error.line,
+ error.column,
+ error.position);
+ GNUNET_free (dn);
+ return GNUNET_SYSERR;
+ }
+
+ if (NULL == state)
{
GNUNET_break (0);
cb (cb_cls,
ANASTASIS_EC_INVALID, // FIXME: Define correct error code
NULL);
}
- if (NULL == methods)
+ if (NULL == attributes)
+ {
+ GNUNET_break (0);
+ cb (cb_cls,
+ ANASTASIS_EC_INVALID, // FIXME: Define correct error code
+ NULL);
+ }
+
+ new_state = json_deep_copy (state);
+ if (NULL == new_state)
{
GNUNET_break (0);
cb (cb_cls,
ANASTASIS_EC_INVALID, // FIXME: Define correct error code
NULL);
}
+ root = json_object_get (provider_list, "anastasis-provider");
json_object_set (new_state,
- "backup-state",
- json_string ("ReduxAuthenticationAddedState"));
+ s_mode,
+ json_string ("ReduxUserAttributesAddedState"));
json_object_set_new (new_state,
- "authentication_methods",
- methods);
+ "identity_attributes",
+ attributes);
+
+ json_object_set_new (new_state,
+ "provider-list",
+ root);
cb (cb_cls,
ANASTASIS_EC_NONE,
@@ -547,19 +420,11 @@ add_authentication (const json_t *state,
}
-static void
-add_policy (const json_t *state,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
-{
-
-}
-
-
/**
- * Operates on a backup state depending on given #ANASTASIS_BackupState
- * and #ANASTASIS_BackupAction. The new #ANASTASIS_BackupState is returned
+ * Operates on a state depending on given #ANASTASIS_BackupState
+ * or #ANASTASIS_RecoveryState and #ANASTASIS_BackupAction or
+ * #ANASTASIS_RecoveryAction.
+ * The new #ANASTASIS_BackupState or #ANASTASIS_RecoveryState is returned
* by a callback function.
* This function can do network access to talk to anastasis service providers.
*
@@ -571,16 +436,16 @@ add_policy (const json_t *state,
* @return failure state or new state
*/
void
-ANASTASIS_backup_action (const json_t *state,
- const char *action,
- const json_t *arguments,
- ANASTASIS_ActionCallback cb,
- void *cb_cls)
+ANASTASIS_redux_action (const json_t *state,
+ const char *action,
+ const json_t *arguments,
+ ANASTASIS_ActionCallback cb,
+ void *cb_cls)
{
struct Dispatcher
{
- const char *backup_state;
- const char *backup_action;
+ const char *redux_state;
+ const char *redux_action;
DispatchHandler fun;
} dispatchers[] = {
{
@@ -588,6 +453,11 @@ ANASTASIS_backup_action (const json_t *state,
"selection_continent",
&select_continent
},
+ {
+ "ReduxInitialRecoveryState",
+ "selection_continent",
+ &select_continent
+ },
{
"ReduxContinentSelectedState",
"selection_country",
@@ -598,59 +468,48 @@ ANASTASIS_backup_action (const json_t *state,
"entering_user_attributes",
&enter_user_attributes
},
- {
- "ReduxCountrySelectedState",
- "changing_country",
- &change_country
- },
- {
- "ReduxUserAttributesAddedState",
- "adding_authentication",
- &add_authentication
- },
- {
- "ReduxUserAttributesAddedState",
- "editing_user_attributes",
- &edit_user_attributes
- },
{
"ReduxUserAttributesAddedState",
"changing_country",
&change_country
},
- {
- "ReduxAuthenticationAddedState",
- "adding_policy",
- &add_policy
- },
- {
- "ReduxAuthenticationAddedState",
- "editing_user_attributes",
- &edit_user_attributes
- },
{ NULL, NULL, NULL }
};
+ s_mode = "backup-state";
const char *s = json_string_value (json_object_get (state,
"backup-state"));
if (NULL == s)
{
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
+ s = json_string_value (json_object_get (state,
+ "recovery-state"));
+ s_mode = "recovery-state";
+ if (NULL == s)
+ {
+ GNUNET_break (0);
+ cb (cb_cls,
+ ANASTASIS_EC_INVALID, // FIXME: Define correct error code
+ NULL);
+ }
}
for (unsigned int i = 0; NULL != dispatchers[i].fun; i++)
{
- if ( (0 == strcmp (s, dispatchers[i].backup_state)) &&
- (0 == strcmp (action, dispatchers[i].backup_action)) )
+ if ( (0 == strcmp (s, dispatchers[i].redux_state)) &&
+ (0 == strcmp (action, dispatchers[i].redux_action)) )
{
dispatchers[i].fun (state, arguments, cb, cb_cls);
return;
}
}
- GNUNET_break (0);
- cb (cb_cls,
- ANASTASIS_EC_INVALID, // FIXME: Define correct error code
- NULL);
-
+ if (0 == strcmp (s_mode, "backup-state"))
+ ANASTASIS_backup_action (state,
+ action,
+ arguments,
+ cb,
+ NULL);
+ if (0 == strcmp (s_mode, "recovery-state"))
+ ANASTASIS_recovery_action (state,
+ action,
+ arguments,
+ cb,
+ NULL);
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.