From 118c572006dd96e6718035e5859aa339aa254476 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Wed, 10 May 2017 10:16:20 +0200 Subject: [PATCH] Use changeset for remote user creation. --- lib/pleroma/user.ex | 7 ++++--- lib/pleroma/web/ostatus/ostatus.ex | 6 ++---- test/user_test.exs | 7 +++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9b2433674..22e77c3df 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -63,13 +63,14 @@ def user_info(%User{} = 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 diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index 55d600ab2..da0407aeb 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -211,16 +211,14 @@ def find_or_make_user(uri) 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 diff --git a/test/user_test.exs b/test/user_test.exs index bfa79db28..b87d31862 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -146,7 +146,8 @@ test "returns an ap_followers link for a user" 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 @@ test "it confirms validity" 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?