summaryrefslogtreecommitdiff
path: root/src/reducer
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-08-19 15:11:17 +0200
committerChristian Grothoff <christian@grothoff.org>2021-08-19 15:11:17 +0200
commit5b3ded24a329d25b77372f17d75ff6b3d68bfa5d (patch)
treef80c75ed651c0180ae4467dd96f51d6610ad80ce /src/reducer
parent677c7e87a5da584e68194c9cca19a91191c3140c (diff)
downloadanastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.tar.gz
anastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.tar.bz2
anastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.zip
document reducer return values for IBAN auth
Diffstat (limited to 'src/reducer')
-rw-r--r--src/reducer/anastasis_api_recovery_redux.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/reducer/anastasis_api_recovery_redux.c b/src/reducer/anastasis_api_recovery_redux.c
index 95632cc..c549d35 100644
--- a/src/reducer/anastasis_api_recovery_redux.c
+++ b/src/reducer/anastasis_api_recovery_redux.c
@@ -708,6 +708,90 @@ answer_feedback_cb (
sctx->state);
sctx_free (sctx);
return;
+
+ case ANASTASIS_CHALLENGE_STATUS_EXTERNAL_INSTRUCTIONS:
+ {
+ json_t *body = NULL;
+ const char *mime;
+
+ mime = csr->details.open_challenge.content_type;
+ if (0 == strcasecmp (mime,
+ "application/json"))
+ {
+ body = json_loadb (csr->details.open_challenge.body,
+ csr->details.open_challenge.body_size,
+ JSON_REJECT_DUPLICATES,
+ NULL);
+ GNUNET_break_op (NULL != body);
+ }
+ if (NULL == body)
+ {
+ json_t *err;
+
+ err = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("state",
+ "server-failure"),
+ GNUNET_JSON_pack_uint64 ("error_code",
+ TALER_EC_GENERIC_INVALID_RESPONSE));
+ GNUNET_assert (0 ==
+ json_object_set_new (feedback,
+ uuid,
+ err));
+ }
+ else
+ {
+ const char *method;
+ json_t *details;
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_string ("method",
+ &method),
+ GNUNET_JSON_spec_json ("details",
+ &details),
+ GNUNET_JSON_spec_end ()
+ };
+ json_t *reply;
+
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (body,
+ spec,
+ NULL, NULL))
+ {
+ json_t *err;
+
+ GNUNET_break_op (0);
+ err = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("state",
+ "server-failure"),
+ GNUNET_JSON_pack_uint64 ("error_code",
+ TALER_EC_GENERIC_REPLY_MALFORMED));
+ GNUNET_assert (0 ==
+ json_object_set_new (feedback,
+ uuid,
+ err));
+ return;
+ }
+
+ reply = GNUNET_JSON_PACK (
+ GNUNET_JSON_pack_string ("state",
+ "external-instructions"),
+ GNUNET_JSON_pack_string ("method",
+ method),
+ GNUNET_JSON_pack_object_incref ("details",
+ details));
+ GNUNET_JSON_parse_free (spec);
+ GNUNET_assert (0 ==
+ json_object_set_new (feedback,
+ uuid,
+ reply));
+ }
+ }
+ set_state (sctx->state,
+ ANASTASIS_RECOVERY_STATE_CHALLENGE_SELECTING);
+ sctx->cb (sctx->cb_cls,
+ TALER_EC_NONE,
+ sctx->state);
+ sctx_free (sctx);
+ return;
}
GNUNET_break (0);
ANASTASIS_redux_fail_ (sctx->cb,