|
|
@@ -28,6 +28,7 @@
|
|
|
-define(MAX_RULES_LIMIT, 20).
|
|
|
|
|
|
-define(EXCEED_LIMIT, 'EXCEED_LIMIT').
|
|
|
+-define(BAD_REQUEST, 'BAD_REQUEST').
|
|
|
|
|
|
api_spec() ->
|
|
|
emqx_dashboard_swagger:spec(?MODULE).
|
|
|
@@ -62,6 +63,10 @@ schema("/mqtt/topic_rewrite") ->
|
|
|
hoconsc:array(hoconsc:ref(emqx_modules_schema, "rewrite")),
|
|
|
#{desc => ?DESC(update_topic_rewrite_api)}
|
|
|
),
|
|
|
+ 400 => emqx_dashboard_swagger:error_codes(
|
|
|
+ [?BAD_REQUEST],
|
|
|
+ ?DESC(update_topic_rewrite_api_response400)
|
|
|
+ ),
|
|
|
413 => emqx_dashboard_swagger:error_codes(
|
|
|
[?EXCEED_LIMIT],
|
|
|
?DESC(update_topic_rewrite_api_response413)
|
|
|
@@ -75,11 +80,30 @@ topic_rewrite(get, _Params) ->
|
|
|
topic_rewrite(put, #{body := Body}) ->
|
|
|
case length(Body) < ?MAX_RULES_LIMIT of
|
|
|
true ->
|
|
|
- ok = emqx_rewrite:update(Body),
|
|
|
- {200, emqx_rewrite:list()};
|
|
|
+ try
|
|
|
+ ok = emqx_rewrite:update(Body),
|
|
|
+ {200, emqx_rewrite:list()}
|
|
|
+ catch
|
|
|
+ throw:#{
|
|
|
+ kind := validation_error,
|
|
|
+ reason := #{
|
|
|
+ msg := "cannot_use_wildcard_for_destination_topic",
|
|
|
+ invalid_topics := InvalidTopics
|
|
|
+ }
|
|
|
+ } ->
|
|
|
+ Message = get_invalid_wildcard_topic_msg(InvalidTopics),
|
|
|
+ {400, #{code => ?BAD_REQUEST, message => Message}}
|
|
|
+ end;
|
|
|
_ ->
|
|
|
Message = iolist_to_binary(
|
|
|
io_lib:format("Max rewrite rules count is ~p", [?MAX_RULES_LIMIT])
|
|
|
),
|
|
|
{413, #{code => ?EXCEED_LIMIT, message => Message}}
|
|
|
end.
|
|
|
+
|
|
|
+get_invalid_wildcard_topic_msg(InvalidTopics) ->
|
|
|
+ iolist_to_binary(
|
|
|
+ io_lib:format("Cannot use wildcard for destination topic. Invalid topics: ~p", [
|
|
|
+ InvalidTopics
|
|
|
+ ])
|
|
|
+ ).
|