fix: publish api rename param from - clientid

This commit is contained in:
DDDHuang 2022-06-30 17:48:07 +08:00
parent 3df86508bc
commit 4f95f097f7
1 changed files with 57 additions and 17 deletions

View File

@ -61,7 +61,7 @@ schema("/publish/bulk") ->
} }
}. }.
fields(publish_message) -> fields(message) ->
[ [
{topic, {topic,
hoconsc:mk(binary(), #{ hoconsc:mk(binary(), #{
@ -75,7 +75,7 @@ fields(publish_message) ->
required => false, required => false,
default => 0 default => 0
})}, })},
{from, {clientid,
hoconsc:mk(binary(), #{ hoconsc:mk(binary(), #{
desc => <<"From client ID">>, desc => <<"From client ID">>,
required => false, required => false,
@ -94,34 +94,74 @@ fields(publish_message) ->
default => false default => false
})} })}
]; ];
fields(publish_message) ->
[
{payload_encoding,
hoconsc:mk(hoconsc:enum([plain, base64]), #{
desc => <<"MQTT Payload Encoding, base64 or plain">>,
required => false,
default => plain
})}
] ++ fields(message);
fields(publish_message_info) -> fields(publish_message_info) ->
[ [
{id, {id,
hoconsc:mk(binary(), #{ hoconsc:mk(binary(), #{
desc => <<"Internal Message ID">> desc => <<"Internal Message ID">>
})} })}
] ++ fields(publish_message). ] ++ fields(message).
publish(post, #{body := Body}) -> publish(post, #{body := Body}) ->
Message = message(Body), case message(Body) of
_ = emqx_mgmt:publish(Message), {ok, Message} ->
{200, format_message(Message)}. _ = emqx_mgmt:publish(Message),
{200, format_message(Message)};
{error, R} ->
{400, 'BAD_REQUEST', to_binary(R)}
end.
publish_batch(post, #{body := Body}) -> publish_batch(post, #{body := Body}) ->
Messages = messages(Body), case messages(Body) of
_ = [emqx_mgmt:publish(Message) || Message <- Messages], {ok, Messages} ->
{200, format_message(Messages)}. _ = [emqx_mgmt:publish(Message) || Message <- Messages],
{200, format_message(Messages)};
{error, R} ->
{400, 'BAD_REQUEST', to_binary(R)}
end.
message(Map) -> message(Map) ->
From = maps:get(<<"from">>, Map, http_api), Encoding = maps:get(<<"payload_encoding">>, Map, plain),
QoS = maps:get(<<"qos">>, Map, 0), case encode_payload(Encoding, maps:get(<<"payload">>, Map)) of
Topic = maps:get(<<"topic">>, Map), {ok, Payload} ->
Payload = maps:get(<<"payload">>, Map), From = maps:get(<<"clientid">>, Map, http_api),
Retain = maps:get(<<"retain">>, Map, false), QoS = maps:get(<<"qos">>, Map, 0),
emqx_message:make(From, QoS, Topic, Payload, #{retain => Retain}, #{}). Topic = maps:get(<<"topic">>, Map),
Retain = maps:get(<<"retain">>, Map, false),
{ok, emqx_message:make(From, QoS, Topic, Payload, #{retain => Retain}, #{})};
{error, R} ->
{error, R}
end.
encode_payload(plain, Payload) -> {ok, Payload};
encode_payload(base64, Payload) ->
try
{ok, base64:decode(Payload)}
catch _:_ ->
{error, {decode_base64_payload_failed, Payload}}
end.
messages(List) -> messages(List) ->
[message(MessageMap) || MessageMap <- List]. messages(List, []).
messages([], Res) ->
{ok, lists:reverse(Res)};
messages([MessageMap | List], Res) ->
case message(MessageMap) of
{ok, Message} ->
messages(List, [Message | Res]);
{error, R} ->
{error, R}
end.
format_message(Messages) when is_list(Messages) -> format_message(Messages) when is_list(Messages) ->
[format_message(Message) || Message <- Messages]; [format_message(Message) || Message <- Messages];
@ -134,7 +174,7 @@ format_message(#message{
topic => Topic, topic => Topic,
payload => Payload, payload => Payload,
retain => maps:get(retain, Flags, false), retain => maps:get(retain, Flags, false),
from => to_binary(From) clientid => to_binary(From)
}. }.
to_binary(Data) when is_binary(Data) -> to_binary(Data) when is_binary(Data) ->