gnunet-svn
[Top][All Lists]
Advanced

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]