commit
39a9636ad9
@ -0,0 +1,73 @@ |
|||||||
|
defmodule RPCTranslatorForwarder do |
||||||
|
@moduledoc """ |
||||||
|
Phoenix router limits forwarding, |
||||||
|
so this module is to forward old paths for backward compatibility |
||||||
|
""" |
||||||
|
alias BlockScoutWeb.API.RPC.RPCTranslator |
||||||
|
defdelegate init(opts), to: RPCTranslator |
||||||
|
defdelegate call(conn, opts), to: RPCTranslator |
||||||
|
end |
||||||
|
|
||||||
|
defmodule BlockScoutWeb.ApiRouter do |
||||||
|
@moduledoc """ |
||||||
|
Router for API |
||||||
|
""" |
||||||
|
use BlockScoutWeb, :router |
||||||
|
|
||||||
|
pipeline :api do |
||||||
|
plug(:accepts, ["json"]) |
||||||
|
end |
||||||
|
|
||||||
|
scope "/v1", BlockScoutWeb.API.V1, as: :api_v1 do |
||||||
|
pipe_through(:api) |
||||||
|
get("/health", HealthController, :health) |
||||||
|
|
||||||
|
if Application.get_env(:block_scout_web, __MODULE__)[:writing_enabled] do |
||||||
|
post("/decompiled_smart_contract", DecompiledSmartContractController, :create) |
||||||
|
post("/verified_smart_contracts", VerifiedSmartContractController, :create) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
if Application.get_env(:block_scout_web, __MODULE__)[:reading_enabled] do |
||||||
|
scope "/" do |
||||||
|
alias BlockScoutWeb.API.{RPC, V1} |
||||||
|
pipe_through(:api) |
||||||
|
|
||||||
|
scope "/v1", as: :api_v1 do |
||||||
|
get("/supply", V1.SupplyController, :supply) |
||||||
|
post("/eth_rpc", RPC.EthController, :eth_request) |
||||||
|
end |
||||||
|
|
||||||
|
# For backward compatibility. Should be removed |
||||||
|
post("/eth_rpc", RPC.EthController, :eth_request) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
scope "/" do |
||||||
|
pipe_through(:api) |
||||||
|
alias BlockScoutWeb.API.RPC |
||||||
|
|
||||||
|
scope "/v1", as: :api_v1 do |
||||||
|
forward("/", RPC.RPCTranslator, %{ |
||||||
|
"block" => {RPC.BlockController, []}, |
||||||
|
"account" => {RPC.AddressController, []}, |
||||||
|
"logs" => {RPC.LogsController, []}, |
||||||
|
"token" => {RPC.TokenController, []}, |
||||||
|
"stats" => {RPC.StatsController, []}, |
||||||
|
"contract" => {RPC.ContractController, [:verify]}, |
||||||
|
"transaction" => {RPC.TransactionController, []} |
||||||
|
}) |
||||||
|
end |
||||||
|
|
||||||
|
# For backward compatibility. Should be removed |
||||||
|
forward("/", RPCTranslatorForwarder, %{ |
||||||
|
"block" => {RPC.BlockController, []}, |
||||||
|
"account" => {RPC.AddressController, []}, |
||||||
|
"logs" => {RPC.LogsController, []}, |
||||||
|
"token" => {RPC.TokenController, []}, |
||||||
|
"stats" => {RPC.StatsController, []}, |
||||||
|
"contract" => {RPC.ContractController, [:verify]}, |
||||||
|
"transaction" => {RPC.TransactionController, []} |
||||||
|
}) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,204 @@ |
|||||||
|
defmodule BlockScoutWeb.WebRouter do |
||||||
|
@moduledoc """ |
||||||
|
Router for web app |
||||||
|
""" |
||||||
|
use BlockScoutWeb, :router |
||||||
|
|
||||||
|
pipeline :browser do |
||||||
|
plug(:accepts, ["html"]) |
||||||
|
plug(:fetch_session) |
||||||
|
plug(:fetch_flash) |
||||||
|
plug(:protect_from_forgery) |
||||||
|
plug(BlockScoutWeb.CSPHeader) |
||||||
|
end |
||||||
|
|
||||||
|
# Disallows Iframes (write routes) |
||||||
|
scope "/", BlockScoutWeb do |
||||||
|
pipe_through(:browser) |
||||||
|
end |
||||||
|
|
||||||
|
# Allows Iframes (read-only routes) |
||||||
|
scope "/", BlockScoutWeb do |
||||||
|
pipe_through([:browser, BlockScoutWeb.Plug.AllowIframe]) |
||||||
|
|
||||||
|
resources("/", ChainController, only: [:show], singleton: true, as: :chain) |
||||||
|
|
||||||
|
resources("/market_history_chart", Chain.MarketHistoryChartController, |
||||||
|
only: [:show], |
||||||
|
singleton: true |
||||||
|
) |
||||||
|
|
||||||
|
resources "/blocks", BlockController, only: [:index, :show], param: "hash_or_number" do |
||||||
|
resources("/transactions", BlockTransactionController, only: [:index], as: :transaction) |
||||||
|
end |
||||||
|
|
||||||
|
get("/reorgs", BlockController, :reorg, as: :reorg) |
||||||
|
|
||||||
|
get("/uncles", BlockController, :uncle, as: :uncle) |
||||||
|
|
||||||
|
resources("/pending_transactions", PendingTransactionController, only: [:index]) |
||||||
|
|
||||||
|
resources("/recent_transactions", RecentTransactionsController, only: [:index]) |
||||||
|
|
||||||
|
get("/txs", TransactionController, :index) |
||||||
|
|
||||||
|
resources "/tx", TransactionController, only: [:show] do |
||||||
|
resources( |
||||||
|
"/internal_transactions", |
||||||
|
TransactionInternalTransactionController, |
||||||
|
only: [:index], |
||||||
|
as: :internal_transaction |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/raw_trace", |
||||||
|
TransactionRawTraceController, |
||||||
|
only: [:index], |
||||||
|
as: :raw_trace |
||||||
|
) |
||||||
|
|
||||||
|
resources("/logs", TransactionLogController, only: [:index], as: :log) |
||||||
|
|
||||||
|
resources("/token_transfers", TransactionTokenTransferController, |
||||||
|
only: [:index], |
||||||
|
as: :token_transfer |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
resources("/accounts", AddressController, only: [:index]) |
||||||
|
|
||||||
|
resources "/address", AddressController, only: [:show] do |
||||||
|
resources("/transactions", AddressTransactionController, only: [:index], as: :transaction) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/internal_transactions", |
||||||
|
AddressInternalTransactionController, |
||||||
|
only: [:index], |
||||||
|
as: :internal_transaction |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/validations", |
||||||
|
AddressValidationController, |
||||||
|
only: [:index], |
||||||
|
as: :validation |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/contracts", |
||||||
|
AddressContractController, |
||||||
|
only: [:index], |
||||||
|
as: :contract |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/decompiled_contracts", |
||||||
|
AddressDecompiledContractController, |
||||||
|
only: [:index], |
||||||
|
as: :decompiled_contract |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/logs", |
||||||
|
AddressLogsController, |
||||||
|
only: [:index], |
||||||
|
as: :logs |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/contract_verifications", |
||||||
|
AddressContractVerificationController, |
||||||
|
only: [:new], |
||||||
|
as: :verify_contract |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/read_contract", |
||||||
|
AddressReadContractController, |
||||||
|
only: [:index, :show], |
||||||
|
as: :read_contract |
||||||
|
) |
||||||
|
|
||||||
|
resources("/tokens", AddressTokenController, only: [:index], as: :token) do |
||||||
|
resources( |
||||||
|
"/token_transfers", |
||||||
|
AddressTokenTransferController, |
||||||
|
only: [:index], |
||||||
|
as: :transfers |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
resources( |
||||||
|
"/token_balances", |
||||||
|
AddressTokenBalanceController, |
||||||
|
only: [:index], |
||||||
|
as: :token_balance |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/coin_balances", |
||||||
|
AddressCoinBalanceController, |
||||||
|
only: [:index], |
||||||
|
as: :coin_balance |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/coin_balances/by_day", |
||||||
|
AddressCoinBalanceByDayController, |
||||||
|
only: [:index], |
||||||
|
as: :coin_balance_by_day |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
resources "/tokens", Tokens.TokenController, only: [:show], as: :token do |
||||||
|
resources( |
||||||
|
"/token_transfers", |
||||||
|
Tokens.TransferController, |
||||||
|
only: [:index], |
||||||
|
as: :transfer |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/read_contract", |
||||||
|
Tokens.ReadContractController, |
||||||
|
only: [:index], |
||||||
|
as: :read_contract |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/token_holders", |
||||||
|
Tokens.HolderController, |
||||||
|
only: [:index], |
||||||
|
as: :holder |
||||||
|
) |
||||||
|
|
||||||
|
resources( |
||||||
|
"/inventory", |
||||||
|
Tokens.InventoryController, |
||||||
|
only: [:index], |
||||||
|
as: :inventory |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
resources( |
||||||
|
"/smart_contracts", |
||||||
|
SmartContractController, |
||||||
|
only: [:index, :show], |
||||||
|
as: :smart_contract |
||||||
|
) |
||||||
|
|
||||||
|
get("/search", ChainController, :search) |
||||||
|
|
||||||
|
get("/search_logs", AddressLogsController, :search_logs) |
||||||
|
|
||||||
|
get("/transactions_csv", AddressTransactionController, :transactions_csv) |
||||||
|
|
||||||
|
get("/token_autocomplete", ChainController, :token_autocomplete) |
||||||
|
|
||||||
|
get("/token_transfers_csv", AddressTransactionController, :token_transfers_csv) |
||||||
|
|
||||||
|
get("/chain_blocks", ChainController, :chain_blocks, as: :chain_blocks) |
||||||
|
|
||||||
|
get("/*path", PageNotFoundController, :index) |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue