summaryrefslogtreecommitdiff
path: root/src/exchange
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-05-01 19:41:14 +0200
committerChristian Grothoff <christian@grothoff.org>2020-07-05 16:34:59 +0200
commitc31048b05020420d1bb3a5cdf1c054648f11c214 (patch)
tree64fb35898b66a799e25d498eacd2ef64d763e948 /src/exchange
parentdd23ca4113e743b5e6d3f87b894bb493ed696fc0 (diff)
downloadexchange-c31048b05020420d1bb3a5cdf1c054648f11c214.tar.gz
exchange-c31048b05020420d1bb3a5cdf1c054648f11c214.tar.bz2
exchange-c31048b05020420d1bb3a5cdf1c054648f11c214.zip
implement #6181
Diffstat (limited to 'src/exchange')
-rw-r--r--src/exchange/taler-exchange-httpd.c51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c
index a8e29d300..00932c0f0 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. */