respond with CORS headers for OPTIONS pre-flight request
This commit is contained in:
parent
19d9369ff6
commit
3b13aaf844
@ -420,11 +420,20 @@ handle_mhd_request (void *cls,
|
|||||||
for (unsigned int i = 0; NULL != handlers[i].url; i++)
|
for (unsigned int i = 0; NULL != handlers[i].url; i++)
|
||||||
{
|
{
|
||||||
rh = &handlers[i];
|
rh = &handlers[i];
|
||||||
if ( (0 == strcmp (url,
|
if (0 != strcmp (url, rh->url))
|
||||||
rh->url)) &&
|
continue;
|
||||||
( (NULL == rh->method) ||
|
|
||||||
|
/* The URL is a match! What we now do depends on the method. */
|
||||||
|
|
||||||
|
if (0 == strcmp (method, MHD_HTTP_METHOD_OPTIONS))
|
||||||
|
{
|
||||||
|
GNUNET_async_scope_restore (&old_scope);
|
||||||
|
return TALER_MHD_reply_cors_preflight (connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (NULL == rh->method) ||
|
||||||
(0 == strcmp (method,
|
(0 == strcmp (method,
|
||||||
rh->method)) ) )
|
rh->method)) )
|
||||||
{
|
{
|
||||||
/* FIXME: consider caching 'rh' in '**connection_cls' to
|
/* FIXME: consider caching 'rh' in '**connection_cls' to
|
||||||
avoid repeated lookup! */
|
avoid repeated lookup! */
|
||||||
|
@ -441,4 +441,14 @@ TALER_MHD_reply_legal (struct MHD_Connection *conn,
|
|||||||
struct TALER_MHD_Legal *legal);
|
struct TALER_MHD_Legal *legal);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send back a "204 No Content" response with headers
|
||||||
|
* for the CORS pre-flight request.
|
||||||
|
*
|
||||||
|
* @param connection the MHD connection
|
||||||
|
* @return MHD result code
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
TALER_MHD_reply_cors_preflight (struct MHD_Connection *connection);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -267,6 +267,29 @@ TALER_MHD_reply_json (struct MHD_Connection *connection,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send back a "204 No Content" response with headers
|
||||||
|
* for the CORS pre-flight request.
|
||||||
|
*
|
||||||
|
* @param connection the MHD connection
|
||||||
|
* @return MHD result code
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
TALER_MHD_reply_cors_preflight (struct MHD_Connection *connection)
|
||||||
|
{
|
||||||
|
struct MHD_Response *resp;
|
||||||
|
|
||||||
|
GNUNET_assert (NULL != (resp = MHD_create_response_from_buffer (0, NULL,
|
||||||
|
MHD_RESPMEM_PERSISTENT)));
|
||||||
|
/* This adds the Access-Control-Allow-Origin header.
|
||||||
|
* All endpoints of the exchange allow CORS. */
|
||||||
|
TALER_MHD_add_global_headers (resp);
|
||||||
|
GNUNET_assert (MHD_YES == MHD_queue_response (connection, MHD_HTTP_NO_CONTENT,
|
||||||
|
resp));
|
||||||
|
return MHD_YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to call to handle the request by building a JSON
|
* Function to call to handle the request by building a JSON
|
||||||
* reply from a format string and varargs.
|
* reply from a format string and varargs.
|
||||||
|
Loading…
Reference in New Issue
Block a user