diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-08-19 15:11:17 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-08-19 15:11:17 +0200 |
commit | 5b3ded24a329d25b77372f17d75ff6b3d68bfa5d (patch) | |
tree | f80c75ed651c0180ae4467dd96f51d6610ad80ce /src/reducer/anastasis_api_recovery_redux.c | |
parent | 677c7e87a5da584e68194c9cca19a91191c3140c (diff) | |
download | anastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.tar.gz anastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.tar.bz2 anastasis-5b3ded24a329d25b77372f17d75ff6b3d68bfa5d.zip |
document reducer return values for IBAN auth
Diffstat (limited to 'src/reducer/anastasis_api_recovery_redux.c')
-rw-r--r-- | src/reducer/anastasis_api_recovery_redux.c | 84 |
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, |