aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-12-01 10:40:01 +0100
committerlain <lain@soykaf.club>2018-12-01 10:40:01 +0100
commit347df6421d6b1794a39ac6ce9e24a9e51e136a62 (patch)
tree5d248ec33932c595f4bd07be2f7adb2630ec2c9a /lib
parentc443c9bd72b04b8a24d904bc20fde0d4ffca71d7 (diff)
downloadpleroma-347df6421d6b1794a39ac6ce9e24a9e51e136a62.tar.gz
Fix masto api user updating.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex3
-rw-r--r--lib/pleroma/user/info.ex8
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex96
3 files changed, 51 insertions, 56 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index bed8fd1b4..a84ab6841 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -112,10 +112,9 @@ defmodule Pleroma.User do
end
end
- # TODO: Check if this still used
def update_changeset(struct, params \\ %{}) do
struct
- |> cast(params, [:bio, :name])
+ |> cast(params, [:bio, :name, :avatar])
|> unique_constraint(:nickname)
|> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
|> validate_length(:bio, max: 5000)
diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex
index a5ce6010f..8a938e514 100644
--- a/lib/pleroma/user/info.ex
+++ b/lib/pleroma/user/info.ex
@@ -128,6 +128,14 @@ defmodule Pleroma.User.Info do
])
end
+ def mastodon_profile_update(info, params) do
+ info
+ |> cast(params, [
+ :locked,
+ :banner
+ ])
+ end
+
def set_source_data(info, source_data) do
params = %{source_data: source_data}
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index f209bb43c..d19d55044 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -32,67 +32,55 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
end
end
+ defp add_if_present(
+ map,
+ params,
+ params_field,
+ map_field,
+ value_function \\ fn x -> {:ok, x} end
+ ) do
+ if Map.has_key?(params, params_field) do
+ case value_function.(params[params_field]) do
+ {:ok, new_value} -> Map.put(map, map_field, new_value)
+ :error -> map
+ end
+ else
+ map
+ end
+ end
+
def update_credentials(%{assigns: %{user: user}} = conn, params) do
original_user = user
- params =
- if bio = params["note"] do
- Map.put(params, "bio", bio)
- else
- params
- end
-
- params =
- if name = params["display_name"] do
- Map.put(params, "name", name)
- else
- params
- end
+ user_params =
+ %{}
+ |> add_if_present(params, "display_name", :name)
+ |> add_if_present(params, "note", :bio)
+ |> add_if_present(params, "avatar", :avatar, fn value ->
+ with %Plug.Upload{} <- value,
+ {:ok, object} <- ActivityPub.upload(value, type: :avatar) do
+ {:ok, object.data}
+ else
+ _ -> :error
+ end
+ end)
- user =
- if avatar = params["avatar"] do
- with %Plug.Upload{} <- avatar,
- {:ok, object} <- ActivityPub.upload(avatar, type: :avatar),
- change = Ecto.Changeset.change(user, %{avatar: object.data}),
- {:ok, user} = User.update_and_set_cache(change) do
- user
+ info_params =
+ %{}
+ |> add_if_present(params, "locked", :locked, fn value -> {:ok, value == "true"} end)
+ |> add_if_present(params, "header", :banner, fn value ->
+ with %Plug.Upload{} <- value,
+ {:ok, object} <- ActivityPub.upload(value, type: :banner) do
+ {:ok, object.data}
else
- _e -> user
+ _ -> :error
end
- else
- user
- end
+ end)
+
+ info_cng = User.Info.mastodon_profile_update(user.info, info_params)
- # user =
- # if banner = params["header"] do
- # with %Plug.Upload{} <- banner,
- # {:ok, object} <- ActivityPub.upload(banner, type: :banner),
- # new_info <- Map.put(user.info, "banner", object.data),
- # change <- User.info_changeset(user, %{info: new_info}),
- # {:ok, user} <- User.update_and_set_cache(change) do
- # user
- # else
- # _e -> user
- # end
- # else
- # user
- # end
-
- # user =
- # if locked = params["locked"] do
- # with locked <- locked == "true",
- # new_info <- Map.put(user.info, "locked", locked),
- # change <- User.info_changeset(user, %{info: new_info}),
- # {:ok, user} <- User.update_and_set_cache(change) do
- # user
- # else
- # _e -> user
- # end
- # else
- # user
- # end
-
- with changeset <- User.update_changeset(user, params),
+ with changeset <- User.update_changeset(user, user_params),
+ changeset <- Ecto.Changeset.put_embed(changeset, :info, info_cng),
{:ok, user} <- User.update_and_set_cache(changeset) do
if original_user != user do
CommonAPI.update(user)