User: Don't allow local users in remote changesets
authorlain <lain@soykaf.club>
Wed, 2 Dec 2020 11:18:43 +0000 (12:18 +0100)
committerlain <lain@soykaf.club>
Tue, 22 Dec 2020 20:07:56 +0000 (21:07 +0100)
lib/pleroma/user.ex
test/pleroma/user_test.exs

index b56a5dfe20c76916cf239f61ea31dedb0bbd9508..f6ab4f666b4dc677ee1cc61e636d2a2eb5583f24 100644 (file)
@@ -461,7 +461,20 @@ defmodule Pleroma.User do
     |> validate_format(:nickname, @email_regex)
     |> validate_length(:bio, max: bio_limit)
     |> validate_length(:name, max: name_limit)
+    |> validate_inclusion(:local, [true])
     |> validate_fields(true)
+    |> validate_non_local()
+  end
+
+  defp validate_non_local(cng) do
+    local? = get_field(cng, :local)
+
+    if local? do
+      cng
+      |> add_error(:local, "User is local, can't update with this changeset.")
+    else
+      cng
+    end
   end
 
   def update_changeset(struct, params \\ %{}) do
index d8ac652af59fb562fc40a326de307139a17433a8..52dcea0b30b6c24b38ca68c0e4e2461d1ede2355 100644 (file)
@@ -877,6 +877,13 @@ defmodule Pleroma.UserTest do
         refute cs.valid?
       end)
     end
+
+    test "it is invalid given a local user" do
+      user = insert(:user)
+      cs = User.remote_user_changeset(user, %{name: "tom from myspace"})
+
+      refute cs.valid?
+    end
   end
 
   describe "followers and friends" do