[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 01/03: worked on truth upload
From: |
gnunet |
Subject: |
[taler-anastasis] 01/03: worked on truth upload |
Date: |
Tue, 24 Nov 2020 11:19:00 +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 4b38cd2993b627762b1218b66ed502d5fee948ae
Author: Dennis Neufeld <dennis.neufeld@students.bfh.ch>
AuthorDate: Mon Nov 23 20:22:40 2020 +0100
worked on truth upload
---
src/cli/Makefile.am | 3 +-
src/cli/test_anastasis_reducer_enter_secret.sh | 64 +++++++++
src/lib/Makefile.am | 4 +-
src/lib/anastasis_api_backup_redux.c | 186 ++++++++++++++++---------
4 files changed, 193 insertions(+), 64 deletions(-)
diff --git a/src/cli/Makefile.am b/src/cli/Makefile.am
index fa3f1e2..f9525e2 100644
--- a/src/cli/Makefile.am
+++ b/src/cli/Makefile.am
@@ -16,7 +16,8 @@ check_SCRIPTS = \
test_anastasis_reducer_enter_user_attributes.sh \
test_anastasis_reducer_add_authentication.sh \
test_anastasis_reducer_done_authentication.sh \
- test_anastasis_reducer_done_policy_review.sh
+ test_anastasis_reducer_done_policy_review.sh \
+ test_anastasis_reducer_enter_secret.sh
AM_TESTS_ENVIRONMENT=export
ANASTASIS_PREFIX=$${ANASTASIS_PREFIX:-@libdir@};export
PATH=$${ANASTASIS_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset
XDG_CONFIG_HOME;
diff --git a/src/cli/test_anastasis_reducer_enter_secret.sh
b/src/cli/test_anastasis_reducer_enter_secret.sh
new file mode 100755
index 0000000..5165b31
--- /dev/null
+++ b/src/cli/test_anastasis_reducer_enter_secret.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+set -eu
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+ echo $1
+ exit 77
+}
+
+# Exit, with error message (hard failure)
+function exit_fail() {
+ echo $1
+ exit 1
+}
+
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ for n in `jobs -p`
+ do
+ kill $n 2> /dev/null || true
+ done
+ rm -f $SFILE
+ wait
+}
+
+# Install cleanup handler (except for kill -9)
+SFILE=test_reducer_stateSESTATE
+TFILE=`mktemp test_reducer_stateXXXXXX`
+
+trap cleanup EXIT
+
+# Check we can actually run
+echo -n "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo " FOUND"
+
+echo " "
+echo "Beginning with actual reducer test"
+
+# Test enter secret in a backup state
+echo " "
+echo "Test enter secret in a backup state"
+./anastasis-reducer -a \
+ '{"secret": "veryhardtoguesssecret",
+ "type": "password"}' \
+ enter_secret $SFILE $TFILE
+
+wait
+
+STATE=`jq -r -e .backup_state < $TFILE`
+if test "$STATE" != "BACKUP_FINISHED"
+then
+ exit_fail "Expected new state to be BACKUP_FINISHED, got $STATE"
+fi
+
+ARRAY_LENGTH=`jq -r -e '.truth_uploads | length' < $TFILE`
+if test $ARRAY_LENGTH -lt 3
+then
+ exit_fail "Expected truth_uploads array length to be >= 3, got
$ARRAY_LENGTH"
+fi
+
+exit 0
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 0756609..15f448e 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -108,13 +108,15 @@ libanastasisredux_la_SOURCES = \
anastasis_api_recovery_redux.c \
anastasis_api_backup_redux.c
libanastasisredux_la_LIBADD = \
+ $(top_builddir)/src/lib/libanastasisrest.la \
+ $(top_builddir)/src/lib/libanastasis.la \
+ $(top_builddir)/src/util/libanastasisutil.la \
-lgnunetjson \
-lgnunetcurl \
-lgnunetutil \
-ltalermhd \
-ltalerutil \
-ltalerjson \
- -lanastasisrest \
-ljansson \
$(XLIB)
diff --git a/src/lib/anastasis_api_backup_redux.c
b/src/lib/anastasis_api_backup_redux.c
index ad9022c..37e0dae 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_backup_redux.c
@@ -115,17 +115,38 @@ struct TruthUploadState
struct ANASTASIS_TruthUpload *tuo;
/**
- * closure for the payment callback
+ * Closure for the payment callback.
*/
void *tpc_cls;
/**
- * Truth object
+ * Truth object.
*/
struct ANASTASIS_Truth *truth;
+
+ /**
+ * Truth index.
+ */
+ unsigned int index;
+
+ /**
+ * Redux json state.
+ */
+ json_t *state;
};
+/**
+ * Array of truth upload states.
+ */
+static struct TruthUploadState *tus_arr;
+
+/**
+ * The length of the #tus_arr array.
+ */
+static unsigned int tus_arr_length;
+
+
/**
* Callback function FIXME: Description.
*
@@ -1043,6 +1064,15 @@ truth_upload_cb (void *cls,
GNUNET_break (0);
return;
}
+ json_t *truth_upload = json_array_get (
+ json_object_get (tus->state,
+ "truth_uploads"),
+ tus->index);
+ GNUNET_assert (NULL != truth_upload);
+ GNUNET_assert (0 ==
+ json_object_set (truth_upload,
+ "status",
+ json_integer ((json_int_t) 204)));
tus->truth = t;
}
@@ -1061,6 +1091,23 @@ truth_payment_cb (void *cls,
{
struct TruthUploadState *tus = cls;
tus->tuo = NULL;
+
+ if (! ec)
+ {
+ json_t *truth_upload = json_array_get (
+ json_object_get (tus->state,
+ "truth_uploads"),
+ tus->index);
+ GNUNET_assert (NULL != truth_upload);
+ GNUNET_assert (0 ==
+ json_object_set (truth_upload,
+ "status",
+ json_integer ((json_int_t) 402)));
+ GNUNET_assert (0 ==
+ json_object_set (truth_upload,
+ "pay_url",
+ json_string (taler_pay_url)));
+ }
// FIXME: Payment handling
return;
}
@@ -1116,66 +1163,81 @@ enter_secret (json_t *state,
GNUNET_assert (0 ==
json_object_set (state,
"core_secret",
- arguments));
- // {
- // // upload truths
- // size_t truth_index;
- // json_t *truth;
- // json_t *truths = initialize_truths (state);
-
- // GNUNET_assert (json_is_array (truths));
- // json_array_foreach (truths, truth_index, truth)
- // {
- // struct TruthUploadState *tus = GNUNET_new (struct TruthUploadState);
- // struct ANASTASIS_CRYPTO_PowSalt backend_salt;
- // struct ANASTASIS_CRYPTO_UserIdentifierP user_id;
- // const char *backend_url = json_string_value (json_object_get (truth,
- //
"backend_url"));
-
- // tus->method = json_string_value (json_object_get (truth,
- // "method"));
- // tus->instructions = json_string_value (json_object_get (truth,
- //
"instructions"));
- // tus->mime_type = json_string_value (json_object_get (truth,
- // "mime_type"));
- // const char *salt_str = json_string_value (json_object_get (truth,
- //
"backen_salt"));
- // GNUNET_STRINGS_string_to_data (salt_str,
- // strlen (salt_str),
- // &backend_salt,
- // sizeof (struct
ANASTASIS_CRYPTO_PowSalt));
-
- // tus->id_data = json_object_get (state,
- // "identity_attributes");
-
- // if (0 == strcmp ("question", tus->method))
- // {
- // json_t *truth_data = json_object_get (truth,
- // "truth_data");
- // // FIXME: hash secure question or salt into truth_data?
- // tus->truth_data = json_string_value (json_object_get (truth_data,
- // "answer"));
- // tus->truth_data_size = strlen (tus->truth_data);
- // }
- // // FIXME: other method types
-
- // ANASTASIS_CRYPTO_user_identifier_derive (tus->id_data,
- // &backend_salt,
- // &user_id);
- // tus->tuo = ANASTASIS_truth_upload (ctx,
- // &user_id,
- // backend_url,
- // tus->method,
- // tus->mime_type,
- // &backend_salt,
- // tus->truth_data,
- // tus->truth_data_size,
- // &truth_payment_cb,
- // tus->tpc_cls,
- // &truth_upload_cb,
- // tus);
- // }
- // }
+ json_deep_copy (arguments)));
+ {
+ // upload truths
+ size_t truth_index;
+ json_t *truth;
+ json_t *truths = json_object_get (state,
+ "truths");
+
+ GNUNET_assert (json_is_array (truths));
+ GNUNET_assert (0 ==
+ json_object_set_new (state,
+ "truth_uploads",
+ json_array ()));
+ json_array_foreach (truths, truth_index, truth)
+ {
+ struct TruthUploadState *tus = GNUNET_new (struct TruthUploadState);
+ struct ANASTASIS_CRYPTO_PowSalt backend_salt;
+ struct ANASTASIS_CRYPTO_UserIdentifierP user_id;
+ const char *backend_url = json_string_value (json_object_get (truth,
+
"backend_url"));
+ tus->state = json_incref (state);
+ tus->method = json_string_value (json_object_get (truth,
+ "method"));
+ tus->instructions = json_string_value (json_object_get (truth,
+ "instructions"));
+ tus->mime_type = json_string_value (json_object_get (truth,
+ "mime_type"));
+ const char *salt_str = json_string_value (json_object_get (truth,
+
"backend_salt"));
+ GNUNET_STRINGS_string_to_data (salt_str,
+ strlen (salt_str),
+ &backend_salt,
+ sizeof (struct ANASTASIS_CRYPTO_PowSalt));
+ tus->id_data = json_object_get (state,
+ "identity_attributes");
+ tus->index = truth_index;
+
+ if (0 == strcmp ("question", tus->method))
+ {
+ json_t *truth_data = json_object_get (truth,
+ "truth_data");
+ // FIXME: hash secure question or salt into truth_data?
+ tus->truth_data = json_string_value (json_object_get (truth_data,
+ "answer"));
+ tus->truth_data_size = strlen (tus->truth_data);
+ }
+ // FIXME: other method types
+
+ json_t *truth_upload = json_pack ("{s:I}",
+ "status", 0);
+ GNUNET_assert (0 ==
+ json_array_append_new (json_object_get (state,
+ "truth_uploads"),
+ truth_upload));
+ ANASTASIS_CRYPTO_user_identifier_derive (tus->id_data,
+ &backend_salt,
+ &user_id);
+ GNUNET_array_append (tus_arr,
+ tus_arr_length,
+ *tus);
+ tus->tuo = ANASTASIS_truth_upload (ctx,
+ &user_id,
+ backend_url,
+ tus->method,
+ tus->instructions,
+ tus->mime_type,
+ &backend_salt,
+ tus->truth_data,
+ tus->truth_data_size,
+ &truth_payment_cb,
+ tus->tpc_cls,
+ &truth_upload_cb,
+ tus);
+ }
+ }
// try uploading recovery document
set_state (state,
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.