fix(emqx_management): return 404 for unknown listener id
This commit is contained in:
parent
d65d690c17
commit
3fd28f9e18
|
@ -45,14 +45,10 @@
|
|||
update/3
|
||||
]).
|
||||
|
||||
-include_lib("emqx/include/emqx.hrl").
|
||||
-include_lib("hocon/include/hoconsc.hrl").
|
||||
|
||||
-define(NODE_LISTENER_NOT_FOUND, <<"Node name or listener id not found">>).
|
||||
-define(NODE_NOT_FOUND_OR_DOWN, <<"Node not found or Down">>).
|
||||
-define(LISTENER_NOT_FOUND, <<"Listener id not found">>).
|
||||
-define(LISTENER_ID_INCONSISTENT, <<"Path and body's listener id not match">>).
|
||||
-define(ADDR_PORT_INUSE, <<"Addr port in use">>).
|
||||
|
||||
namespace() -> "listeners".
|
||||
|
||||
|
@ -156,7 +152,7 @@ schema("/listeners/:id") ->
|
|||
parameters => [?R_REF(listener_id)],
|
||||
responses => #{
|
||||
204 => <<"Listener deleted">>,
|
||||
400 => error_codes(['BAD_REQUEST'])
|
||||
404 => error_codes(['BAD_LISTENER_ID'])
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -405,20 +401,8 @@ list_listeners(get, #{query_string := Query}) ->
|
|||
list_listeners(post, #{body := Body}) ->
|
||||
create_listener(Body).
|
||||
|
||||
crud_listeners_by_id(get, #{bindings := #{id := Id0}}) ->
|
||||
Listeners =
|
||||
[
|
||||
Conf#{
|
||||
<<"id">> => Id,
|
||||
<<"type">> => Type,
|
||||
<<"bind">> := iolist_to_binary(
|
||||
emqx_listeners:format_bind(maps:get(<<"bind">>, Conf))
|
||||
)
|
||||
}
|
||||
|| {Id, Type, Conf} <- emqx_listeners:list_raw(),
|
||||
Id =:= Id0
|
||||
],
|
||||
case Listeners of
|
||||
crud_listeners_by_id(get, #{bindings := #{id := Id}}) ->
|
||||
case find_listeners_by_id(Id) of
|
||||
[] -> {404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}};
|
||||
[L] -> {200, L}
|
||||
end;
|
||||
|
@ -449,9 +433,12 @@ crud_listeners_by_id(post, #{body := Body}) ->
|
|||
create_listener(Body);
|
||||
crud_listeners_by_id(delete, #{bindings := #{id := Id}}) ->
|
||||
{ok, #{type := Type, name := Name}} = emqx_listeners:parse_listener_id(Id),
|
||||
case ensure_remove(Type, Name) of
|
||||
{ok, _} -> {204};
|
||||
{error, Reason} -> {400, #{code => 'BAD_REQUEST', message => err_msg(Reason)}}
|
||||
case find_listeners_by_id(Id) of
|
||||
[_L] ->
|
||||
{ok, _Res} = ensure_remove(Type, Name),
|
||||
{204};
|
||||
[] ->
|
||||
{404, #{code => 'BAD_LISTENER_ID', message => ?LISTENER_NOT_FOUND}}
|
||||
end.
|
||||
|
||||
parse_listener_conf(Conf0) ->
|
||||
|
@ -585,6 +572,19 @@ do_list_listeners() ->
|
|||
<<"listeners">> => Listeners
|
||||
}.
|
||||
|
||||
find_listeners_by_id(Id) ->
|
||||
[
|
||||
Conf#{
|
||||
<<"id">> => Id0,
|
||||
<<"type">> => Type,
|
||||
<<"bind">> := iolist_to_binary(
|
||||
emqx_listeners:format_bind(maps:get(<<"bind">>, Conf))
|
||||
)
|
||||
}
|
||||
|| {Id0, Type, Conf} <- emqx_listeners:list_raw(),
|
||||
Id0 =:= Id
|
||||
].
|
||||
|
||||
wrap_rpc({badrpc, Reason}) ->
|
||||
{error, Reason};
|
||||
wrap_rpc(Res) ->
|
||||
|
|
|
@ -399,12 +399,15 @@ crud_listeners_by_id(ListenerId, NewListenerId, MinListenerId, BadId, Type, Port
|
|||
?assertEqual([], delete(MinPath)),
|
||||
?assertEqual({error, not_found}, is_running(NewListenerId)),
|
||||
?assertMatch({error, {"HTTP/1.1", 404, _}}, request(get, NewPath, [], [])),
|
||||
?assertEqual([], delete(NewPath)),
|
||||
?assertMatch({error, {"HTTP/1.1", 404, _}}, request(delete, NewPath, [], [])),
|
||||
ok.
|
||||
|
||||
t_delete_nonexistent_listener(Config) when is_list(Config) ->
|
||||
NonExist = emqx_mgmt_api_test_util:api_path(["listeners", "tcp:nonexistent"]),
|
||||
?assertEqual([], delete(NonExist)),
|
||||
?assertMatch(
|
||||
{error, {_, 404, _}},
|
||||
request(delete, NonExist, [], [])
|
||||
),
|
||||
ok.
|
||||
|
||||
t_action_listeners(Config) when is_list(Config) ->
|
||||
|
|
Loading…
Reference in New Issue