Merge remote-tracking branch 'upstream/develop' into aliases

This commit is contained in:
Alex Gleason 2020-08-07 16:35:15 -05:00
commit 1a5a7ba6e8
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
186 changed files with 4752 additions and 940 deletions

View file

@ -0,0 +1,10 @@
defmodule Pleroma.Repo.Migrations.AddApprovalFieldsToUsers do
use Ecto.Migration
def change do
alter table(:users) do
add(:approval_pending, :boolean)
add(:registration_reason, :text)
end
end
end

View file

@ -0,0 +1,36 @@
defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do
use Ecto.Migration
alias Pleroma.ConfigDB
@autolinker_path %{group: :auto_linker, key: :opts}
@linkify_path %{group: :pleroma, key: Pleroma.Formatter}
@compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra]
def change do
with {:ok, {old, new}} <- maybe_get_params() do
move_config(old, new)
end
end
defp move_config(%{} = old, %{} = new) do
{:ok, _} = ConfigDB.update_or_create(new)
{:ok, _} = ConfigDB.delete(old)
:ok
end
defp maybe_get_params() do
with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path),
opts <- transform_opts(opts),
%{} = linkify_params <- Map.put(@linkify_path, :value, opts) do
{:ok, {@autolinker_path, linkify_params}}
end
end
def transform_opts(opts) when is_list(opts) do
opts
|> Enum.into(%{})
|> Map.take(@compat_opts)
|> Map.to_list()
end
end

View file

@ -0,0 +1,26 @@
defmodule Pleroma.Repo.Migrations.FixMalformedFormatterConfig do
use Ecto.Migration
alias Pleroma.ConfigDB
@config_path %{group: :pleroma, key: Pleroma.Formatter}
def change do
with %ConfigDB{value: %{} = opts} <- ConfigDB.get_by_params(@config_path),
fixed_opts <- Map.to_list(opts) do
fix_config(fixed_opts)
else
_ -> :skipped
end
end
defp fix_config(fixed_opts) when is_list(fixed_opts) do
{:ok, _} =
ConfigDB.update_or_create(%{
group: :pleroma,
key: Pleroma.Formatter,
value: fixed_opts
})
:ok
end
end

View file

@ -0,0 +1,94 @@
defmodule Pleroma.Repo.Migrations.MoveWelcomeSettings do
use Ecto.Migration
alias Pleroma.ConfigDB
@old_keys [:welcome_user_nickname, :welcome_message]
def up do
with {:ok, config, {keep_values, move_values}} <- get_old_values() do
insert_welcome_settings(move_values)
update_instance_config(config, keep_values)
end
end
def down do
with {:ok, welcome_config, revert_values} <- get_revert_values() do
revert_instance_config(revert_values)
Pleroma.Repo.delete(welcome_config)
end
end
defp insert_welcome_settings([_ | _] = values) do
unless String.trim(values[:welcome_message]) == "" do
config_values = [
direct_message: %{
enabled: true,
sender_nickname: values[:welcome_user_nickname],
message: values[:welcome_message]
},
email: %{
enabled: false,
sender: nil,
subject: "Welcome to <%= instance_name %>",
html: "Welcome to <%= instance_name %>",
text: "Welcome to <%= instance_name %>"
}
]
{:ok, _} =
%ConfigDB{}
|> ConfigDB.changeset(%{group: :pleroma, key: :welcome, value: config_values})
|> Pleroma.Repo.insert()
end
:ok
end
defp insert_welcome_settings(_), do: :noop
defp revert_instance_config(%{} = revert_values) do
values = [
welcome_user_nickname: revert_values[:sender_nickname],
welcome_message: revert_values[:message]
]
ConfigDB.update_or_create(%{group: :pleroma, key: :instance, value: values})
end
defp revert_instance_config(_), do: :noop
defp update_instance_config(config, values) do
{:ok, _} =
config
|> ConfigDB.changeset(%{value: values})
|> Pleroma.Repo.update()
:ok
end
defp get_revert_values do
config = ConfigDB.get_by_params(%{group: :pleroma, key: :welcome})
cond do
is_nil(config) -> {:noop, nil, nil}
true -> {:ok, config, config.value[:direct_message]}
end
end
defp get_old_values do
config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance})
cond do
is_nil(config) ->
{:noop, config, {}}
is_binary(config.value[:welcome_message]) ->
{:ok, config,
{Keyword.drop(config.value, @old_keys), Keyword.take(config.value, @old_keys)}}
true ->
{:ok, config, {Keyword.drop(config.value, @old_keys), []}}
end
end
end

View file

@ -0,0 +1,37 @@
# Fix legacy tags set by AdminFE that don't align with TagPolicy MRF
defmodule Pleroma.Repo.Migrations.FixLegacyTags do
use Ecto.Migration
alias Pleroma.Repo
alias Pleroma.User
import Ecto.Query
@old_new_map %{
"force_nsfw" => "mrf_tag:media-force-nsfw",
"strip_media" => "mrf_tag:media-strip",
"force_unlisted" => "mrf_tag:force-unlisted",
"sandbox" => "mrf_tag:sandbox",
"disable_remote_subscription" => "mrf_tag:disable-remote-subscription",
"disable_any_subscription" => "mrf_tag:disable-any-subscription"
}
def change do
legacy_tags = Map.keys(@old_new_map)
from(u in User, where: fragment("? && ?", u.tags, ^legacy_tags))
|> Repo.all()
|> Enum.each(fn user ->
fix_tags_changeset(user)
|> Repo.update()
end)
end
defp fix_tags_changeset(%User{tags: tags} = user) do
new_tags =
Enum.map(tags, fn tag ->
Map.get(@old_new_map, tag, tag)
end)
Ecto.Changeset.change(user, tags: new_tags)
end
end

View file

@ -0,0 +1,19 @@
defmodule Pleroma.Repo.Migrations.RemoveNonlocalExpirations do
use Ecto.Migration
def up do
statement = """
DELETE FROM
activity_expirations A USING activities B
WHERE
A.activity_id = B.id
AND B.local = false;
"""
execute(statement)
end
def down do
:ok
end
end

View file

@ -0,0 +1,7 @@
defmodule Pleroma.Repo.Migrations.AddUniqueIndexToAppClientId do
use Ecto.Migration
def change do
create(unique_index(:apps, [:client_id]))
end
end