Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix aeweb referer #1313

Merged
merged 2 commits into from
Nov 7, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 28 additions & 12 deletions lib/archethic_web/explorer/controllers/explorer_root_controller.ex
Original file line number Diff line number Diff line change
@@ -1,35 +1,51 @@
defmodule ArchethicWeb.Explorer.ExplorerRootController do
@moduledoc false

alias Archethic.Crypto

use ArchethicWeb.Explorer, :controller

# def index(conn, _params), do: redirect(conn, to: "/explorer")
def index(conn, _params) do
case get_web_hosting_address(conn) do
nil ->
redirect(conn, to: "/explorer")

address ->
path = Map.get(conn, :request_path)
redirect(conn, to: "/api/web_hosting/" <> address <> path)
path =
case Map.get(conn, :request_path, "/") do
"" -> "/"
path -> path
end

redirect(conn, to: "/aeweb/" <> address <> path)
end
end

def return_404(conn, _params), do: send_resp(conn, 404, "Not found")

defp get_web_hosting_address(conn) do
case get_req_header(conn, "referer") do
[] ->
nil
[] -> nil
[referer] -> get_referer_address(referer)
end
end

[referer] ->
case Regex.scan(~r/(?<=\/api\/web_hosting\/)[^\/]*(?!$)/, referer) do
[] ->
nil
defp get_referer_address(referer) do
with address_hex when is_binary(address_hex) <- extract_address(referer),
{:ok, address} <- Base.decode16(address_hex, case: :mixed),
true <- Crypto.valid_address?(address) do
address_hex
else
_ -> nil
end
end

[match] ->
List.first(match)
end
defp extract_address(referer) do
with [] <- Regex.scan(~r/(?<=\/api\/web_hosting\/)[^\/]*/, referer),
[] <- Regex.scan(~r/(?<=\/aeweb\/)[^\/]*/, referer) do
nil
else
[match] -> List.first(match)
end
end
end
Loading