[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] branch master updated: finish first pass over backup r
From: |
gnunet |
Subject: |
[taler-anastasis] branch master updated: finish first pass over backup redux logic |
Date: |
Sat, 20 Feb 2021 11:47:09 +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 c05599c finish first pass over backup redux logic
c05599c is described below
commit c05599c10aa2c90c7304be613ac16c017643e126
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Feb 20 11:47:06 2021 +0100
finish first pass over backup redux logic
---
src/reducer/anastasis_api_backup_redux.c | 156 ++++++++++++++++++++++++++-----
1 file changed, 135 insertions(+), 21 deletions(-)
diff --git a/src/reducer/anastasis_api_backup_redux.c
b/src/reducer/anastasis_api_backup_redux.c
index aa8431f..7bc138d 100644
--- a/src/reducer/anastasis_api_backup_redux.c
+++ b/src/reducer/anastasis_api_backup_redux.c
@@ -1386,10 +1386,63 @@ secret_share_result_cb (void *cls,
struct UploadContext *uc = cls;
uc->ss = NULL;
- GNUNET_break (0); // FIXME: not implemented
- uc->cb (uc->cb_cls,
- TALER_EC_INVALID,
- NULL);
+ switch (sr->ss)
+ {
+ case ANASTASIS_SHARE_STATUS_SUCCESS:
+ set_state (uc->state,
+ ANASTASIS_BACKUP_STATE_BACKUP_FINISHED);
+ uc->cb (uc->cb_cls,
+ TALER_EC_NONE,
+ uc->state);
+ break;
+ case ANASTASIS_SHARE_STATUS_PAYMENT_REQUIRED:
+ {
+ json_t *ra;
+
+ set_state (uc->state,
+ ANASTASIS_BACKUP_STATE_POLICIES_PAYING);
+ ra = json_array ();
+ GNUNET_assert (NULL != ra);
+ for (unsigned int i = 0; i<
+ sr->details.payment_required.payment_requests_length; i++)
+ {
+ const struct ANASTASIS_SharePaymentRequest *spr;
+ json_t *pr;
+
+ spr = &sr->details.payment_required.payment_requests[i];
+ pr = json_pack ("{s:s, s:s}",
+ "payto",
+ spr->payment_request_url,
+ "provider",
+ spr->provider_url);
+ GNUNET_assert (0 ==
+ json_array_append_new (ra,
+ pr));
+ }
+ GNUNET_assert (0 ==
+ json_object_set_new (uc->state,
+ "policy_payment_requests",
+ ra));
+ }
+ uc->cb (uc->cb_cls,
+ TALER_EC_NONE,
+ uc->state);
+ break;
+ case ANASTASIS_SHARE_STATUS_PROVIDER_FAILED:
+ // FIXME-#6764: extract more failure data from sr to give back to
application
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ "provider failure");
+ break;
+ default:
+ GNUNET_break (0);
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ "unexpected share result");
+ break;
+ }
upload_cancel_cb (uc);
}
@@ -1405,7 +1458,7 @@ share_secret (struct UploadContext *uc)
json_t *user_id;
size_t core_secret_size;
void *core_secret;
- json_t *policies;
+ json_t *jpolicies;
json_t *payments = NULL;
unsigned int policies_len;
unsigned int pds_len;
@@ -1413,7 +1466,7 @@ share_secret (struct UploadContext *uc)
GNUNET_JSON_spec_json ("identity_attributes",
&user_id),
GNUNET_JSON_spec_json ("policies",
- &policies),
+ &jpolicies),
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_json ("policy_payments",
&payments)),
@@ -1437,8 +1490,8 @@ share_secret (struct UploadContext *uc)
}
if ( (! json_is_object (user_id)) ||
- (! json_is_array (policies)) ||
- (0 == json_array_size (policies)) ||
+ (! json_is_array (jpolicies)) ||
+ (0 == json_array_size (jpolicies)) ||
( (NULL != payments) &&
(! json_is_array (payments)) ) )
{
@@ -1450,7 +1503,7 @@ share_secret (struct UploadContext *uc)
upload_cancel_cb (uc);
return;
}
- policies_len = json_array_size (policies);
+ policies_len = json_array_size (jpolicies);
pds_len = json_array_size (payments);
{
@@ -1458,29 +1511,89 @@ share_secret (struct UploadContext *uc)
const struct ANASTASIS_Policy *policies[policies_len];
struct ANASTASIS_PaymentDetails pds[GNUNET_NZL (pds_len)];
+ /* initialize policies/vpolicies arrays */
for (unsigned int i = 0; i<policies_len; i++)
{
+ json_t *jtruths = json_array_get (jpolicies,
+ i);
unsigned int truths_len;
- json_t *jtruths;
- jtruths = NULL;
- truths_len = 42; // FIXME
- // FIXME: initialize truths/truths_len
+ if ( (! json_is_array (jtruths)) ||
+ (0 == json_array_size (jtruths)) )
+ {
+ GNUNET_break (0);
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ "'methods' must be an array");
+ GNUNET_JSON_parse_free (spec);
+ upload_cancel_cb (uc);
+ return;
+ }
+ truths_len = json_array_size (jtruths);
{
struct ANASTASIS_Policy *p;
- const struct ANASTASIS_Truth *truths[truths_len];
+ struct ANASTASIS_Truth *truths[truths_len];
+ const struct ANASTASIS_Truth *ctruths[truths_len];
for (unsigned int j = 0; j<truths_len; j++)
{
- truths[j] = NULL; // FIXME!
+ json_t *jtruth = json_array_get (jtruths,
+ j);
+
+ truths[j] = ANASTASIS_truth_from_json (jtruth);
+ if (NULL == truths[j])
+ {
+ GNUNET_break (0);
+ for (unsigned int k = 0; k<j; k++)
+ ANASTASIS_truth_free (truths[k]);
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ "'truth' failed to decode");
+ GNUNET_JSON_parse_free (spec);
+ upload_cancel_cb (uc);
+ return;
+ }
+ ctruths[j] = truths[j];
}
- p = ANASTASIS_policy_create (truths,
+ p = ANASTASIS_policy_create (ctruths,
truths_len);
vpolicies[i] = p;
policies[i] = p;
+ for (unsigned int k = 0; k<truths_len; k++)
+ ANASTASIS_truth_free (truths[k]);
+ }
+ }
+
+ /* initialize 'pds' array */
+ for (unsigned int i = 0; i<pds_len; i++)
+ {
+ json_t *pdj = json_array_get (payments,
+ i);
+ struct GNUNET_JSON_Specification ispec[] = {
+ GNUNET_JSON_spec_fixed_auto ("payment_secret",
+ &pds[i]),
+ GNUNET_JSON_spec_end ()
+ };
+
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (pdj,
+ ispec,
+ NULL, NULL))
+ {
+ GNUNET_break (0);
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ NULL);
+ for (unsigned int i = 0; i<policies_len; i++)
+ ANASTASIS_policy_destroy (vpolicies[i]);
+ upload_cancel_cb (uc);
+ GNUNET_JSON_parse_free (spec);
+ return;
}
}
- // FIXME: initialize pds
uc->ss = ANASTASIS_secret_share (ANASTASIS_REDUX_ctx_,
user_id,
@@ -1488,7 +1601,7 @@ share_secret (struct UploadContext *uc)
policies_len,
pds,
pds_len,
- false, /* do not insist on payment */
+ false, /* FIXME-#6759: support forced
payments */
&secret_share_result_cb,
uc,
core_secret,
@@ -1500,9 +1613,10 @@ share_secret (struct UploadContext *uc)
if (NULL == uc->ss)
{
GNUNET_break (0);
- uc->cb (uc->cb_cls,
- TALER_EC_INVALID,
- NULL);
+ ANASTASIS_redux_fail_ (uc->cb,
+ uc->cb_cls,
+ TALER_EC_INVALID,
+ NULL);
upload_cancel_cb (uc);
return;
}
--
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: finish first pass over backup redux logic,
gnunet <=