Skip to content

Commit 8dc6821

Browse files
committed
nginx: add nginx_oauth2_check_requirements
see OpenIDC/ngx_oauth2_module#7; thanks @smanolache and @pladen Signed-off-by: Hans Zandbelt <[email protected]>
1 parent c2a7db2 commit 8dc6821

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

include/oauth2/nginx.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,7 @@ ngx_int_t oauth2_nginx_set_target_variables(ngx_module_t module,
179179
oauth2_nginx_request_context_t *ctx,
180180
json_t *json_token);
181181
char *nginx_oauth2_set_require(ngx_conf_t *cf, ngx_array_t **requirements);
182+
ngx_int_t nginx_oauth2_check_requirements(oauth2_nginx_request_context_t *ctx,
183+
ngx_array_t *requirements);
182184

183185
#endif /* _OAUTH2_NGINX_H_ */

src/server/nginx.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,3 +608,46 @@ char *nginx_oauth2_set_require(ngx_conf_t *cf, ngx_array_t **requirements)
608608

609609
return NGX_CONF_OK;
610610
}
611+
612+
static ngx_int_t
613+
nginx_oauth2_check_requirement(oauth2_nginx_request_context_t *ctx,
614+
ngx_http_complex_value_t *cv)
615+
{
616+
ngx_str_t v;
617+
ngx_int_t rc = ngx_http_complex_value(ctx->r, cv, &v);
618+
if (rc != NGX_OK) {
619+
ngx_log_error(NGX_LOG_ERR, ctx->r->connection->log, 0,
620+
"error %d evaluating expression %*.s", rc,
621+
(int)cv->value.len, cv->value.data);
622+
return NGX_ERROR;
623+
}
624+
625+
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, ctx->r->connection->log, 0,
626+
"nginx_oauth2_check_requirement: expression \"%*.s\" "
627+
"evaluated to: %s",
628+
(int)cv->value.len, cv->value.data,
629+
(1 == v.len && '1' == *v.data)
630+
? "NGX_OK"
631+
: "NGX_HTTP_UNAUTHORIZED");
632+
633+
return 1 == v.len && '1' == *v.data ? NGX_OK : NGX_HTTP_UNAUTHORIZED;
634+
}
635+
ngx_int_t nginx_oauth2_check_requirements(oauth2_nginx_request_context_t *ctx,
636+
ngx_array_t *requirements)
637+
{
638+
int rc = NGX_OK;
639+
ngx_uint_t i = 0;
640+
641+
if (requirements == NULL)
642+
return NGX_OK;
643+
644+
for (i = 0; i < requirements->nelts; ++i) {
645+
ngx_http_complex_value_t *cv =
646+
(ngx_http_complex_value_t *)requirements->elts + i;
647+
rc = nginx_oauth2_check_requirement(ctx, cv);
648+
if (rc != NGX_OK)
649+
break;
650+
}
651+
652+
return rc;
653+
}

test/server_stubs.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,4 +263,11 @@ ngx_int_t ngx_http_compile_complex_value(ngx_http_compile_complex_value_t *ccv)
263263
return 0;
264264
}
265265

266+
ngx_int_t ngx_http_complex_value(ngx_http_request_t *r,
267+
ngx_http_complex_value_t *val,
268+
ngx_str_t *value)
269+
{
270+
return 0;
271+
}
272+
266273
#endif

0 commit comments

Comments
 (0)