diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 5a54ab842..666464cab 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -100,7 +100,6 @@ defmodule Pleroma.User do field(:password_hash, :string) field(:password, :string, virtual: true) field(:password_confirmation, :string, virtual: true) - field(:keys, :string) field(:ap_id, :string) field(:avatar, :map, default: %{}) field(:local, :boolean, default: true) diff --git a/priv/repo/migrations/20240625220752_move_signing_keys.exs b/priv/repo/migrations/20240625220752_move_signing_keys.exs index f5569ce09..743b2585a 100644 --- a/priv/repo/migrations/20240625220752_move_signing_keys.exs +++ b/priv/repo/migrations/20240625220752_move_signing_keys.exs @@ -11,7 +11,7 @@ def up do # Also this MUST use select, else the migration will fail in future installs with new user fields! from(u in Pleroma.User, where: u.local == true, - select: {u.id, u.keys, u.ap_id} + select: {u.id, fragment("?.keys", u), u.ap_id} ) |> Repo.stream(timeout: :infinity) |> Enum.each(fn diff --git a/priv/repo/migrations/20250112000002_users_drop_legacy_key_fields.exs b/priv/repo/migrations/20250112000002_users_drop_legacy_key_fields.exs new file mode 100644 index 000000000..c65817369 --- /dev/null +++ b/priv/repo/migrations/20250112000002_users_drop_legacy_key_fields.exs @@ -0,0 +1,31 @@ +defmodule Pleroma.Repo.Migrations.UsersDropLegacyKeyFields do + use Ecto.Migration + + def up() do + alter table(:users) do + remove :keys, :text + remove :public_key, :text + end + end + + def down() do + # Using raw query since the "keys" field may not exist in the Elixir Ecto schema + # causing issues when migrating data back and this requires column adds to be raw query too + """ + ALTER TABLE public.users + ADD COLUMN keys text, + ADD COLUMN public_key text; + """ + |> Pleroma.Repo.query!([], timeout: :infinity) + + """ + UPDATE public.users AS u + SET keys = s.private_key + FROM public.signing_keys AS s + WHERE s.user_id = u.id AND + u.local AND + s.private_key IS NOT NULL; + """ + |> Pleroma.Repo.query!([], timeout: :infinity) + end +end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 39f3ee020..d69551985 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -1708,7 +1708,6 @@ test "delete/1 purges a user when they wouldn't be fully deleted" do bio: "eyy lmao", name: "qqqqqqq", password_hash: "pdfk2$1b3n159001", - keys: "RSA begin buplic key", avatar: %{"a" => "b"}, tags: ["qqqqq"], banner: %{"a" => "b"},