Merge branch 'develop' into config-db-keys

This commit is contained in:
FloatingGhost 2023-08-17 11:07:24 +01:00
commit a5bc622970
9 changed files with 126 additions and 9 deletions

View file

@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## Fixed ## Fixed
- Documentation issue in which a non-existing nginx file was referenced - Documentation issue in which a non-existing nginx file was referenced
- Issue where a bad inbox URL could break federation
## 2023.08 ## 2023.08

View file

@ -2,7 +2,7 @@
* PostgreSQL 9.6+ * PostgreSQL 9.6+
* Elixir 1.14+ * Elixir 1.14+
* Erlang OTP 24+ * Erlang OTP 25+
* git * git
* file / libmagic * file / libmagic
* gcc (clang might also work) * gcc (clang might also work)

View file

@ -40,7 +40,7 @@ If you are on pleroma develop, and have updated since 2022-08, you may have issu
Please roll back the given migrations: Please roll back the given migrations:
```bash ```bash
MIX_ENV=prod mix ecto.rollback --migrations-path priv/repo/optional_migrations/pleroma_develop_rollbacks -n3 MIX_ENV=prod mix ecto.rollback --migrations-path priv/repo/optional_migrations/pleroma_develop_rollbacks -n5
``` ```
Then compile, migrate and restart as usual. Then compile, migrate and restart as usual.

View file

@ -115,13 +115,18 @@ defp allowed_instances do
def should_federate?(url) do def should_federate?(url) do
%{host: host} = URI.parse(url) %{host: host} = URI.parse(url)
with allowed <- allowed_instances(), with {nil, false} <- {nil, is_nil(host)},
allowed <- allowed_instances(),
false <- Enum.empty?(allowed) do false <- Enum.empty?(allowed) do
allowed allowed
|> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples()
|> Pleroma.Web.ActivityPub.MRF.subdomains_regex() |> Pleroma.Web.ActivityPub.MRF.subdomains_regex()
|> Pleroma.Web.ActivityPub.MRF.subdomain_match?(host) |> Pleroma.Web.ActivityPub.MRF.subdomain_match?(host)
else else
# oi!
{nil, true} ->
false
_ -> _ ->
quarantined_instances = quarantined_instances =
blocked_instances() blocked_instances()

View file

@ -18,16 +18,16 @@ defmodule Pleroma.Web.ActivityPub.UserView do
import Ecto.Query import Ecto.Query
def render("endpoints.json", %{user: %User{nickname: nil, local: true} = _user}) do def render("endpoints.json", %{user: %User{nickname: nil, local: true} = _user}) do
%{"sharedInbox" => ~p"/inbox"} %{"sharedInbox" => url(~p"/inbox")}
end end
def render("endpoints.json", %{user: %User{local: true} = _user}) do def render("endpoints.json", %{user: %User{local: true} = _user}) do
%{ %{
"oauthAuthorizationEndpoint" => ~p"/oauth/authorize", "oauthAuthorizationEndpoint" => url(~p"/oauth/authorize"),
"oauthRegistrationEndpoint" => ~p"/api/v1/apps", "oauthRegistrationEndpoint" => url(~p"/api/v1/apps"),
"oauthTokenEndpoint" => ~p"/oauth/token", "oauthTokenEndpoint" => url(~p"/oauth/token"),
"sharedInbox" => ~p"/inbox", "sharedInbox" => url(~p"/inbox"),
"uploadMedia" => ~p"/api/ap/upload_media" "uploadMedia" => url(~p"/api/ap/upload_media")
} }
end end

View file

@ -0,0 +1,74 @@
defmodule Pleroma.Repo.Migrations.DropUnusedIndexes do
use Ecto.Migration
@disable_ddl_transaction true
@disable_migration_lock true
def up do
drop_if_exists(
index(:activities, ["(data->>'actor')", "inserted_at desc"], name: :activities_actor_index)
)
drop_if_exists(index(:activities, ["(data->'to')"], name: :activities_to_index))
drop_if_exists(index(:activities, ["(data->'cc')"], name: :activities_cc_index))
drop_if_exists(index(:activities, ["(split_part(actor, '/', 3))"], name: :activities_hosts))
drop_if_exists(
index(:activities, ["(data->'object'->>'inReplyTo')"], name: :activities_in_reply_to)
)
drop_if_exists(
index(:activities, ["((data #> '{\"object\",\"likes\"}'))"], name: :activities_likes)
)
end
def down do
create_if_not_exists(
index(:activities, ["(data->>'actor')", "inserted_at desc"],
name: :activities_actor_index,
concurrently: true
)
)
create_if_not_exists(
index(:activities, ["(data->'to')"],
name: :activities_to_index,
using: :gin,
concurrently: true
)
)
create_if_not_exists(
index(:activities, ["(data->'cc')"],
name: :activities_cc_index,
using: :gin,
concurrently: true
)
)
create_if_not_exists(
index(:activities, ["(split_part(actor, '/', 3))"],
name: :activities_hosts,
concurrently: true
)
)
create_if_not_exists(
index(:activities, ["(data->'object'->>'inReplyTo')"],
name: :activities_in_reply_to,
concurrently: true
)
)
create_if_not_exists(
index(:activities, ["((data #> '{\"object\",\"likes\"}'))"],
name: :activities_likes,
using: :gin,
concurrently: true
)
)
end
end

View file

@ -0,0 +1,15 @@
defmodule Pleroma.Repo.Migrations.InstancesAddMetadata do
use Ecto.Migration
def down do
alter table(:instances) do
remove_if_exists(:metadata, :map)
end
end
def up do
alter table(:instances) do
add_if_not_exists(:metadata, :map)
end
end
end

View file

@ -0,0 +1,15 @@
defmodule Pleroma.Repo.Migrations.RemoveUserApEnabled do
use Ecto.Migration
def up do
alter table(:users) do
remove_if_exists(:ap_enabled, :boolean)
end
end
def down do
alter table(:users) do
add_if_not_exists(:ap_enabled, :boolean, default: true, null: false)
end
end
end

View file

@ -487,4 +487,11 @@ test "publish to url with with different ports" do
) )
end end
end end
describe "should_federate/1" do
test "should not obliterate itself if the inbox URL is bad" do
url = "/inbox"
refute Pleroma.Web.ActivityPub.Publisher.should_federate?(url)
end
end
end end