aboutsummaryrefslogtreecommitdiff
path: root/src/restclient/anastasis_api_keyshare_lookup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/restclient/anastasis_api_keyshare_lookup.c')
-rw-r--r--src/restclient/anastasis_api_keyshare_lookup.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/src/restclient/anastasis_api_keyshare_lookup.c b/src/restclient/anastasis_api_keyshare_lookup.c
index 6df00dd..bb463b6 100644
--- a/src/restclient/anastasis_api_keyshare_lookup.c
+++ b/src/restclient/anastasis_api_keyshare_lookup.c
@@ -150,16 +150,30 @@ handle_keyshare_lookup_finished (void *cls,
150 { 150 {
151 GNUNET_break_op (0); 151 GNUNET_break_op (0);
152 kdd.status = ANASTASIS_KSD_SERVER_ERROR; 152 kdd.status = ANASTASIS_KSD_SERVER_ERROR;
153 kdd.details.server_failure.http_status = MHD_HTTP_ACCEPTED;
154 kdd.details.server_failure.ec = TALER_EC_GENERIC_INVALID_RESPONSE;
153 break; 155 break;
154 } 156 }
155 /* Success, call callback with all details! */ 157 /* Success, call callback with all details! */
156 memcpy (&kdd.details.eks, 158 memcpy (&kdd.details.eks,
157 data, 159 data,
158 data_size); 160 data_size);
159 kslo->cb (kslo->cb_cls, 161 break;
160 &kdd); 162 case MHD_HTTP_ACCEPTED:
161 ANASTASIS_keyshare_lookup_cancel (kslo); 163 kdd.details.external_challenge = json_loadb (data,
162 return; 164 data_size,
165 JSON_REJECT_DUPLICATES,
166 NULL);
167 if (NULL == kdd.details.external_challenge)
168 {
169 GNUNET_break_op (0);
170 kdd.status = ANASTASIS_KSD_SERVER_ERROR;
171 kdd.details.server_failure.http_status = MHD_HTTP_ACCEPTED;
172 kdd.details.server_failure.ec = TALER_EC_GENERIC_INVALID_RESPONSE;
173 break;
174 }
175 kdd.status = ANASTASIS_KSD_EXTERNAL_CHALLENGE_INSTRUCTIONS;
176 break;
163 case MHD_HTTP_BAD_REQUEST: 177 case MHD_HTTP_BAD_REQUEST:
164 /* This should never happen, either us or the anastasis server is buggy 178 /* This should never happen, either us or the anastasis server is buggy
165 (or API version conflict); just pass JSON reply to the application */ 179 (or API version conflict); just pass JSON reply to the application */
@@ -206,24 +220,16 @@ handle_keyshare_lookup_finished (void *cls,
206 /* Nothing really to verify, authentication required/failed */ 220 /* Nothing really to verify, authentication required/failed */
207 kdd.status = ANASTASIS_KSD_REDIRECT_FOR_AUTHENTICATION; 221 kdd.status = ANASTASIS_KSD_REDIRECT_FOR_AUTHENTICATION;
208 kdd.details.redirect_url = kslo->location; 222 kdd.details.redirect_url = kslo->location;
209 kslo->cb (kslo->cb_cls, 223 break;
210 &kdd);
211 ANASTASIS_keyshare_lookup_cancel (kslo);
212 return;
213 case MHD_HTTP_ALREADY_REPORTED: 224 case MHD_HTTP_ALREADY_REPORTED:
214 case MHD_HTTP_FORBIDDEN: 225 case MHD_HTTP_FORBIDDEN:
215 /* Nothing really to verify, authentication required/failed */ 226 /* Nothing really to verify, authentication required/failed */
216 { 227 kdd.status = ANASTASIS_KSD_INVALID_ANSWER;
217 kdd.status = ANASTASIS_KSD_INVALID_ANSWER; 228 kdd.details.open_challenge.body = data;
218 kdd.details.open_challenge.body = data; 229 kdd.details.open_challenge.body_size = data_size;
219 kdd.details.open_challenge.body_size = data_size; 230 kdd.details.open_challenge.content_type = kslo->content_type;
220 kdd.details.open_challenge.content_type = kslo->content_type; 231 kdd.details.open_challenge.http_status = response_code;
221 kdd.details.open_challenge.http_status = response_code; 232 break;
222 kslo->cb (kslo->cb_cls,
223 &kdd);
224 }
225 ANASTASIS_keyshare_lookup_cancel (kslo);
226 return;
227 case MHD_HTTP_NOT_FOUND: 233 case MHD_HTTP_NOT_FOUND:
228 /* Nothing really to verify */ 234 /* Nothing really to verify */
229 kdd.status = ANASTASIS_KSD_TRUTH_UNKNOWN; 235 kdd.status = ANASTASIS_KSD_TRUTH_UNKNOWN;