Fix an error occurred when decoding base64 encoded json

pull/6913/head
Cutsin 2 years ago
parent 4c02d3de66
commit fb6e11e217
  1. 1
      CHANGELOG.md
  2. 4
      apps/explorer/lib/explorer/token/instance_metadata_retriever.ex
  3. 18
      apps/explorer/test/explorer/token/instance_metadata_retriever_test.exs

@ -7,6 +7,7 @@
### Fixes ### Fixes
- [#6912](https://github.com/blockscout/blockscout/pull/6912) - Docker compose fix exposed ports - [#6912](https://github.com/blockscout/blockscout/pull/6912) - Docker compose fix exposed ports
- [#6833](https://github.com/blockscout/blockscout/pull/6833) - Fix an error occurred when decoding base64 encoded json
- [#6891](https://github.com/blockscout/blockscout/pull/6891) - Fix read contract for geth - [#6891](https://github.com/blockscout/blockscout/pull/6891) - Fix read contract for geth
- [#6889](https://github.com/blockscout/blockscout/pull/6889) - Fix Internal Server Error on tx input decoding - [#6889](https://github.com/blockscout/blockscout/pull/6889) - Fix Internal Server Error on tx input decoding
- [#6893](https://github.com/blockscout/blockscout/pull/6893) - Fix token type definition for multiple interface tokens - [#6893](https://github.com/blockscout/blockscout/pull/6893) - Fix token type definition for multiple interface tokens

@ -169,7 +169,7 @@ defmodule Explorer.Token.InstanceMetadataRetriever do
end end
def fetch_json(%{@token_uri => {:ok, ["data:application/json;base64," <> base64_encoded_json]}}, hex_token_id) do def fetch_json(%{@token_uri => {:ok, ["data:application/json;base64," <> base64_encoded_json]}}, hex_token_id) do
case Base.url_decode64(base64_encoded_json) do case Base.decode64(base64_encoded_json) do
{:ok, base64_decoded} -> {:ok, base64_decoded} ->
fetch_json(%{@token_uri => {:ok, [base64_decoded]}}, hex_token_id) fetch_json(%{@token_uri => {:ok, [base64_decoded]}}, hex_token_id)
@ -190,7 +190,7 @@ defmodule Explorer.Token.InstanceMetadataRetriever do
end end
def fetch_json(%{@uri => {:ok, ["data:application/json;base64," <> base64_encoded_json]}}, hex_token_id) do def fetch_json(%{@uri => {:ok, ["data:application/json;base64," <> base64_encoded_json]}}, hex_token_id) do
case Base.url_decode64(base64_encoded_json) do case Base.decode64(base64_encoded_json) do
{:ok, base64_decoded} -> {:ok, base64_decoded} ->
fetch_json(%{@uri => {:ok, [base64_decoded]}}, hex_token_id) fetch_json(%{@uri => {:ok, [base64_decoded]}}, hex_token_id)

@ -307,5 +307,23 @@ defmodule Explorer.Token.InstanceMetadataRetrieverTest do
} }
}} }}
end end
test "decodes base64 encoded json file (with unicode string) in tokenURI" do
data = %{
"c87b56dd" =>
{:ok,
[
"data:application/json;base64,eyJuYW1lIjogIi54ZGFpIiwgImRlc2NyaXB0aW9uIjogIlB1bmsgRG9tYWlucyBkaWdpdGFsIGlkZW50aXR5IMOvLiBWaXNpdCBodHRwczovL3B1bmsuZG9tYWlucy8iLCAiaW1hZ2UiOiAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ01DQTFNREFnTlRBd0lpQjNhV1IwYUQwaU5UQXdJaUJvWldsbmFIUTlJalV3TUNJK1BHUmxabk0rUEd4cGJtVmhja2R5WVdScFpXNTBJR2xrUFNKbmNtRmtJaUI0TVQwaU1DVWlJSGt4UFNJd0pTSWdlREk5SWpFd01DVWlJSGt5UFNJd0pTSStQSE4wYjNBZ2IyWm1jMlYwUFNJd0pTSWdjM1I1YkdVOUluTjBiM0F0WTI5c2IzSTZjbWRpS0RVNExERTNMREV4TmlrN2MzUnZjQzF2Y0dGamFYUjVPakVpSUM4K1BITjBiM0FnYjJabWMyVjBQU0l4TURBbElpQnpkSGxzWlQwaWMzUnZjQzFqYjJ4dmNqcHlaMklvTVRFMkxESTFMREUzS1R0emRHOXdMVzl3WVdOcGRIazZNU0lnTHo0OEwyeHBibVZoY2tkeVlXUnBaVzUwUGp3dlpHVm1jejQ4Y21WamRDQjRQU0l3SWlCNVBTSXdJaUIzYVdSMGFEMGlOVEF3SWlCb1pXbG5hSFE5SWpVd01DSWdabWxzYkQwaWRYSnNLQ05uY21Ga0tTSXZQangwWlhoMElIZzlJalV3SlNJZ2VUMGlOVEFsSWlCa2IyMXBibUZ1ZEMxaVlYTmxiR2x1WlQwaWJXbGtaR3hsSWlCbWFXeHNQU0ozYUdsMFpTSWdkR1Y0ZEMxaGJtTm9iM0k5SW0xcFpHUnNaU0lnWm05dWRDMXphWHBsUFNKNExXeGhjbWRsSWo0dWVHUmhhVHd2ZEdWNGRENDhkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqY3dKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnWm1sc2JEMGlkMmhwZEdVaUlIUmxlSFF0WVc1amFHOXlQU0p0YVdSa2JHVWlQbkIxYm1zdVpHOXRZV2x1Y3p3dmRHVjRkRDQ4TDNOMlp6ND0ifQ=="
]}
}
assert InstanceMetadataRetriever.fetch_json(data) ==
{:ok,
%{
metadata: %{
"description" => "Punk Domains digital identity ï. Visit https://punk.domains/"
}
}}
end
end end
end end

Loading…
Cancel
Save