diff options
Diffstat (limited to 'src/restclient/anastasis_api_keyshare_lookup.c')
-rw-r--r-- | src/restclient/anastasis_api_keyshare_lookup.c | 44 |
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; |