encode data properly

This commit is contained in:
stwf 2020-06-02 10:18:06 -04:00
parent 29ae5bb771
commit dbcc1b105e
5 changed files with 54 additions and 44 deletions

View file

@ -4,7 +4,9 @@
defmodule Fallback.RedirectController do defmodule Fallback.RedirectController do
use Pleroma.Web, :controller use Pleroma.Web, :controller
require Logger require Logger
alias Pleroma.User alias Pleroma.User
alias Pleroma.Web.Metadata alias Pleroma.Web.Metadata
alias Pleroma.Web.Preload alias Pleroma.Web.Preload
@ -38,8 +40,7 @@ defmodule Fallback.RedirectController do
response = response =
index_content index_content
|> String.replace("<!--server-generated-meta-->", tags) |> String.replace("<!--server-generated-meta-->", tags <> preloads)
|> String.replace("<!--server-generated-initial-data-->", preloads)
conn conn
|> put_resp_content_type("text/html") |> put_resp_content_type("text/html")
@ -56,7 +57,7 @@ defmodule Fallback.RedirectController do
response = response =
index_content index_content
|> String.replace("<!--server-generated-initial-data-->", preloads) |> String.replace("<!--server-generated-meta-->", preloads)
conn conn
|> put_resp_content_type("text/html") |> put_resp_content_type("text/html")

View file

@ -22,6 +22,8 @@ defmodule Pleroma.Web.Preload do
end end
def build_script_tag(content) do def build_script_tag(content) do
content = Base.encode64(content)
HTML.Tag.content_tag(:script, HTML.raw(content), HTML.Tag.content_tag(:script, HTML.raw(content),
id: "initial-results", id: "initial-results",
type: "application/json" type: "application/json"

View file

@ -11,32 +11,29 @@ defmodule Pleroma.Web.Preload.Providers.Timelines do
@public_url :"/api/v1/timelines/public" @public_url :"/api/v1/timelines/public"
@impl Provider @impl Provider
def generate_terms(_params) do def generate_terms(params) do
build_public_tag(%{}) build_public_tag(%{}, params)
end end
def build_public_tag(acc) do def build_public_tag(acc, params) do
if Pleroma.Config.get([:restrict_unauthenticated, :timelines, :federated], true) do if Pleroma.Config.get([:restrict_unauthenticated, :timelines, :federated], true) do
acc acc
else else
Map.put(acc, @public_url, public_timeline(nil)) Map.put(acc, @public_url, public_timeline(params))
end end
end end
defp public_timeline(user) do defp public_timeline(%{"path" => ["main", "all"]}), do: get_public_timeline(false)
defp public_timeline(_params), do: get_public_timeline(true)
defp get_public_timeline(local_only) do
activities = activities =
create_timeline_params(user) ActivityPub.fetch_public_activities(%{
|> Map.put("local_only", false) "type" => ["Create"],
|> ActivityPub.fetch_public_activities() "local_only" => local_only
})
StatusView.render("index.json", activities: activities, for: user, as: :activity) StatusView.render("index.json", activities: activities, for: nil, as: :activity)
end
defp create_timeline_params(user) do
%{}
|> Map.put("type", ["Create", "Announce"])
|> Map.put("blocking_user", user)
|> Map.put("muting_user", user)
|> Map.put("user", user)
end end
end end

View file

@ -11,7 +11,12 @@ defmodule Pleroma.Web.FallbackTest do
response = get(conn, "/registration/foo") response = get(conn, "/registration/foo")
assert html_response(response, 200) =~ "<!--server-generated-meta-->" assert html_response(response, 200) =~ "<!--server-generated-meta-->"
assert html_response(response, 200) =~ "<!--server-generated-initial-data-->" end
test "GET /*path", %{conn: conn} do
assert conn
|> get("/foo")
|> html_response(200) =~ "<!--server-generated-meta-->"
end end
end end
@ -21,20 +26,35 @@ defmodule Pleroma.Web.FallbackTest do
user_missing = get(conn, "/foo") user_missing = get(conn, "/foo")
user_present = get(conn, "/#{user.nickname}") user_present = get(conn, "/#{user.nickname}")
assert html_response(user_missing, 200) =~ "<!--server-generated-meta-->" assert(html_response(user_missing, 200) =~ "<!--server-generated-meta-->")
refute html_response(user_present, 200) =~ "<!--server-generated-meta-->" refute html_response(user_present, 200) =~ "<!--server-generated-meta-->"
assert html_response(user_present, 200) =~ "initial-results"
assert html_response(user_missing, 200) =~ "<!--server-generated-initial-data-->"
refute html_response(user_present, 200) =~ "<!--server-generated-initial-data-->"
end
end end
describe "preloaded data only attached to" do
test "GET /*path", %{conn: conn} do test "GET /*path", %{conn: conn} do
assert conn
|> get("/foo")
|> html_response(200) =~ "<!--server-generated-meta-->"
refute conn
|> get("/foo/bar")
|> html_response(200) =~ "<!--server-generated-meta-->"
end
end
describe "preloaded data is attached to" do
test "GET /main/public", %{conn: conn} do
public_page = get(conn, "/main/public") public_page = get(conn, "/main/public")
assert html_response(public_page, 200) =~ "<!--server-generated-meta-->" refute html_response(public_page, 200) =~ "<!--server-generated-meta-->"
refute html_response(public_page, 200) =~ "<!--server-generated-initial-data-->" assert html_response(public_page, 200) =~ "initial-results"
end
test "GET /main/all", %{conn: conn} do
public_page = get(conn, "/main/all")
refute html_response(public_page, 200) =~ "<!--server-generated-meta-->"
assert html_response(public_page, 200) =~ "initial-results"
end end
end end
@ -48,16 +68,6 @@ defmodule Pleroma.Web.FallbackTest do
assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/" assert redirected_to(get(conn, "/pleroma/admin")) =~ "/pleroma/admin/"
end end
test "GET /*path", %{conn: conn} do
assert conn
|> get("/foo")
|> html_response(200) =~ "<!--server-generated-meta-->"
assert conn
|> get("/foo/bar")
|> html_response(200) =~ "<!--server-generated-meta-->"
end
test "OPTIONS /*path", %{conn: conn} do test "OPTIONS /*path", %{conn: conn} do
assert conn assert conn
|> options("/foo") |> options("/foo")

View file

@ -52,9 +52,9 @@ defmodule Pleroma.Web.Preload.Providers.TimelineTest do
end end
test "returns public items", %{user: user} do test "returns public items", %{user: user} do
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 1!"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 1!"})
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 2!"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 2!"})
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 3!"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 3!"})
assert Timelines.generate_terms(%{}) assert Timelines.generate_terms(%{})
|> Map.fetch!(@public_url) |> Map.fetch!(@public_url)
@ -62,9 +62,9 @@ defmodule Pleroma.Web.Preload.Providers.TimelineTest do
end end
test "does not return non-public items", %{user: user} do test "does not return non-public items", %{user: user} do
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 1!", "visibility" => "unlisted"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 1!", visibility: "unlisted"})
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 2!", "visibility" => "direct"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 2!", visibility: "direct"})
{:ok, _} = CommonAPI.post(user, %{"status" => "it's post 3!"}) {:ok, _} = CommonAPI.post(user, %{status: "it's post 3!"})
assert Timelines.generate_terms(%{}) assert Timelines.generate_terms(%{})
|> Map.fetch!(@public_url) |> Map.fetch!(@public_url)