From 12a4e487277357411e37884c81546f164bff153a Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 18:53:09 +0200 Subject: [PATCH 1/8] fix: add definition for bearerAuth --- apps/emqx_dashboard/src/emqx_dashboard.erl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/emqx_dashboard/src/emqx_dashboard.erl b/apps/emqx_dashboard/src/emqx_dashboard.erl index 53e8c1f76..ca995990d 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard.erl @@ -59,6 +59,11 @@ start_listeners(Listeners) -> scheme => basic, description => <<"Authorize with [API Keys](https://www.emqx.io/docs/en/v5.0/admin/api.html#api-keys)">> + }, + 'bearerAuth' => #{ + type => http, + scheme => bearer, + description => <<"Authorize with Bearer Token">> } } } From ef2581d13b34c1aff91f3524c20bf9da5369ce88 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 18:53:29 +0200 Subject: [PATCH 2/8] fix: remove unsupported schema properties --- apps/emqx_management/src/emqx_mgmt_api_trace.erl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt_api_trace.erl b/apps/emqx_management/src/emqx_mgmt_api_trace.erl index 331c62681..579f977d8 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_trace.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_trace.erl @@ -344,9 +344,7 @@ fields(bytes) -> description => ?DESC(max_response_bytes), in => query, required => false, - default => 1000, - minimum => 0, - maximum => ?MAX_SINT32 + default => 1000 } )} ]; From e62bd631999f135ae4c57c1f438971ba0aeed7af Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 18:54:54 +0200 Subject: [PATCH 3/8] fix: don't add summary, remove it instead --- .../src/emqx_dashboard_swagger.erl | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index 4dda377cf..9f049e93f 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -567,18 +567,7 @@ trans_description(Spec, Hocon, Options) -> Spec; Desc -> Desc1 = binary:replace(Desc, [<<"\n">>], <<"
">>, [global]), - maybe_add_summary_from_label(Spec#{description => Desc1}, Hocon, Options) - end. - -maybe_add_summary_from_label(Spec, Hocon, Options) -> - Label = - case desc_struct(Hocon) of - ?DESC(_, _) = Struct -> get_i18n(<<"label">>, Struct, undefined, Options); - _ -> undefined - end, - case Label of - undefined -> Spec; - _ -> Spec#{summary => Label} + Spec#{description => Desc1} end. get_i18n(Tag, ?DESC(Namespace, Id), Default, Options) -> @@ -1012,7 +1001,10 @@ parse_object_loop([{Name, Hocon} | Rest], Module, Options, Props, Required, Refs HoconType = hocon_schema:field_schema(Hocon, type), Init0 = init_prop([default | ?DEFAULT_FIELDS], #{}, Hocon), SchemaToSpec = schema_converter(Options), - Init = trans_desc(Init0, Hocon, SchemaToSpec, NameBin, Options), + Init = maps:remove( + summary, + trans_desc(Init0, Hocon, SchemaToSpec, NameBin, Options) + ), {Prop, Refs1} = SchemaToSpec(HoconType, Module), NewRequiredAcc = case is_required(Hocon) of From 8fdc9de9e901bde6d28460ae6860eb30f486a8da Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 18:55:37 +0200 Subject: [PATCH 4/8] fix: empty properties as empty map so it ends up as a json object --- apps/emqx_dashboard/src/emqx_dashboard_swagger.erl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index 9f049e93f..f128513ba 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -965,7 +965,7 @@ to_bin(X) -> parse_object(PropList = [_ | _], Module, Options) when is_list(PropList) -> {Props, Required, Refs} = parse_object_loop(PropList, Module, Options), - Object = #{<<"type">> => object, <<"properties">> => Props}, + Object = #{<<"type">> => object, <<"properties">> => fix_empty_props(Props)}, case Required of [] -> {Object, Refs}; _ -> {maps:put(required, Required, Object), Refs} @@ -1035,6 +1035,11 @@ is_hidden(Hocon) -> is_required(Hocon) -> hocon_schema:field_schema(Hocon, required) =:= true. +fix_empty_props([]) -> + #{}; +fix_empty_props(Props) -> + Props. + content(ApiSpec) -> content(ApiSpec, undefined). From 190e44f8be9c44b1c2d664cfc177c4ee215fadc0 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 19:15:23 +0200 Subject: [PATCH 5/8] fix: brackets not allowed in swagger schema for component names --- apps/emqx_dashboard/src/emqx_dashboard_swagger.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index f128513ba..018101338 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -959,7 +959,7 @@ to_bin(List) when is_list(List) -> to_bin(Boolean) when is_boolean(Boolean) -> Boolean; to_bin(Atom) when is_atom(Atom) -> atom_to_binary(Atom, utf8); to_bin({Type, Args}) -> - unicode:characters_to_binary(io_lib:format("~ts(~p)", [Type, Args])); + unicode:characters_to_binary(io_lib:format("~ts-~p", [Type, Args])); to_bin(X) -> X. From 15c7c281cad0989293e9e20d630ab51df96a1d95 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 20:47:19 +0200 Subject: [PATCH 6/8] fix: don't convert empty list default --- apps/emqx_dashboard/src/emqx_dashboard_swagger.erl | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index 018101338..6e354e1cf 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -536,6 +536,7 @@ init_prop(Keys, Init, Type) -> format_prop(deprecated, Value) when is_boolean(Value) -> Value; format_prop(deprecated, _) -> true; +format_prop(default, []) -> []; format_prop(_, Schema) -> to_bin(Schema). trans_required(Spec, true, _) -> Spec#{required => true}; From c7f177054c4cbb0160b5babc6b632cdc05ed4f5c Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 20:47:47 +0200 Subject: [PATCH 7/8] fix(emqx_authn): verify_claims is list(), therefor default must match --- apps/emqx_authn/src/emqx_authn.app.src | 2 +- apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/emqx_authn/src/emqx_authn.app.src b/apps/emqx_authn/src/emqx_authn.app.src index a291f2f61..8a5b29642 100644 --- a/apps/emqx_authn/src/emqx_authn.app.src +++ b/apps/emqx_authn/src/emqx_authn.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_authn, [ {description, "EMQX Authentication"}, - {vsn, "0.1.20"}, + {vsn, "0.1.21"}, {modules, []}, {registered, [emqx_authn_sup, emqx_authn_registry]}, {applications, [kernel, stdlib, emqx_resource, emqx_connector, ehttpc, epgsql, mysql, jose]}, diff --git a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl index 0df9014b8..5fef89078 100644 --- a/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl +++ b/apps/emqx_authn/src/simple_authn/emqx_authn_jwt.erl @@ -158,12 +158,15 @@ verify_claims(type) -> verify_claims(desc) -> ?DESC(?FUNCTION_NAME); verify_claims(default) -> - #{}; + []; verify_claims(validator) -> [fun do_check_verify_claims/1]; verify_claims(converter) -> - fun(VerifyClaims) -> - [{to_binary(K), V} || {K, V} <- maps:to_list(VerifyClaims)] + fun + (VerifyClaims) when is_map(VerifyClaims) -> + [{to_binary(K), V} || {K, V} <- maps:to_list(VerifyClaims)]; + (VerifyClaims) -> + VerifyClaims end; verify_claims(required) -> false; From c9ef1ccacd151ecab9fd78d9fe6a17f7b60be7cc Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Jun 2023 20:48:15 +0200 Subject: [PATCH 8/8] fix: headers is array not object --- apps/emqx_prometheus/src/emqx_prometheus.app.src | 2 +- apps/emqx_prometheus/src/emqx_prometheus_schema.erl | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/emqx_prometheus/src/emqx_prometheus.app.src b/apps/emqx_prometheus/src/emqx_prometheus.app.src index a0d4dee04..147dcc28f 100644 --- a/apps/emqx_prometheus/src/emqx_prometheus.app.src +++ b/apps/emqx_prometheus/src/emqx_prometheus.app.src @@ -2,7 +2,7 @@ {application, emqx_prometheus, [ {description, "Prometheus for EMQX"}, % strict semver, bump manually! - {vsn, "5.0.11"}, + {vsn, "5.0.12"}, {modules, []}, {registered, [emqx_prometheus_sup]}, {applications, [kernel, stdlib, prometheus, emqx, emqx_management]}, diff --git a/apps/emqx_prometheus/src/emqx_prometheus_schema.erl b/apps/emqx_prometheus/src/emqx_prometheus_schema.erl index f8005f06b..370582304 100644 --- a/apps/emqx_prometheus/src/emqx_prometheus_schema.erl +++ b/apps/emqx_prometheus/src/emqx_prometheus_schema.erl @@ -59,7 +59,7 @@ fields("prometheus") -> ?HOCON( list({string(), string()}), #{ - default => #{}, + default => [], required => false, converter => fun ?MODULE:convert_headers/1, desc => ?DESC(headers) @@ -149,6 +149,8 @@ fields("prometheus") -> desc("prometheus") -> ?DESC(prometheus); desc(_) -> undefined. +convert_headers(<<>>) -> + []; convert_headers(Headers) when is_map(Headers) -> maps:fold( fun(K, V, Acc) ->