diff --git a/lib/tempest/xrpc/proxy.ex b/lib/tempest/xrpc/proxy.ex index 6b901ff..d30ddb7 100644 --- a/lib/tempest/xrpc/proxy.ex +++ b/lib/tempest/xrpc/proxy.ex @@ -69,7 +69,15 @@ defmodule Tempest.Xrpc.Proxy do defp forwarded_headers(conn, upstream, nsid) do conn.req_headers |> Enum.filter(fn {name, _value} -> - name in ["accept", "content-type", "atproto-accept-labelers", "x-atproto-accept-labelers"] + name in [ + "accept", + "accept-language", + "content-type", + "atproto-accept-labelers", + "atproto-content-labelers", + "x-atproto-accept-labelers", + "x-bsky-topics" + ] end) |> maybe_put_service_auth(conn, upstream, nsid) end diff --git a/lib/tempest_web/router.ex b/lib/tempest_web/router.ex index ee10090..ca86ba0 100644 --- a/lib/tempest_web/router.ex +++ b/lib/tempest_web/router.ex @@ -119,12 +119,10 @@ defmodule TempestWeb.Router do defp put_xrpc_cors_headers(conn, _opts) do conn |> Plug.Conn.put_resp_header("access-control-allow-origin", "*") - |> Plug.Conn.put_resp_header("access-control-allow-methods", "GET, POST, OPTIONS") - |> Plug.Conn.put_resp_header( - "access-control-allow-headers", - "authorization, content-type, dpop, atproto-proxy, atproto-accept-labelers, x-atproto-accept-labelers" - ) + |> Plug.Conn.put_resp_header("access-control-allow-credentials", "true") + |> Plug.Conn.put_resp_header("access-control-allow-methods", "*") + |> Plug.Conn.put_resp_header("access-control-allow-headers", "*") |> Plug.Conn.put_resp_header("access-control-expose-headers", "dpop-nonce") - |> Plug.Conn.put_resp_header("access-control-max-age", "86400") + |> Plug.Conn.put_resp_header("access-control-max-age", "100000000") end end diff --git a/test/tempest_web/controllers/xrpc_controller_test.exs b/test/tempest_web/controllers/xrpc_controller_test.exs index 244c61b..82c19ec 100644 --- a/test/tempest_web/controllers/xrpc_controller_test.exs +++ b/test/tempest_web/controllers/xrpc_controller_test.exs @@ -21,22 +21,17 @@ defmodule TempestWeb.XrpcControllerTest do |> put_req_header("access-control-request-method", "GET") |> put_req_header( "access-control-request-headers", - "authorization,content-type,dpop,atproto-proxy,atproto-accept-labelers" + "authorization,content-type,dpop,atproto-proxy,atproto-accept-labelers,x-atproto-accept-labelers,x-bsky-topics,x-future-client-header" ) |> options(~p"/xrpc/com.atproto.server.describeServer") assert response(conn, 204) == "" assert get_resp_header(conn, "access-control-allow-origin") == ["*"] - assert get_resp_header(conn, "access-control-allow-methods") == ["GET, POST, OPTIONS"] + assert get_resp_header(conn, "access-control-allow-credentials") == ["true"] + assert get_resp_header(conn, "access-control-allow-methods") == ["*"] + assert get_resp_header(conn, "access-control-allow-headers") == ["*"] assert get_resp_header(conn, "access-control-expose-headers") == ["dpop-nonce"] - - [allow_headers] = get_resp_header(conn, "access-control-allow-headers") - assert allow_headers =~ "authorization" - assert allow_headers =~ "content-type" - assert allow_headers =~ "dpop" - assert allow_headers =~ "atproto-proxy" - assert allow_headers =~ "atproto-accept-labelers" - assert allow_headers =~ "x-atproto-accept-labelers" + assert get_resp_header(conn, "access-control-max-age") == ["100000000"] end test "GET did.json returns service DID document", %{conn: conn} do diff --git a/test/tempest_web/xrpc/proxy_fallback_test.exs b/test/tempest_web/xrpc/proxy_fallback_test.exs index e0fd4fa..48f02df 100644 --- a/test/tempest_web/xrpc/proxy_fallback_test.exs +++ b/test/tempest_web/xrpc/proxy_fallback_test.exs @@ -21,11 +21,17 @@ defmodule TempestWeb.Xrpc.ProxyFallbackTest do Req.Test.expect(__MODULE__, fn conn -> assert conn.request_path == "/xrpc/app.bsky.feed.getTimeline" assert conn.query_string == "limit=1" + assert Plug.Conn.get_req_header(conn, "x-bsky-topics") == ["science,news"] + assert Plug.Conn.get_req_header(conn, "accept-language") == ["en-US"] + assert Plug.Conn.get_req_header(conn, "atproto-content-labelers") == ["did:plc:labeler"] Req.Test.json(conn, %{"feed" => []}) end) proxy_conn = conn + |> put_req_header("x-bsky-topics", "science,news") + |> put_req_header("accept-language", "en-US") + |> put_req_header("atproto-content-labelers", "did:plc:labeler") |> get(~p"/xrpc/app.bsky.feed.getTimeline", %{"limit" => "1"}) assert json_response(proxy_conn, 200) == %{"feed" => []}