Use changeset for remote user creation.
authorRoger Braun <roger@rogerbraun.net>
Wed, 10 May 2017 08:16:20 +0000 (10:16 +0200)
committerRoger Braun <roger@rogerbraun.net>
Wed, 10 May 2017 08:16:20 +0000 (10:16 +0200)
lib/pleroma/user.ex
lib/pleroma/web/ostatus/ostatus.ex
test/user_test.exs

index 9b2433674d87aa52939ed0d7d70989d6aaeec50d..22e77c3df092ad3e9c455abe0a8ee0fcaaad4bb0 100644 (file)
@@ -63,13 +63,14 @@ defmodule Pleroma.User do
 
   @email_regex ~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
   def remote_user_creation(params) do
-    changeset = %User{}
-    |> cast(params, [:bio, :name, :ap_id, :nickname, :info])
-    |> validate_required([:bio, :name, :ap_id, :nickname])
+    %User{}
+    |> cast(params, [:bio, :name, :ap_id, :nickname, :info, :avatar])
+    |> validate_required([:name, :ap_id, :nickname])
     |> unique_constraint(:nickname)
     |> validate_format(:nickname, @email_regex)
     |> validate_length(:bio, max: 1000)
     |> validate_length(:name, max: 100)
+    |> put_change(:local, false)
   end
 
   def register_changeset(struct, params \\ %{}) do
index 55d600ab2bee3bb4cf8914183b618fe46e5a697c..da0407aeb7d6faad2d6d184dd89e939a9e960a99 100644 (file)
@@ -211,16 +211,14 @@ defmodule Pleroma.Web.OStatus do
   def make_user(uri) do
     with {:ok, info} <- gather_user_info(uri) do
       data = %{
-        local: false,
         name: info["name"],
         nickname: info["nickname"] <> "@" <> info["host"],
         ap_id: info["uri"],
         info: info,
         avatar: info["avatar"]
       }
-      # TODO: Make remote user changeset
-      # SHould enforce fqn nickname
-      Repo.insert(Ecto.Changeset.change(%User{}, data))
+      cs = User.remote_user_creation(data)
+      Repo.insert(cs)
     end
   end
 
index bfa79db28f10613267a907c62572d8f6727fc055..b87d3186266c94d19e636c05de67e8dd94e32f21 100644 (file)
@@ -146,7 +146,8 @@ defmodule Pleroma.UserTest do
       name: "Someone",
       nickname: "a@b.de",
       ap_id: "http...",
-      info: %{ some: "info" }
+      info: %{some: "info"},
+      avatar: %{some: "avatar"}
     }
 
     test "it confirms validity" do
@@ -156,11 +157,13 @@ defmodule Pleroma.UserTest do
 
     test "it enforces the fqn format for nicknames" do
       cs = User.remote_user_creation(%{@valid_remote | nickname: "bla"})
+      assert cs.changes.local == false
+      assert cs.changes.avatar
       refute cs.valid?
     end
 
     test "it has required fields" do
-      [:bio, :name, :nickname, :ap_id]
+      [:name, :nickname, :ap_id]
       |> Enum.each(fn (field) ->
         cs = User.remote_user_creation(Map.delete(@valid_remote, field))
         refute cs.valid?