aboutsummaryrefslogtreecommitdiff
path: root/nginx/ngx_http_js_module.c
diff options
context:
space:
mode:
authorDmitry Volyntsev <xeioex@nginx.com>2022-04-28 16:37:14 -0700
committerDmitry Volyntsev <xeioex@nginx.com>2022-04-28 16:37:14 -0700
commit2ce538ea8f637d91f0f8518925995c662a4b50c4 (patch)
tree5b6b678766a297b1b8ef06469aca14c7ef0ed555 /nginx/ngx_http_js_module.c
parenteafe4c7a326b163612f10861392622b5da5b1792 (diff)
downloadnjs-2ce538ea8f637d91f0f8518925995c662a4b50c4.tar.gz
njs-2ce538ea8f637d91f0f8518925995c662a4b50c4.zip
Modules: added additional directives for Fetch API.
The following directives are added: * js_fetch_timeout * js_fetch_verify * js_fetch_buffer_size * js_fetch_max_response_buffer_size This closes #489 issue on Github.
Diffstat (limited to 'nginx/ngx_http_js_module.c')
-rw-r--r--nginx/ngx_http_js_module.c105
1 files changed, 104 insertions, 1 deletions
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c
index 84e5ae8e..1f7d4440 100644
--- a/nginx/ngx_http_js_module.c
+++ b/nginx/ngx_http_js_module.c
@@ -24,10 +24,16 @@ typedef struct {
ngx_str_t header_filter;
ngx_str_t body_filter;
ngx_uint_t buffer_type;
+
+ size_t buffer_size;
+ size_t max_response_body_size;
+ ngx_msec_t timeout;
+
#if (NGX_HTTP_SSL)
ngx_ssl_t *ssl;
ngx_str_t ssl_ciphers;
ngx_uint_t ssl_protocols;
+ ngx_flag_t ssl_verify;
ngx_int_t ssl_verify_depth;
ngx_str_t ssl_trusted_certificate;
#endif
@@ -207,6 +213,11 @@ static ngx_resolver_t *ngx_http_js_resolver(njs_vm_t *vm,
ngx_http_request_t *r);
static ngx_msec_t ngx_http_js_resolver_timeout(njs_vm_t *vm,
ngx_http_request_t *r);
+static ngx_msec_t ngx_http_js_fetch_timeout(njs_vm_t *vm,
+ ngx_http_request_t *r);
+static size_t ngx_http_js_buffer_size(njs_vm_t *vm, ngx_http_request_t *r);
+static size_t ngx_http_js_max_response_buffer_size(njs_vm_t *vm,
+ ngx_http_request_t *r);
static void ngx_http_js_handle_vm_event(ngx_http_request_t *r,
njs_vm_event_t vm_event, njs_value_t *args, njs_uint_t nargs);
static void ngx_http_js_handle_event(ngx_http_request_t *r,
@@ -231,6 +242,7 @@ static char *ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent,
static char * ngx_http_js_set_ssl(ngx_conf_t *cf, ngx_http_js_loc_conf_t *jlcf);
#endif
static ngx_ssl_t *ngx_http_js_ssl(njs_vm_t *vm, ngx_http_request_t *r);
+static ngx_flag_t ngx_http_js_ssl_verify(njs_vm_t *vm, ngx_http_request_t *r);
#if (NGX_HTTP_SSL)
@@ -295,6 +307,27 @@ static ngx_command_t ngx_http_js_commands[] = {
0,
NULL },
+ { ngx_string("js_fetch_buffer_size"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_size_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_js_loc_conf_t, buffer_size),
+ NULL },
+
+ { ngx_string("js_fetch_max_response_buffer_size"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_size_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_js_loc_conf_t, max_response_body_size),
+ NULL },
+
+ { ngx_string("js_fetch_timeout"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_js_loc_conf_t, timeout),
+ NULL },
+
#if (NGX_HTTP_SSL)
{ ngx_string("js_fetch_ciphers"),
@@ -311,6 +344,13 @@ static ngx_command_t ngx_http_js_commands[] = {
offsetof(ngx_http_js_loc_conf_t, ssl_protocols),
&ngx_http_js_ssl_protocols },
+ { ngx_string("js_fetch_verify"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_js_loc_conf_t, ssl_verify),
+ NULL },
+
{ ngx_string("js_fetch_verify_depth"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_conf_set_num_slot,
@@ -716,11 +756,15 @@ static uintptr_t ngx_http_js_uptr[] = {
(uintptr_t) ngx_http_js_resolver_timeout,
(uintptr_t) ngx_http_js_handle_event,
(uintptr_t) ngx_http_js_ssl,
+ (uintptr_t) ngx_http_js_ssl_verify,
+ (uintptr_t) ngx_http_js_fetch_timeout,
+ (uintptr_t) ngx_http_js_buffer_size,
+ (uintptr_t) ngx_http_js_max_response_buffer_size,
};
static njs_vm_meta_t ngx_http_js_metas = {
- .size = 6,
+ .size = njs_nitems(ngx_http_js_uptr),
.values = ngx_http_js_uptr
};
@@ -3420,6 +3464,39 @@ ngx_http_js_resolver_timeout(njs_vm_t *vm, ngx_http_request_t *r)
}
+static ngx_msec_t
+ngx_http_js_fetch_timeout(njs_vm_t *vm, ngx_http_request_t *r)
+{
+ ngx_http_js_loc_conf_t *jlcf;
+
+ jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
+
+ return jlcf->timeout;
+}
+
+
+static size_t
+ngx_http_js_buffer_size(njs_vm_t *vm, ngx_http_request_t *r)
+{
+ ngx_http_js_loc_conf_t *jlcf;
+
+ jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
+
+ return jlcf->buffer_size;
+}
+
+
+static size_t
+ngx_http_js_max_response_buffer_size(njs_vm_t *vm, ngx_http_request_t *r)
+{
+ ngx_http_js_loc_conf_t *jlcf;
+
+ jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
+
+ return jlcf->max_response_body_size;
+}
+
+
static void
ngx_http_js_handle_vm_event(ngx_http_request_t *r, njs_vm_event_t vm_event,
njs_value_t *args, njs_uint_t nargs)
@@ -3952,7 +4029,12 @@ ngx_http_js_create_loc_conf(ngx_conf_t *cf)
* conf->ssl_trusted_certificate = { 0, NULL };
*/
+ conf->buffer_size = NGX_CONF_UNSET_SIZE;
+ conf->max_response_body_size = NGX_CONF_UNSET_SIZE;
+ conf->timeout = NGX_CONF_UNSET_MSEC;
+
#if (NGX_HTTP_SSL)
+ conf->ssl_verify = NGX_CONF_UNSET;
conf->ssl_verify_depth = NGX_CONF_UNSET;
#endif
@@ -3972,6 +4054,11 @@ ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_uint_value(conf->buffer_type, prev->buffer_type,
NGX_JS_STRING);
+ ngx_conf_merge_msec_value(conf->timeout, prev->timeout, 60000);
+ ngx_conf_merge_size_value(conf->buffer_size, prev->buffer_size, 16384);
+ ngx_conf_merge_size_value(conf->max_response_body_size,
+ prev->max_response_body_size, 1048576);
+
#if (NGX_HTTP_SSL)
ngx_conf_merge_str_value(conf->ssl_ciphers, prev->ssl_ciphers, "DEFAULT");
@@ -3979,6 +4066,7 @@ ngx_http_js_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
(NGX_CONF_BITMASK_SET|NGX_SSL_TLSv1
|NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2));
+ ngx_conf_merge_value(conf->ssl_verify, prev->ssl_verify, 1);
ngx_conf_merge_value(conf->ssl_verify_depth, prev->ssl_verify_depth, 100);
ngx_conf_merge_str_value(conf->ssl_trusted_certificate,
@@ -4050,3 +4138,18 @@ ngx_http_js_ssl(njs_vm_t *vm, ngx_http_request_t *r)
return NULL;
#endif
}
+
+
+static ngx_flag_t
+ngx_http_js_ssl_verify(njs_vm_t *vm, ngx_http_request_t *r)
+{
+#if (NGX_HTTP_SSL)
+ ngx_http_js_loc_conf_t *jlcf;
+
+ jlcf = ngx_http_get_module_loc_conf(r, ngx_http_js_module);
+
+ return jlcf->ssl_verify;
+#else
+ return 0;
+#endif
+}