From 2acde5a4e43f6d3e2b2256a98d7fc6a3391ba7f6 Mon Sep 17 00:00:00 2001 From: zmstone Date: Tue, 14 May 2024 10:22:07 +0200 Subject: [PATCH] fix(authn/http): log meaningful error message if http header is missing --- apps/emqx_auth/src/emqx_auth_utils.erl | 6 ++++- .../src/emqx_authn/emqx_authn_chains.erl | 24 ++++++++++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/apps/emqx_auth/src/emqx_auth_utils.erl b/apps/emqx_auth/src/emqx_auth_utils.erl index b0a3d4f42..5056999d3 100644 --- a/apps/emqx_auth/src/emqx_auth_utils.erl +++ b/apps/emqx_auth/src/emqx_auth_utils.erl @@ -301,7 +301,11 @@ serialize_body(<<"application/json">>, BodyTemplate, ClientInfo) -> emqx_utils_json:encode(Body); serialize_body(<<"application/x-www-form-urlencoded">>, BodyTemplate, ClientInfo) -> Body = emqx_auth_utils:render_deep_for_url(BodyTemplate, ClientInfo), - uri_string:compose_query(maps:to_list(Body)). + uri_string:compose_query(maps:to_list(Body)); +serialize_body(undefined, _BodyTemplate, _ClientInfo) -> + throw(missing_content_type_header); +serialize_body(ContentType, _BodyTemplate, _ClientInfo) -> + throw({unknown_content_type_header_value, ContentType}). -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). diff --git a/apps/emqx_auth/src/emqx_authn/emqx_authn_chains.erl b/apps/emqx_auth/src/emqx_authn/emqx_authn_chains.erl index 946ef9ff3..27fc19ca7 100644 --- a/apps/emqx_auth/src/emqx_authn/emqx_authn_chains.erl +++ b/apps/emqx_auth/src/emqx_authn/emqx_authn_chains.erl @@ -678,16 +678,28 @@ do_authenticate( {stop, Result} catch Class:Reason:Stacktrace -> - ?TRACE_AUTHN(warning, "authenticator_error", #{ - exception => Class, - reason => Reason, - stacktrace => Stacktrace, - authenticator => ID - }), + ?TRACE_AUTHN( + warning, + "authenticator_error", + maybe_add_stacktrace( + Class, + #{ + exception => Class, + reason => Reason, + authenticator => ID + }, + Stacktrace + ) + ), emqx_metrics_worker:inc(authn_metrics, MetricsID, nomatch), do_authenticate(ChainName, More, Credential) end. +maybe_add_stacktrace('throw', Data, _Stacktrace) -> + Data; +maybe_add_stacktrace(_, Data, Stacktrace) -> + Data#{stacktrace => Stacktrace}. + authenticate_with_provider(#authenticator{id = ID, provider = Provider, state = State}, Credential) -> AuthnResult = Provider:authenticate(Credential, State), ?TRACE_AUTHN("authenticator_result", #{