diff options
| author | Christian Grothoff <christian@grothoff.org> | 2020-05-01 19:41:14 +0200 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2020-07-05 16:34:59 +0200 | 
| commit | c31048b05020420d1bb3a5cdf1c054648f11c214 (patch) | |
| tree | 64fb35898b66a799e25d498eacd2ef64d763e948 | |
| parent | dd23ca4113e743b5e6d3f87b894bb493ed696fc0 (diff) | |
implement #6181
| -rw-r--r-- | src/exchange/taler-exchange-httpd.c | 51 | ||||
| -rw-r--r-- | src/testing/test_exchange_api_twisted.c | 4 | 
2 files changed, 48 insertions, 7 deletions
| diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index a8e29d30..00932c0f 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -421,6 +421,45 @@ proceed_with_handler (const struct TEH_RequestHandler *rh,  /** + * Handle a "/seed" request. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param args array of additional options (must be empty for this function) + * @return MHD result code + */ +static MHD_RESULT +handler_seed (const struct TEH_RequestHandler *rh, +              struct MHD_Connection *connection, +              const char *const args[]) +{ +#define SEED_SIZE 32 +  char *body; +  MHD_RESULT ret; +  struct MHD_Response *resp; + +  (void) rh; +  body = malloc (SEED_SIZE); /* must use malloc(), because MHD will use free() */ +  if (NULL == body) +    return MHD_NO; +  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE, +                              body, +                              SEED_SIZE); +  resp = MHD_create_response_from_buffer (SEED_SIZE, +                                          body, +                                          MHD_RESPMEM_MUST_FREE); +  TALER_MHD_add_global_headers (resp); +  ret = MHD_queue_response (connection, +                            MHD_HTTP_OK, +                            resp); +  GNUNET_break (MHD_YES == ret); +  MHD_destroy_response (resp); +  return ret; +#undef SEED_SIZE +} + + +/**   * Handle incoming HTTP request.   *   * @param cls closure for MHD daemon (unused) @@ -472,6 +511,11 @@ handle_mhd_request (void *cls,        .method = MHD_HTTP_METHOD_GET,        .handler.get = &TEH_handler_agpl_redirect      }, +    { +      .url = "seed", +      .method = MHD_HTTP_METHOD_GET, +      .handler.get = &handler_seed +    },      /* Terms of service */      {        .url = "terms", @@ -654,9 +698,10 @@ handle_mhd_request (void *cls,      {        struct TEH_RequestHandler *rh = &handlers[i]; -      if (0 != strncmp (tok, -                        rh->url, -                        tok_size)) +      if ( (0 != strncmp (tok, +                          rh->url, +                          tok_size)) || +           (tok_size != strlen (rh->url) ) )          continue;        found = GNUNET_YES;        /* The URL is a match!  What we now do depends on the method. */ diff --git a/src/testing/test_exchange_api_twisted.c b/src/testing/test_exchange_api_twisted.c index 05337219..c99c7410 100644 --- a/src/testing/test_exchange_api_twisted.c +++ b/src/testing/test_exchange_api_twisted.c @@ -205,10 +205,6 @@ run (void *cls,                                MHD_HTTP_PRECONDITION_FAILED,                                "EUR:50",                                "deposit-refund-1"), -    TALER_TESTING_cmd_refund ("refund-fee-too-low", -                              MHD_HTTP_BAD_REQUEST, -                              "EUR:5", -                              "deposit-refund-1"),      TALER_TESTING_cmd_end ()    }; | 
