diff options
author | rinpatch <rinpatch@sdf.org> | 2019-09-14 16:39:42 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2019-09-14 16:39:42 +0000 |
commit | 62bbba80f35a7628e501c1937aecf2644a0b049b (patch) | |
tree | 746357a3b993611d414425b5103c0f885ad6e1fc /lib | |
parent | 3ae448b592214b43af1d079c997c6f6b91d31aeb (diff) | |
parent | cb99cfcc65f57f0044117ebd12d040488343d9ef (diff) | |
download | pleroma-62bbba80f35a7628e501c1937aecf2644a0b049b.tar.gz |
Merge branch 'fix/truncate-remote-user-fields' into 'develop'
Truncate remote user fields
See merge request pleroma/pleroma!1619
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 16 | ||||
-rw-r--r-- | lib/pleroma/user/info.ex | 17 |
2 files changed, 32 insertions, 1 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 5e10ac25f..64b69e686 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -174,11 +174,25 @@ defmodule Pleroma.User do |> Repo.aggregate(:count, :id) end + defp truncate_if_exists(params, key, max_length) do + if Map.has_key?(params, key) and is_binary(params[key]) do + {value, _chopped} = String.split_at(params[key], max_length) + Map.put(params, key, value) + else + params + end + end + def remote_user_creation(params) do bio_limit = Pleroma.Config.get([:instance, :user_bio_length], 5000) name_limit = Pleroma.Config.get([:instance, :user_name_length], 100) - params = Map.put(params, :info, params[:info] || %{}) + params = + params + |> Map.put(:info, params[:info] || %{}) + |> truncate_if_exists(:name, name_limit) + |> truncate_if_exists(:bio, bio_limit) + info_cng = User.Info.remote_user_creation(%User.Info{}, params[:info]) changes = diff --git a/lib/pleroma/user/info.ex b/lib/pleroma/user/info.ex index 779bfbc18..151e025de 100644 --- a/lib/pleroma/user/info.ex +++ b/lib/pleroma/user/info.ex @@ -242,6 +242,13 @@ defmodule Pleroma.User.Info do end def remote_user_creation(info, params) do + params = + if Map.has_key?(params, :fields) do + Map.put(params, :fields, Enum.map(params[:fields], &truncate_field/1)) + else + params + end + info |> cast(params, [ :ap_enabled, @@ -326,6 +333,16 @@ defmodule Pleroma.User.Info do defp valid_field?(_), do: false + defp truncate_field(%{"name" => name, "value" => value}) do + {name, _chopped} = + String.split_at(name, Pleroma.Config.get([:instance, :account_field_name_length], 255)) + + {value, _chopped} = + String.split_at(value, Pleroma.Config.get([:instance, :account_field_value_length], 255)) + + %{"name" => name, "value" => value} + end + @spec confirmation_changeset(Info.t(), keyword()) :: Changeset.t() def confirmation_changeset(info, opts) do need_confirmation? = Keyword.get(opts, :need_confirmation) |