feat: add RFC 8288 Link response headers to homepage

This commit is contained in:
Graham McIntire 2026-04-17 14:11:15 -05:00
parent e370924083
commit 42480144da
2 changed files with 27 additions and 1 deletions

View file

@ -4,7 +4,8 @@ defmodule ToweropsWeb.PageController do
use ToweropsWeb, :controller
def home(conn, _params) do
# If user is authenticated, redirect to organization list
conn = put_link_headers(conn)
if conn.assigns.current_scope && conn.assigns.current_scope.user do
redirect(conn, to: ~p"/dashboard")
else
@ -12,6 +13,20 @@ defmodule ToweropsWeb.PageController do
end
end
defp put_link_headers(conn) do
link_value =
Enum.join(
[
~s(</.well-known/api-catalog>; rel="api-catalog"),
~s(</docs/api>; rel="service-doc"),
~s(</health>; rel="status")
],
", "
)
put_resp_header(conn, "link", link_value)
end
def privacy(conn, _params) do
render(conn, :privacy,
current_scope: conn.assigns[:current_scope],

View file

@ -9,6 +9,17 @@ defmodule ToweropsWeb.PageControllerTest do
assert html_response(conn, 200) =~ "network event"
end
test "homepage includes RFC 8288 Link discovery headers", %{conn: conn} do
conn = get(conn, ~p"/")
link_header = conn |> get_resp_header("link") |> List.first()
assert link_header =~ ~s(rel="api-catalog")
assert link_header =~ ~s(rel="service-doc")
assert link_header =~ ~s(rel="status")
assert link_header =~ "/.well-known/api-catalog"
assert link_header =~ "/docs/api"
assert link_header =~ "/health"
end
test "GET / redirects to organizations when authenticated", %{conn: conn} do
user = user_fixture()
conn = log_in_user(conn, user)