Compare commits
No commits in common. "b22843a98247cf683764759f3e447845f3fcedf8" and "62a45747d90c2ad400373650b9c03693acfa7708" have entirely different histories.
b22843a982
...
62a45747d9
@ -14,12 +14,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
## 2.4.3 - 2022-05-06
|
|
||||||
|
|
||||||
### Security
|
|
||||||
- Private `/objects/` and `/activities/` leaking if cached by authenticated user
|
|
||||||
- SweetXML library DTD bomb
|
|
||||||
|
|
||||||
## 2.4.2 - 2022-01-10
|
## 2.4.2 - 2022-01-10
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
@ -84,7 +84,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
|
|||||||
user <- Map.get(assigns, :user, nil),
|
user <- Map.get(assigns, :user, nil),
|
||||||
{_, true} <- {:visible?, Visibility.visible_for_user?(object, user)} do
|
{_, true} <- {:visible?, Visibility.visible_for_user?(object, user)} do
|
||||||
conn
|
conn
|
||||||
|> maybe_skip_cache(user)
|
|
||||||
|> assign(:tracking_fun_data, object.id)
|
|> assign(:tracking_fun_data, object.id)
|
||||||
|> set_cache_ttl_for(object)
|
|> set_cache_ttl_for(object)
|
||||||
|> put_resp_content_type("application/activity+json")
|
|> put_resp_content_type("application/activity+json")
|
||||||
@ -113,7 +112,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
|
|||||||
user <- Map.get(assigns, :user, nil),
|
user <- Map.get(assigns, :user, nil),
|
||||||
{_, true} <- {:visible?, Visibility.visible_for_user?(activity, user)} do
|
{_, true} <- {:visible?, Visibility.visible_for_user?(activity, user)} do
|
||||||
conn
|
conn
|
||||||
|> maybe_skip_cache(user)
|
|
||||||
|> maybe_set_tracking_data(activity)
|
|> maybe_set_tracking_data(activity)
|
||||||
|> set_cache_ttl_for(activity)
|
|> set_cache_ttl_for(activity)
|
||||||
|> put_resp_content_type("application/activity+json")
|
|> put_resp_content_type("application/activity+json")
|
||||||
@ -153,15 +151,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
|
|||||||
assign(conn, :cache_ttl, ttl)
|
assign(conn, :cache_ttl, ttl)
|
||||||
end
|
end
|
||||||
|
|
||||||
def maybe_skip_cache(conn, user) do
|
|
||||||
if user do
|
|
||||||
conn
|
|
||||||
|> assign(:skip_cache, true)
|
|
||||||
else
|
|
||||||
conn
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# GET /relay/following
|
# GET /relay/following
|
||||||
def relay_following(conn, _params) do
|
def relay_following(conn, _params) do
|
||||||
with %{halted: false} = conn <- FederatingPlug.call(conn, []) do
|
with %{halted: false} = conn <- FederatingPlug.call(conn, []) do
|
||||||
|
@ -97,21 +97,13 @@ defmodule Pleroma.Web.Plugs.Cache do
|
|||||||
key = cache_key(conn, opts)
|
key = cache_key(conn, opts)
|
||||||
content_type = content_type(conn)
|
content_type = content_type(conn)
|
||||||
|
|
||||||
should_cache = not Map.get(conn.assigns, :skip_cache, false)
|
|
||||||
|
|
||||||
conn =
|
conn =
|
||||||
unless opts[:tracking_fun] do
|
unless opts[:tracking_fun] do
|
||||||
if should_cache do
|
|
||||||
@cachex.put(:web_resp_cache, key, {content_type, body}, ttl: ttl)
|
@cachex.put(:web_resp_cache, key, {content_type, body}, ttl: ttl)
|
||||||
end
|
|
||||||
|
|
||||||
conn
|
conn
|
||||||
else
|
else
|
||||||
tracking_fun_data = Map.get(conn.assigns, :tracking_fun_data, nil)
|
tracking_fun_data = Map.get(conn.assigns, :tracking_fun_data, nil)
|
||||||
|
|
||||||
if should_cache do
|
|
||||||
@cachex.put(:web_resp_cache, key, {content_type, body, tracking_fun_data}, ttl: ttl)
|
@cachex.put(:web_resp_cache, key, {content_type, body, tracking_fun_data}, ttl: ttl)
|
||||||
end
|
|
||||||
|
|
||||||
opts.tracking_fun.(conn, tracking_fun_data)
|
opts.tracking_fun.(conn, tracking_fun_data)
|
||||||
end
|
end
|
||||||
|
4
mix.exs
4
mix.exs
@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
|
|||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :pleroma,
|
app: :pleroma,
|
||||||
version: version("2.4.3"),
|
version: version("2.4.2"),
|
||||||
elixir: "~> 1.9",
|
elixir: "~> 1.9",
|
||||||
elixirc_paths: elixirc_paths(Mix.env()),
|
elixirc_paths: elixirc_paths(Mix.env()),
|
||||||
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
||||||
@ -141,7 +141,7 @@ defmodule Pleroma.Mixfile do
|
|||||||
{:mogrify, "~> 0.7.4"},
|
{:mogrify, "~> 0.7.4"},
|
||||||
{:ex_aws, "~> 2.1.6"},
|
{:ex_aws, "~> 2.1.6"},
|
||||||
{:ex_aws_s3, "~> 2.0"},
|
{:ex_aws_s3, "~> 2.0"},
|
||||||
{:sweet_xml, "~> 0.7.2"},
|
{:sweet_xml, "~> 0.6.6"},
|
||||||
{:earmark, "1.4.15"},
|
{:earmark, "1.4.15"},
|
||||||
{:bbcode_pleroma, "~> 0.2.0"},
|
{:bbcode_pleroma, "~> 0.2.0"},
|
||||||
{:crypt,
|
{:crypt,
|
||||||
|
2
mix.lock
2
mix.lock
@ -114,7 +114,7 @@
|
|||||||
"remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]},
|
"remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]},
|
||||||
"sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"},
|
"sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"},
|
||||||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
|
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},
|
||||||
"sweet_xml": {:hex, :sweet_xml, "0.7.2", "4729f997286811fabdd8288f8474e0840a76573051062f066c4b597e76f14f9f", [:mix], [], "hexpm", "6894e68a120f454534d99045ea3325f7740ea71260bc315f82e29731d570a6e8"},
|
"sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"},
|
||||||
"swoosh": {:hex, :swoosh, "1.3.11", "34f79c57f19892b43bd2168de9ff5de478a721a26328ef59567aad4243e7a77b", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f1e2a048db454f9982b9cf840f75e7399dd48be31ecc2a7dc10012a803b913af"},
|
"swoosh": {:hex, :swoosh, "1.3.11", "34f79c57f19892b43bd2168de9ff5de478a721a26328ef59567aad4243e7a77b", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f1e2a048db454f9982b9cf840f75e7399dd48be31ecc2a7dc10012a803b913af"},
|
||||||
"syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"},
|
"syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"},
|
||||||
"telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"},
|
"telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"},
|
||||||
|
@ -291,30 +291,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
|
|||||||
assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
|
assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
|
||||||
end
|
end
|
||||||
|
|
||||||
test "does not cache authenticated response", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
reader = insert(:user)
|
|
||||||
|
|
||||||
{:ok, post} =
|
|
||||||
CommonAPI.post(user, %{status: "test @#{reader.nickname}", visibility: "local"})
|
|
||||||
|
|
||||||
object = Object.normalize(post, fetch: false)
|
|
||||||
uuid = String.split(object.data["id"], "/") |> List.last()
|
|
||||||
|
|
||||||
assert response =
|
|
||||||
conn
|
|
||||||
|> assign(:user, reader)
|
|
||||||
|> put_req_header("accept", "application/activity+json")
|
|
||||||
|> get("/objects/#{uuid}")
|
|
||||||
|
|
||||||
json_response(response, 200)
|
|
||||||
|
|
||||||
conn
|
|
||||||
|> put_req_header("accept", "application/activity+json")
|
|
||||||
|> get("/objects/#{uuid}")
|
|
||||||
|> json_response(404)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "it returns 404 for non-public messages", %{conn: conn} do
|
test "it returns 404 for non-public messages", %{conn: conn} do
|
||||||
note = insert(:direct_note)
|
note = insert(:direct_note)
|
||||||
uuid = String.split(note.data["id"], "/") |> List.last()
|
uuid = String.split(note.data["id"], "/") |> List.last()
|
||||||
|
@ -179,22 +179,4 @@ defmodule Pleroma.Web.Plugs.CacheTest do
|
|||||||
|> send_resp(:im_a_teapot, "🥤")
|
|> send_resp(:im_a_teapot, "🥤")
|
||||||
|> sent_resp()
|
|> sent_resp()
|
||||||
end
|
end
|
||||||
|
|
||||||
test "ignores if skip_cache is assigned" do
|
|
||||||
assert @miss_resp ==
|
|
||||||
conn(:get, "/")
|
|
||||||
|> assign(:skip_cache, true)
|
|
||||||
|> Cache.call(%{query_params: false, ttl: nil})
|
|
||||||
|> put_resp_content_type("cofe/hot")
|
|
||||||
|> send_resp(:ok, "cofe")
|
|
||||||
|> sent_resp()
|
|
||||||
|
|
||||||
assert @miss_resp ==
|
|
||||||
conn(:get, "/")
|
|
||||||
|> assign(:skip_cache, true)
|
|
||||||
|> Cache.call(%{query_params: false, ttl: nil})
|
|
||||||
|> put_resp_content_type("cofe/hot")
|
|
||||||
|> send_resp(:ok, "cofe")
|
|
||||||
|> sent_resp()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user