1
0
Fork 0
mirror of https://github.com/benbusby/farside.git synced 2025-06-08 02:16:36 +00:00

Preserve redirect with /r/ path prefix

This adds a straightforward way of preserving Farside's redirecting
behavior in the user's browser history. That way if an instance becomes
unavailable between the 5 min scans, the user can opt to navigate back
one page and be taken to a new instance.

This is accomplished using a single line of JS, and could potentially
work as the default behavior of Farside (with the current default
behavior requiring a path prefix instead). This should be revisited down
the road when more people are using this service.
This commit is contained in:
Ben Busby 2022-01-27 10:56:10 -07:00
parent 724a995fd9
commit 2d90b9e43a
No known key found for this signature in database
GPG key ID: B9B7231E01D924A1
4 changed files with 27 additions and 0 deletions

2
.gitignore vendored
View file

@ -11,3 +11,5 @@ erl_crash.dump
# Ignore results from update script # Ignore results from update script
.update-result* .update-result*
*.rdb

View file

@ -9,6 +9,7 @@ config :farside,
previous_suffix: "-previous", previous_suffix: "-previous",
services_json: "services.json", services_json: "services.json",
index: "index.eex", index: "index.eex",
route: "route.eex",
headers: [ headers: [
{"User-Agent", "Mozilla/5.0 (Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0"}, {"User-Agent", "Mozilla/5.0 (Linux x86_64; rv:94.0) Gecko/20100101 Firefox/94.0"},
{"Accept", "text/html"}, {"Accept", "text/html"},

View file

@ -1,5 +1,6 @@
defmodule Farside.Router do defmodule Farside.Router do
@index Application.fetch_env!(:farside, :index) @index Application.fetch_env!(:farside, :index)
@route Application.fetch_env!(:farside, :route)
use Plug.Router use Plug.Router
@ -24,6 +25,19 @@ defmodule Farside.Router do
send_resp(conn, 200, resp) send_resp(conn, 200, resp)
end end
get "/r/:service/*glob" do
r_path = String.slice(conn.request_path, 2..-1)
resp =
EEx.eval_file(
@route,
service: service,
instance_url: r_path
)
send_resp(conn, 200, resp)
end
get "/:service/*glob" do get "/:service/*glob" do
path = Enum.join(glob, "/") path = Enum.join(glob, "/")
instance = Farside.pick_instance(service) instance = Farside.pick_instance(service)

10
route.eex Normal file
View file

@ -0,0 +1,10 @@
<head>
<title>Farside Redirect - <%= service %></title>
<meta http-equiv="refresh" content="1; url=<%= instance_url %>">
<script>
history.pushState({page: 1}, "Farside Redirect");
</script>
</head>
<body>
<span>Redirecting to <%= service %> instance...
</body>