defmodule Pleroma.Web.CommonAPI do
- alias Pleroma.{Repo, Activity, Object}
+ alias Pleroma.{User, Repo, Activity, Object}
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Formatter
end
def update(user) do
+ user =
+ with emoji <- emoji_from_profile(user),
+ source_data <- (user.info["source_data"] || %{}) |> Map.put("tag", emoji),
+ new_info <- Map.put(user.info, "source_data", source_data),
+ change <- User.info_changeset(user, %{info: new_info}),
+ {:ok, user} <- User.update_and_set_cache(change) do
+ user
+ else
+ _e ->
+ user
+ end
+
ActivityPub.update(%{
local: true,
to: [user.follower_address],
defmodule Pleroma.Web.CommonAPI.Utils do
alias Pleroma.{Repo, Object, Formatter, Activity}
alias Pleroma.Web.ActivityPub.Utils
+ alias Pleroma.Web.Endpoint
alias Pleroma.User
alias Calendar.Strftime
alias Comeonin.Pbkdf2
_ -> {:error, "Invalid password."}
end
end
+
+ def emoji_from_profile(%{info: info} = user) do
+ (Formatter.get_emoji(user.bio) ++ Formatter.get_emoji(user.name))
+ |> Enum.map(fn {shortcode, url} ->
+ %{
+ "type" => "Emoji",
+ "icon" => %{"url" => "#{Endpoint.url()}#{url}"},
+ "name" => ":#{shortcode}:"
+ }
+ end)
+ end
end
defmodule Pleroma.Web.CommonAPI.Test do
use Pleroma.DataCase
alias Pleroma.Web.CommonAPI
+ alias Pleroma.User
import Pleroma.Factory
assert activity.data["object"]["tag"] == ["2hu"]
end
+
+ test "it adds emoji when updating profiles" do
+ user = insert(:user, %{name: ":karjalanpiirakka:"})
+
+ CommonAPI.update(user)
+ user = User.get_cached_by_ap_id(user.ap_id)
+ [karjalanpiirakka] = user.info["source_data"]["tag"]
+
+ assert karjalanpiirakka["name"] == ":karjalanpiirakka:"
+ end
end
defmodule Pleroma.Web.CommonAPI.UtilsTest do
alias Pleroma.Web.CommonAPI.Utils
+ alias Pleroma.Web.Endpoint
alias Pleroma.Builders.{UserBuilder}
use Pleroma.DataCase
assert Utils.confirm_current_password(user, "test") == {:ok, user}
end
end
+
+ test "parses emoji from name and bio" do
+ {:ok, user} = UserBuilder.insert(%{name: ":karjalanpiirakka:", bio: ":perkele:"})
+
+ expected = [
+ %{
+ "type" => "Emoji",
+ "icon" => %{"url" => "#{Endpoint.url()}/finmoji/128px/perkele-128.png"},
+ "name" => ":perkele:"
+ },
+ %{
+ "type" => "Emoji",
+ "icon" => %{"url" => "#{Endpoint.url()}/finmoji/128px/karjalanpiirakka-128.png"},
+ "name" => ":karjalanpiirakka:"
+ }
+ ]
+
+ assert expected == Utils.emoji_from_profile(user)
+ end
end