Unifies all the similar functions to one and simplify some blocks with it.1570-levenshtein-distance-user-search
@@ -17,14 +17,6 @@ defmodule Pleroma.Helpers.UriHelper do | |||
|> URI.to_string() | |||
end | |||
def append_param_if_present(%{} = params, param_name, param_value) do | |||
if param_value do | |||
Map.put(params, param_name, param_value) | |||
else | |||
params | |||
end | |||
end | |||
def maybe_add_base("/" <> uri, base), do: Path.join([base, uri]) | |||
def maybe_add_base(uri, _base), do: uri | |||
end |
@@ -0,0 +1,15 @@ | |||
# Pleroma: A lightweight social networking server | |||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> | |||
# SPDX-License-Identifier: AGPL-3.0-only | |||
defmodule Pleroma.Maps do | |||
def put_if_present(map, key, value, value_function \\ &{:ok, &1}) when is_map(map) do | |||
with false <- is_nil(key), | |||
false <- is_nil(value), | |||
{:ok, new_value} <- value_function.(value) do | |||
Map.put(map, key, new_value) | |||
else | |||
_ -> map | |||
end | |||
end | |||
end |
@@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
alias Pleroma.Constants | |||
alias Pleroma.Conversation | |||
alias Pleroma.Conversation.Participation | |||
alias Pleroma.Maps | |||
alias Pleroma.Notification | |||
alias Pleroma.Object | |||
alias Pleroma.Object.Containment | |||
@@ -19,7 +20,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
alias Pleroma.User | |||
alias Pleroma.Web.ActivityPub.MRF | |||
alias Pleroma.Web.ActivityPub.Transmogrifier | |||
alias Pleroma.Web.ActivityPub.Utils | |||
alias Pleroma.Web.Streamer | |||
alias Pleroma.Web.WebFinger | |||
alias Pleroma.Workers.BackgroundWorker | |||
@@ -161,12 +161,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
}) | |||
# Splice in the child object if we have one. | |||
activity = | |||
if not is_nil(object) do | |||
Map.put(activity, :object, object) | |||
else | |||
activity | |||
end | |||
activity = Maps.put_if_present(activity, :object, object) | |||
BackgroundWorker.enqueue("fetch_data_for_activity", %{"activity_id" => activity.id}) | |||
@@ -328,7 +323,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
with data <- | |||
%{"to" => to, "type" => type, "actor" => actor.ap_id, "object" => object} | |||
|> Utils.maybe_put("id", activity_id), | |||
|> Maps.put_if_present("id", activity_id), | |||
{:ok, activity} <- insert(data, local), | |||
_ <- notify_and_stream(activity), | |||
:ok <- maybe_federate(activity) do | |||
@@ -348,7 +343,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
"actor" => actor, | |||
"object" => object | |||
}, | |||
data <- Utils.maybe_put(data, "id", activity_id), | |||
data <- Maps.put_if_present(data, "id", activity_id), | |||
{:ok, activity} <- insert(data, local), | |||
_ <- notify_and_stream(activity), | |||
:ok <- maybe_federate(activity) do | |||
@@ -1225,12 +1220,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||
@spec upload(Upload.source(), keyword()) :: {:ok, Object.t()} | {:error, any()} | |||
def upload(file, opts \\ []) do | |||
with {:ok, data} <- Upload.store(file, opts) do | |||
obj_data = | |||
if opts[:actor] do | |||
Map.put(data, "actor", opts[:actor]) | |||
else | |||
data | |||
end | |||
obj_data = Maps.put_if_present(data, "actor", opts[:actor]) | |||
Repo.insert(%Object{data: obj_data}) | |||
end | |||
@@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
alias Pleroma.Activity | |||
alias Pleroma.EarmarkRenderer | |||
alias Pleroma.FollowingRelationship | |||
alias Pleroma.Maps | |||
alias Pleroma.Object | |||
alias Pleroma.Object.Containment | |||
alias Pleroma.Repo | |||
@@ -208,12 +209,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
|> Map.put("conversation", context) | |||
end | |||
defp add_if_present(map, _key, nil), do: map | |||
defp add_if_present(map, key, value) do | |||
Map.put(map, key, value) | |||
end | |||
def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachment) do | |||
attachments = | |||
Enum.map(attachment, fn data -> | |||
@@ -241,13 +236,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||
attachment_url = | |||
%{"href" => href} | |||
|> add_if_present("mediaType", media_type) | |||
|> add_if_present("type", Map.get(url || %{}, "type")) | |||
|> Maps.put_if_present("mediaType", media_type) | |||
|> Maps.put_if_present("type", Map.get(url || %{}, "type")) | |||
%{"url" => [attachment_url]} | |||
|> add_if_present("mediaType", media_type) | |||
|> add_if_present("type", data["type"]) | |||
|> add_if_present("name", data["name"]) | |||
|> Maps.put_if_present("mediaType", media_type) | |||
|> Maps.put_if_present("type", data["type"]) | |||
|> Maps.put_if_present("name", data["name"]) | |||
end) | |||
Map.put(object, "attachment", attachments) | |||
@@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
alias Ecto.UUID | |||
alias Pleroma.Activity | |||
alias Pleroma.Config | |||
alias Pleroma.Maps | |||
alias Pleroma.Notification | |||
alias Pleroma.Object | |||
alias Pleroma.Repo | |||
@@ -307,7 +308,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"cc" => cc, | |||
"context" => object.data["context"] | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
def make_emoji_reaction_data(user, object, emoji, activity_id) do | |||
@@ -477,7 +478,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"object" => followed_id, | |||
"state" => "pending" | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
def fetch_latest_follow(%User{ap_id: follower_id}, %User{ap_id: followed_id}) do | |||
@@ -546,7 +547,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"cc" => [], | |||
"context" => object.data["context"] | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
def make_announce_data( | |||
@@ -563,7 +564,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"cc" => [Pleroma.Constants.as_public()], | |||
"context" => object.data["context"] | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
def make_undo_data( | |||
@@ -582,7 +583,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"cc" => [Pleroma.Constants.as_public()], | |||
"context" => context | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
@spec add_announce_to_object(Activity.t(), Object.t()) :: | |||
@@ -627,7 +628,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"to" => [followed.ap_id], | |||
"object" => follow_activity.data | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
#### Block-related helpers | |||
@@ -650,7 +651,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
"to" => [blocked.ap_id], | |||
"object" => blocked.ap_id | |||
} | |||
|> maybe_put("id", activity_id) | |||
|> Maps.put_if_present("id", activity_id) | |||
end | |||
#### Create-related helpers | |||
@@ -871,7 +872,4 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
|> where([a, object: o], fragment("(?)->>'type' = 'Answer'", o.data)) | |||
|> Repo.all() | |||
end | |||
def maybe_put(map, _key, nil), do: map | |||
def maybe_put(map, key, value), do: Map.put(map, key, value) | |||
end |
@@ -61,13 +61,12 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do | |||
value | |||
end | |||
setting = %{ | |||
%{ | |||
group: ConfigDB.convert(group), | |||
key: ConfigDB.convert(key), | |||
value: ConfigDB.convert(merged_value) | |||
} | |||
if db, do: Map.put(setting, :db, db), else: setting | |||
|> Pleroma.Maps.put_if_present(:db, db) | |||
end) | |||
end) | |||
|> List.flatten() | |||
@@ -42,12 +42,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppController do | |||
end | |||
def create(%{body_params: params} = conn, _) do | |||
params = | |||
if params[:name] do | |||
Map.put(params, :client_name, params[:name]) | |||
else | |||
params | |||
end | |||
params = Pleroma.Maps.put_if_present(params, :client_name, params[:name]) | |||
case App.create(params) do | |||
{:ok, app} -> | |||
@@ -59,12 +54,7 @@ defmodule Pleroma.Web.AdminAPI.OAuthAppController do | |||
end | |||
def update(%{body_params: params} = conn, %{id: id}) do | |||
params = | |||
if params[:name] do | |||
Map.put(params, :client_name, params.name) | |||
else | |||
params | |||
end | |||
params = Pleroma.Maps.put_if_present(params, :client_name, params[:name]) | |||
with {:ok, app} <- App.update(id, params) do | |||
render(conn, "show.json", app: app, admin: true) | |||
@@ -99,11 +99,6 @@ defmodule Pleroma.Web.ControllerHelper do | |||
render_error(conn, :not_implemented, "Can't display this activity") | |||
end | |||
@spec put_if_exist(map(), atom() | String.t(), any) :: map() | |||
def put_if_exist(map, _key, nil), do: map | |||
def put_if_exist(map, key, value), do: Map.put(map, key, value) | |||
@doc """ | |||
Returns true if request specifies to include embedded relationships in account objects. | |||
May only be used in selected account-related endpoints; has no effect for status- or | |||
@@ -9,14 +9,12 @@ defmodule Pleroma.Web.Feed.TagController do | |||
alias Pleroma.Web.ActivityPub.ActivityPub | |||
alias Pleroma.Web.Feed.FeedView | |||
import Pleroma.Web.ControllerHelper, only: [put_if_exist: 3] | |||
def feed(conn, %{"tag" => raw_tag} = params) do | |||
{format, tag} = parse_tag(raw_tag) | |||
activities = | |||
%{"type" => ["Create"], "tag" => tag} | |||
|> put_if_exist("max_id", params["max_id"]) | |||
|> Pleroma.Maps.put_if_present("max_id", params["max_id"]) | |||
|> ActivityPub.fetch_public_activities() | |||
conn | |||
@@ -11,8 +11,6 @@ defmodule Pleroma.Web.Feed.UserController do | |||
alias Pleroma.Web.ActivityPub.ActivityPubController | |||
alias Pleroma.Web.Feed.FeedView | |||
import Pleroma.Web.ControllerHelper, only: [put_if_exist: 3] | |||
plug(Pleroma.Plugs.SetFormatPlug when action in [:feed_redirect]) | |||
action_fallback(:errors) | |||
@@ -55,7 +53,7 @@ defmodule Pleroma.Web.Feed.UserController do | |||
"type" => ["Create"], | |||
"actor_id" => user.ap_id | |||
} | |||
|> put_if_exist("max_id", params["max_id"]) | |||
|> Pleroma.Maps.put_if_present("max_id", params["max_id"]) | |||
|> ActivityPub.fetch_public_or_unlisted_activities() | |||
conn | |||
@@ -14,6 +14,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do | |||
json_response: 3 | |||
] | |||
alias Pleroma.Maps | |||
alias Pleroma.Plugs.EnsurePublicOrAuthenticatedPlug | |||
alias Pleroma.Plugs.OAuthScopesPlug | |||
alias Pleroma.Plugs.RateLimiter | |||
@@ -160,23 +161,22 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do | |||
:discoverable | |||
] | |||
|> Enum.reduce(%{}, fn key, acc -> | |||
add_if_present(acc, params, key, key, &{:ok, truthy_param?(&1)}) | |||
Maps.put_if_present(acc, key, params[key], &{:ok, truthy_param?(&1)}) | |||
end) | |||
|> add_if_present(params, :display_name, :name) | |||
|> add_if_present(params, :note, :bio) | |||
|> add_if_present(params, :avatar, :avatar) | |||
|> add_if_present(params, :header, :banner) | |||
|> add_if_present(params, :pleroma_background_image, :background) | |||
|> add_if_present( | |||
params, | |||
:fields_attributes, | |||
|> Maps.put_if_present(:name, params[:display_name]) | |||
|> Maps.put_if_present(:bio, params[:note]) | |||
|> Maps.put_if_present(:avatar, params[:avatar]) | |||
|> Maps.put_if_present(:banner, params[:header]) | |||
|> Maps.put_if_present(:background, params[:pleroma_background_image]) | |||
|> Maps.put_if_present( | |||
:raw_fields, | |||
params[:fields_attributes], | |||
&{:ok, normalize_fields_attributes(&1)} | |||
) | |||
|> add_if_present(params, :pleroma_settings_store, :pleroma_settings_store) | |||
|> add_if_present(params, :default_scope, :default_scope) | |||
|> add_if_present(params["source"], "privacy", :default_scope) | |||
|> add_if_present(params, :actor_type, :actor_type) | |||
|> Maps.put_if_present(:pleroma_settings_store, params[:pleroma_settings_store]) | |||
|> Maps.put_if_present(:default_scope, params[:default_scope]) | |||
|> Maps.put_if_present(:default_scope, params["source"]["privacy"]) | |||
|> Maps.put_if_present(:actor_type, params[:actor_type]) | |||
changeset = User.update_changeset(user, user_params) | |||
@@ -206,16 +206,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do | |||
} | |||
end | |||
defp add_if_present(map, params, params_field, map_field, value_function \\ &{:ok, &1}) do | |||
with true <- is_map(params), | |||
true <- Map.has_key?(params, params_field), | |||
{:ok, new_value} <- value_function.(Map.get(params, params_field)) do | |||
Map.put(map, map_field, new_value) | |||
else | |||
_ -> map | |||
end | |||
end | |||
defp normalize_fields_attributes(fields) do | |||
if Enum.all?(fields, &is_tuple/1) do | |||
Enum.map(fields, fn {_, v} -> v end) | |||
@@ -45,10 +45,6 @@ defmodule Pleroma.Web.MastodonAPI.AppView do | |||
defp with_vapid_key(data) do | |||
vapid_key = Application.get_env(:web_push_encryption, :vapid_details, [])[:public_key] | |||
if vapid_key do | |||
Map.put(data, "vapid_key", vapid_key) | |||
else | |||
data | |||
end | |||
Pleroma.Maps.put_if_present(data, "vapid_key", vapid_key) | |||
end | |||
end |
@@ -30,7 +30,7 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityView do | |||
defp with_media_attachments(data, _), do: data | |||
defp status_params(params) do | |||
data = %{ | |||
%{ | |||
text: params["status"], | |||
sensitive: params["sensitive"], | |||
spoiler_text: params["spoiler_text"], | |||
@@ -39,10 +39,6 @@ defmodule Pleroma.Web.MastodonAPI.ScheduledActivityView do | |||
poll: params["poll"], | |||
in_reply_to_id: params["in_reply_to_id"] | |||
} | |||
case params["media_ids"] do | |||
nil -> data | |||
media_ids -> Map.put(data, :media_ids, media_ids) | |||
end | |||
|> Pleroma.Maps.put_if_present(:media_ids, params["media_ids"]) | |||
end | |||
end |
@@ -6,6 +6,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do | |||
use Pleroma.Web, :controller | |||
alias Pleroma.Helpers.UriHelper | |||
alias Pleroma.Maps | |||
alias Pleroma.MFA | |||
alias Pleroma.Plugs.RateLimiter | |||
alias Pleroma.Registration | |||
@@ -108,7 +109,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do | |||
if redirect_uri in String.split(app.redirect_uris) do | |||
redirect_uri = redirect_uri(conn, redirect_uri) | |||
url_params = %{access_token: token.token} | |||
url_params = UriHelper.append_param_if_present(url_params, :state, params["state"]) | |||
url_params = Maps.put_if_present(url_params, :state, params["state"]) | |||
url = UriHelper.append_uri_params(redirect_uri, url_params) | |||
redirect(conn, external: url) | |||
else | |||
@@ -147,7 +148,7 @@ defmodule Pleroma.Web.OAuth.OAuthController do | |||
if redirect_uri in String.split(app.redirect_uris) do | |||
redirect_uri = redirect_uri(conn, redirect_uri) | |||
url_params = %{code: auth.token} | |||
url_params = UriHelper.append_param_if_present(url_params, :state, auth_attrs["state"]) | |||
url_params = Maps.put_if_present(url_params, :state, auth_attrs["state"]) | |||
url = UriHelper.append_uri_params(redirect_uri, url_params) | |||
redirect(conn, external: url) | |||
else | |||