Merge pull request #6529 from lafirest/fix/retain_payload

fix(emqx_retainer): use base64 to encode payload in api's result
This commit is contained in:
lafirest 2021-12-24 10:26:00 +08:00 committed by GitHub
commit 8c42b623c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 1 deletions

View File

@ -34,6 +34,8 @@
, page_params/0 , page_params/0
, properties/1]). , properties/1]).
-define(MAX_BASE64_PAYLOAD_SIZE, 1048576). %% 1MB = 1024 x 1024
api_spec() -> api_spec() ->
{[lookup_retained_api(), with_topic_api(), config_api()], []}. {[lookup_retained_api(), with_topic_api(), config_api()], []}.
@ -179,7 +181,13 @@ format_message(#message{ id = ID, qos = Qos, topic = Topic, from = From
format_detail_message(#message{payload = Payload} = Msg) -> format_detail_message(#message{payload = Payload} = Msg) ->
Base = format_message(Msg), Base = format_message(Msg),
Base#{payload => Payload}. EncodePayload = base64:encode(Payload),
case erlang:byte_size(EncodePayload) =< ?MAX_BASE64_PAYLOAD_SIZE of
true ->
Base#{payload => EncodePayload};
_ ->
Base#{payload => base64:encode(<<"PAYLOAD_TOO_LARGE">>)}
end.
to_bin_string(Data) when is_binary(Data) -> to_bin_string(Data) when is_binary(Data) ->
Data; Data;