diff options
252 files changed, 531 insertions, 203 deletions
diff --git a/config/config.exs b/config/config.exs index ccdd35777..bd8922b77 100644 --- a/config/config.exs +++ b/config/config.exs @@ -8,8 +8,6 @@ use Mix.Config # General application configuration config :pleroma, ecto_repos: [Pleroma.Repo] -config :pleroma, Pleroma.Repo, types: Pleroma.PostgresTypes - config :pleroma, Pleroma.Captcha, enabled: false, seconds_valid: 60, @@ -174,7 +172,8 @@ config :pleroma, :instance, no_attachment_links: false, welcome_user_nickname: nil, welcome_message: nil, - max_report_comment_size: 1000 + max_report_comment_size: 1000, + safe_dm_mentions: false config :pleroma, :markup, # XXX - unfortunately, inline images must be enabled by default right now, because @@ -273,8 +272,6 @@ config :pleroma, :media_proxy, config :pleroma, :chat, enabled: true -config :ecto, json_library: Jason - config :phoenix, :format_encoders, json: Jason config :pleroma, :gopher, diff --git a/docs/Differences-in-MastodonAPI-Responses.md b/docs/Differences-in-MastodonAPI-Responses.md index 14b67ca7d..d993d1383 100644 --- a/docs/Differences-in-MastodonAPI-Responses.md +++ b/docs/Differences-in-MastodonAPI-Responses.md @@ -19,6 +19,7 @@ Adding the parameter `with_muted=true` to the timeline queries will also return Has these additional fields under the `pleroma` object: - `local`: true if the post was made on the local instance. +- `conversation_id`: the ID of the conversation the status is associated with (if any) ## Attachments diff --git a/docs/config.md b/docs/config.md index 201180373..c1246ee25 100644 --- a/docs/config.md +++ b/docs/config.md @@ -101,7 +101,8 @@ config :pleroma, Pleroma.Mailer, * `no_attachment_links`: Set to true to disable automatically adding attachment link text to statuses * `welcome_message`: A message that will be send to a newly registered users as a direct message. * `welcome_user_nickname`: The nickname of the local user that sends the welcome message. -* `max_report_size`: The maximum size of the report comment (Default: `1000`) +* `max_report_comment_size`: The maximum size of the report comment (Default: `1000`) +* `safe_dm_mentions`: If set to true, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. "@friend hey i really don't like @enemy"). (Default: `false`) ## :logger * `backends`: `:console` is used to send logs to stdout, `{ExSyslogger, :ex_syslogger}` to log to syslog @@ -190,6 +191,7 @@ This section is used to configure Pleroma-FE, unless ``:managed_config`` in ``:i * `enabled`: Enables the gopher interface * `ip`: IP address to bind to * `port`: Port to bind to +* `dstport`: Port advertised in urls (optional, defaults to `port`) ## :activitypub * ``accept_blocks``: Whether to accept incoming block activities from other instances diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index de0e66681..26190df2f 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Activity do alias Pleroma.Activity alias Pleroma.Notification + alias Pleroma.Object alias Pleroma.Repo import Ecto.Query @@ -33,9 +34,41 @@ defmodule Pleroma.Activity do field(:recipients, {:array, :string}) has_many(:notifications, Notification, on_delete: :delete_all) + # Attention: this is a fake relation, don't try to preload it blindly and expect it to work! + # The foreign key is embedded in a jsonb field. + # + # To use it, you probably want to do an inner join and a preload: + # + # ``` + # |> join(:inner, [activity], o in Object, + # on: fragment("(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + # o.data, activity.data)) + # |> preload([activity, object], [object: object]) + # ``` + # + # As a convenience, Activity.with_preloaded_object() sets up an inner join and preload for the + # typical case. + has_one(:object, Object, on_delete: :nothing, foreign_key: :id) + timestamps() end + def with_preloaded_object(query) do + query + |> join( + :inner, + [activity], + o in Object, + on: + fragment( + "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + o.data, + activity.data + ) + ) + |> preload([activity, object], object: object) + end + def get_by_ap_id(ap_id) do Repo.one( from( @@ -45,10 +78,42 @@ defmodule Pleroma.Activity do ) end + def get_by_ap_id_with_object(ap_id) do + Repo.one( + from( + activity in Activity, + where: fragment("(?)->>'id' = ?", activity.data, ^to_string(ap_id)), + left_join: o in Object, + on: + fragment( + "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + o.data, + activity.data + ), + preload: [object: o] + ) + ) + end + def get_by_id(id) do Repo.get(Activity, id) end + def get_by_id_with_object(id) do + from(activity in Activity, + where: activity.id == ^id, + inner_join: o in Object, + on: + fragment( + "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + o.data, + activity.data + ), + preload: [object: o] + ) + |> Repo.one() + end + def by_object_ap_id(ap_id) do from( activity in Activity, @@ -76,7 +141,7 @@ defmodule Pleroma.Activity do ) end - def create_by_object_ap_id(ap_id) do + def create_by_object_ap_id(ap_id) when is_binary(ap_id) do from( activity in Activity, where: @@ -90,6 +155,8 @@ defmodule Pleroma.Activity do ) end + def create_by_object_ap_id(_), do: nil + def get_all_create_by_object_ap_id(ap_id) do Repo.all(create_by_object_ap_id(ap_id)) end @@ -101,8 +168,38 @@ defmodule Pleroma.Activity do def get_create_by_object_ap_id(_), do: nil - def normalize(obj) when is_map(obj), do: Activity.get_by_ap_id(obj["id"]) - def normalize(ap_id) when is_binary(ap_id), do: Activity.get_by_ap_id(ap_id) + def create_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do + from( + activity in Activity, + where: + fragment( + "coalesce((?)->'object'->>'id', (?)->>'object') = ?", + activity.data, + activity.data, + ^to_string(ap_id) + ), + where: fragment("(?)->>'type' = 'Create'", activity.data), + inner_join: o in Object, + on: + fragment( + "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + o.data, + activity.data + ), + preload: [object: o] + ) + end + + def create_by_object_ap_id_with_object(_), do: nil + + def get_create_by_object_ap_id_with_object(ap_id) do + ap_id + |> create_by_object_ap_id_with_object() + |> Repo.one() + end + + def normalize(obj) when is_map(obj), do: get_by_ap_id_with_object(obj["id"]) + def normalize(ap_id) when is_binary(ap_id), do: get_by_ap_id_with_object(ap_id) def normalize(_), do: nil def get_in_reply_to_activity(%Activity{data: %{"object" => %{"inReplyTo" => ap_id}}}) do @@ -113,7 +210,8 @@ defmodule Pleroma.Activity do def delete_by_ap_id(id) when is_binary(id) do by_object_ap_id(id) - |> Repo.delete_all(returning: true) + |> select([u], u) + |> Repo.delete_all() |> elem(1) |> Enum.find(fn %{data: %{"type" => "Create", "object" => %{"id" => ap_id}}} -> ap_id == id diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex index 9b20c7e08..afefccec5 100644 --- a/lib/pleroma/emails/admin_email.ex +++ b/lib/pleroma/emails/admin_email.ex @@ -29,9 +29,13 @@ defmodule Pleroma.AdminEmail do if length(statuses) > 0 do statuses_list_html = statuses - |> Enum.map(fn %{id: id} -> - status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, id) - "<li><a href=\"#{status_url}\">#{status_url}</li>" + |> Enum.map(fn + %{id: id} -> + status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, id) + "<li><a href=\"#{status_url}\">#{status_url}</li>" + + id when is_binary(id) -> + "<li><a href=\"#{id}\">#{id}</li>" end) |> Enum.join("\n") diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 1e4ede3f2..e3625383b 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -8,6 +8,7 @@ defmodule Pleroma.Formatter do alias Pleroma.User alias Pleroma.Web.MediaProxy + @safe_mention_regex ~r/^(\s*(?<mentions>@.+?\s+)+)(?<rest>.*)/ @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ @link_regex ~r{((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+}ui # credo:disable-for-previous-line Credo.Check.Readability.MaxLineLength @@ -45,15 +46,28 @@ defmodule Pleroma.Formatter do @doc """ Parses a text and replace plain text links with HTML. Returns a tuple with a result text, mentions, and hashtags. + + If the 'safe_mention' option is given, only consecutive mentions at the start the post are actually mentioned. """ @spec linkify(String.t(), keyword()) :: {String.t(), [{String.t(), User.t()}], [{String.t(), String.t()}]} def linkify(text, options \\ []) do options = options ++ @auto_linker_config - acc = %{mentions: MapSet.new(), tags: MapSet.new()} - {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) - {text, MapSet.to_list(mentions), MapSet.to_list(tags)} + if options[:safe_mention] && Regex.named_captures(@safe_mention_regex, text) do + %{"mentions" => mentions, "rest" => rest} = Regex.named_captures(@safe_mention_regex, text) + acc = %{mentions: MapSet.new(), tags: MapSet.new()} + + {text_mentions, %{mentions: mentions}} = AutoLinker.link_map(mentions, acc, options) + {text_rest, %{tags: tags}} = AutoLinker.link_map(rest, acc, options) + + {text_mentions <> text_rest, MapSet.to_list(mentions), MapSet.to_list(tags)} + else + acc = %{mentions: MapSet.new(), tags: MapSet.new()} + {text, %{mentions: mentions, tags: tags}} = AutoLinker.link_map(text, acc, options) + + {text, MapSet.to_list(mentions), MapSet.to_list(tags)} + end end def emojify(text) do diff --git a/lib/pleroma/gopher/server.ex b/lib/pleroma/gopher/server.ex index 6baacc566..3b9629d77 100644 --- a/lib/pleroma/gopher/server.ex +++ b/lib/pleroma/gopher/server.ex @@ -66,7 +66,8 @@ defmodule Pleroma.Gopher.Server.ProtocolHandler do def link(name, selector, type \\ 1) do address = Pleroma.Web.Endpoint.host() port = Pleroma.Config.get([:gopher, :port], 1234) - "#{type}#{name}\t#{selector}\t#{address}\t#{port}\r\n" + dstport = Pleroma.Config.get([:gopher, :dstport], port) + "#{type}#{name}\t#{selector}\t#{address}\t#{dstport}\r\n" end def render_activities(activities) do diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index e92006151..420803a8f 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -12,7 +12,7 @@ defmodule Pleroma.Instances.Instance do schema "instances" do field(:host, :string) - field(:unreachable_since, :naive_datetime) + field(:unreachable_since, :naive_datetime_usec) timestamps() end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index a98649b63..cac10f24a 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Notification do alias Pleroma.Activity alias Pleroma.Notification + alias Pleroma.Object alias Pleroma.Pagination alias Pleroma.Repo alias Pleroma.User @@ -33,7 +34,15 @@ defmodule Pleroma.Notification do Notification |> where(user_id: ^user.id) |> join(:inner, [n], activity in assoc(n, :activity)) - |> preload(:activity) + |> join(:left, [n, a], object in Object, + on: + fragment( + "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)", + object.data, + a.data + ) + ) + |> preload([n, a, o], activity: {a, object: o}) end def for_user(user, opts \\ %{}) do diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 58e46ef1d..193ae3fa8 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -14,6 +14,8 @@ defmodule Pleroma.Object do import Ecto.Query import Ecto.Changeset + require Logger + schema "objects" do field(:data, :map) @@ -38,6 +40,33 @@ defmodule Pleroma.Object do Repo.one(from(object in Object, where: fragment("(?)->>'id' = ?", object.data, ^ap_id))) end + # If we pass an Activity to Object.normalize(), we can try to use the preloaded object. + # Use this whenever possible, especially when walking graphs in an O(N) loop! + def normalize(%Activity{object: %Object{} = object}), do: object + + # Catch and log Object.normalize() calls where the Activity's child object is not + # preloaded. + def normalize(%Activity{data: %{"object" => %{"id" => ap_id}}}) do + Logger.debug( + "Object.normalize() called without preloaded object (#{ap_id}). Consider preloading the object!" + ) + + Logger.debug("Backtrace: #{inspect(Process.info(:erlang.self(), :current_stacktrace))}") + + normalize(ap_id) + end + + def normalize(%Activity{data: %{"object" => ap_id}}) do + Logger.debug( + "Object.normalize() called without preloaded object (#{ap_id}). Consider preloading the object!" + ) + + Logger.debug("Backtrace: #{inspect(Process.info(:erlang.self(), :current_stacktrace))}") + + normalize(ap_id) + end + + # Old way, try fetching the object through cache. def normalize(%{"id" => ap_id}), do: normalize(ap_id) def normalize(ap_id) when is_binary(ap_id), do: get_cached_by_ap_id(ap_id) def normalize(_), do: nil diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex index e6a51b19e..4af1bde56 100644 --- a/lib/pleroma/repo.ex +++ b/lib/pleroma/repo.ex @@ -3,7 +3,10 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Repo do - use Ecto.Repo, otp_app: :pleroma + use Ecto.Repo, + otp_app: :pleroma, + adapter: Ecto.Adapters.Postgres, + migration_timestamps: [type: :naive_datetime_usec] @doc """ Dynamically loads the repository url from the diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index c1aebfc29..41289b4d0 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -50,9 +50,10 @@ defmodule Pleroma.User do field(:local, :boolean, default: true) field(:follower_address, :string) field(:search_rank, :float, virtual: true) + field(:search_type, :integer, virtual: true) field(:tags, {:array, :string}, default: []) field(:bookmarks, {:array, :string}, default: []) - field(:last_refreshed_at, :naive_datetime) + field(:last_refreshed_at, :naive_datetime_usec) has_many(:notifications, Notification) embeds_one(:info, Pleroma.User.Info) @@ -334,10 +335,11 @@ defmodule Pleroma.User do ^followed_addresses ) ] - ] + ], + select: u ) - {1, [follower]} = Repo.update_all(q, [], returning: true) + {1, [follower]} = Repo.update_all(q, []) Enum.each(followeds, fn followed -> update_follower_count(followed) @@ -367,10 +369,11 @@ defmodule Pleroma.User do q = from(u in User, where: u.id == ^follower.id, - update: [push: [following: ^ap_followers]] + update: [push: [following: ^ap_followers]], + select: u ) - {1, [follower]} = Repo.update_all(q, [], returning: true) + {1, [follower]} = Repo.update_all(q, []) {:ok, _} = update_follower_count(followed) @@ -385,10 +388,11 @@ defmodule Pleroma.User do q = from(u in User, where: u.id == ^follower.id, - update: [pull: [following: ^ap_followers]] + update: [pull: [following: ^ap_followers]], + select: u ) - {1, [follower]} = Repo.update_all(q, [], returning: true) + {1, [follower]} = Repo.update_all(q, []) {:ok, followed} = update_follower_count(followed) @@ -636,7 +640,7 @@ defmodule Pleroma.User do users = user |> User.get_follow_requests_query() - |> join(:inner, [a], u in User, a.actor == u.ap_id) + |> join(:inner, [a], u in User, on: a.actor == u.ap_id) |> where([a, u], not fragment("? @> ?", u.following, ^[user.follower_address])) |> group_by([a, u], u.id) |> select([a, u], u) @@ -658,7 +662,8 @@ defmodule Pleroma.User do ) ] ) - |> Repo.update_all([], returning: true) + |> select([u], u) + |> Repo.update_all([]) |> case do {1, [user]} -> set_cache(user) _ -> {:error, user} @@ -678,7 +683,8 @@ defmodule Pleroma.User do ) ] ) - |> Repo.update_all([], returning: true) + |> select([u], u) + |> Repo.update_all([]) |> case do {1, [user]} -> set_cache(user) _ -> {:error, user} @@ -724,7 +730,8 @@ defmodule Pleroma.User do ) ] ) - |> Repo.update_all([], returning: true) + |> select([u], u) + |> Repo.update_all([]) |> case do {1, [user]} -> set_cache(user) _ -> {:error, user} @@ -817,31 +824,53 @@ defmodule Pleroma.User do if resolve, do: get_or_fetch(query) - fts_results = do_search(fts_search_subquery(query), for_user) - - {:ok, trigram_results} = + {:ok, results} = Repo.transaction(fn -> Ecto.Adapters.SQL.query(Repo, "select set_limit(0.25)", []) - do_search(trigram_search_subquery(query), for_user) + Repo.all(search_query(query, for_user)) end) - Enum.uniq_by(fts_results ++ trigram_results, & &1.id) + results end - defp do_search(subquery, for_user, options \\ []) do - q = - from( - s in subquery(subquery), - order_by: [desc: s.search_rank], - limit: ^(options[:limit] || 20) - ) + def search_query(query, for_user) do + fts_subquery = fts_search_subquery(query) + trigram_subquery = trigram_search_subquery(query) + union_query = from(s in trigram_subquery, union_all: ^fts_subquery) + distinct_query = from(s in subquery(union_query), order_by: s.search_type, distinct: s.id) - results = - q - |> Repo.all() - |> Enum.filter(&(&1.search_rank > 0)) + from(s in subquery(boost_search_rank_query(distinct_query, for_user)), + order_by: [desc: s.search_rank], + limit: 20 + ) + end - boost_search_results(results, for_user) + defp boost_search_rank_query(query, nil), do: query + + defp boost_search_rank_query(query, for_user) do + friends_ids = get_friends_ids(for_user) + followers_ids = get_followers_ids(for_user) + + from(u in subquery(query), + select_merge: %{ + search_rank: + fragment( + """ + CASE WHEN (?) THEN (?) * 1.3 + WHEN (?) THEN (?) * 1.2 + WHEN (?) THEN (?) * 1.1 + ELSE (?) END + """, + u.id in ^friends_ids and u.id in ^followers_ids, + u.search_rank, + u.id in ^friends_ids, + u.search_rank, + u.id in ^followers_ids, + u.search_rank, + u.search_rank + ) + } + ) end defp fts_search_subquery(term, query \\ User) do @@ -856,6 +885,7 @@ defmodule Pleroma.User do from( u in query, select_merge: %{ + search_type: ^0, search_rank: fragment( """ @@ -888,6 +918,8 @@ defmodule Pleroma.User do from( u in User, select_merge: %{ + # ^1 gives 'Postgrex expected a binary, got 1' for some weird reason + search_type: fragment("?", 1), search_rank: fragment( "similarity(?, trim(? || ' ' || coalesce(?, '')))", @@ -900,33 +932,6 @@ defmodule Pleroma.User do ) end - defp boost_search_results(results, nil), do: results - - defp boost_search_results(results, for_user) do - friends_ids = get_friends_ids(for_user) - followers_ids = get_followers_ids(for_user) - - Enum.map( - results, - fn u -> - search_rank_coef = - cond do - u.id in friends_ids -> - 1.2 - - u.id in followers_ids -> - 1.1 - - true -> - 1 - end - - Map.put(u, :search_rank, u.search_rank * search_rank_coef) - end - ) - |> Enum.sort_by(&(-&1.search_rank)) - end - def blocks_import(%User{} = blocker, blocked_identifiers) when is_list(blocked_identifiers) do Enum.map( blocked_identifiers, @@ -1105,13 +1110,15 @@ defmodule Pleroma.User do friends |> Enum.each(fn followed -> User.unfollow(user, followed) end) - query = from(a in Activity, where: a.actor == ^user.ap_id) + query = + from(a in Activity, where: a.actor == ^user.ap_id) + |> Activity.with_preloaded_object() Repo.all(query) |> Enum.each(fn activity -> case activity.data["type"] do "Create" -> - ActivityPub.delete(Object.normalize(activity.data["object"])) + ActivityPub.delete(Object.normalize(activity)) # TODO: Do something with likes, follows, repeats. _ -> diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 2470b4a71..80c64ae04 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -95,7 +95,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do :ok <- check_actor_is_active(map["actor"]), {_, true} <- {:remote_limit_error, check_remote_limit(map)}, {:ok, map} <- MRF.filter(map), - :ok <- insert_full_object(map) do + {:ok, object} <- insert_full_object(map) do {recipients, _, _} = get_recipients(map) {:ok, activity} = @@ -106,6 +106,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do recipients: recipients }) + # Splice in the child object if we have one. + activity = + if !is_nil(object) do + Map.put(activity, :object, object) + else + activity + end + Task.start(fn -> Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) end) @@ -430,6 +438,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do ), order_by: [desc: :id] ) + |> Activity.with_preloaded_object() Repo.all(query) end @@ -709,6 +718,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do defp restrict_muted_reblogs(query, _), do: query + defp maybe_preload_objects(query, %{"skip_preload" => true}), do: query + + defp maybe_preload_objects(query, _) do + query + |> Activity.with_preloaded_object() + end + def fetch_activities_query(recipients, opts \\ %{}) do base_query = from( @@ -718,6 +734,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do ) base_query + |> maybe_preload_objects(opts) |> restrict_recipients(recipients, opts["user"]) |> restrict_tag(opts) |> restrict_tag_reject(opts) @@ -940,7 +957,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do }, :ok <- Transmogrifier.contain_origin(id, params), {:ok, activity} <- Transmogrifier.handle_incoming(params) do - {:ok, Object.normalize(activity.data["object"])} + {:ok, Object.normalize(activity)} else {:error, {:reject, nil}} -> {:reject, nil} @@ -952,7 +969,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do Logger.info("Couldn't get object via AP, trying out OStatus fetching...") case OStatus.fetch_activity_from_url(id) do - {:ok, [activity | _]} -> {:ok, Object.normalize(activity.data["object"])} + {:ok, [activity | _]} -> {:ok, Object.normalize(activity)} e -> e end end diff --git a/lib/pleroma/web/activity_pub/relay.ex b/lib/pleroma/web/activity_pub/relay.ex index 01fef71b9..a7a20ca37 100644 --- a/lib/pleroma/web/activity_pub/relay.ex +++ b/lib/pleroma/web/activity_pub/relay.ex @@ -41,7 +41,7 @@ defmodule Pleroma.Web.ActivityPub.Relay do def publish(%Activity{data: %{"type" => "Create"}} = activity) do with %User{} = user <- get_actor(), - %Object{} = object <- Object.normalize(activity.data["object"]["id"]) do + %Object{} = object <- Object.normalize(activity) do ActivityPub.announce(user, object, nil, true, false) else e -> Logger.error("error: #{inspect(e)}") diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index af317245f..2e9ffe41c 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -209,12 +209,12 @@ defmodule Pleroma.Web.ActivityPub.Utils do """ def insert_full_object(%{"object" => %{"type" => type} = object_data}) when is_map(object_data) and type in @supported_object_types do - with {:ok, _} <- Object.create(object_data) do - :ok + with {:ok, object} <- Object.create(object_data) do + {:ok, object} end end - def insert_full_object(_), do: :ok + def insert_full_object(_), do: {:ok, nil} def update_object_in_activities(%{data: %{"id" => id}} = object) do # TODO diff --git a/lib/pleroma/web/activity_pub/views/object_view.ex b/lib/pleroma/web/activity_pub/views/object_view.ex index 84fa94e32..6028b773c 100644 --- a/lib/pleroma/web/activity_pub/views/object_view.ex +++ b/lib/pleroma/web/activity_pub/views/object_view.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectView do def render("object.json", %{object: %Activity{data: %{"type" => "Create"}} = activity}) do base = Pleroma.Web.ActivityPub.Utils.make_json_ld_header() - object = Object.normalize(activity.data["object"]) + object = Object.normalize(activity) additional = Transmogrifier.prepare_object(activity.data) @@ -28,7 +28,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectView do def render("object.json", %{object: %Activity{} = activity}) do base = Pleroma.Web.ActivityPub.Utils.make_json_ld_header() - object = Object.normalize(activity.data["object"]) + object = Object.normalize(activity) additional = Transmogrifier.prepare_object(activity.data) diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index b5f79c3bf..25b990677 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -6,7 +6,6 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.Activity alias Pleroma.Formatter alias Pleroma.Object - alias Pleroma.Repo alias Pleroma.ThreadMute alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub @@ -64,8 +63,9 @@ defmodule Pleroma.Web.CommonAPI do end def delete(activity_id, user) do - with %Activity{data: %{"object" => %{"id" => object_id}}} <- Repo.get(Activity, activity_id), - %Object{} = object <- Object.normalize(object_id), + with %Activity{data: %{"object" => _}} = activity <- + Activity.get_by_id_with_object(activity_id), + %Object{} = object <- Object.normalize(activity), true <- User.superuser?(user) || user.ap_id == object.data["actor"], {:ok, _} <- unpin(activity_id, user), {:ok, delete} <- ActivityPub.delete(object) do @@ -75,7 +75,7 @@ defmodule Pleroma.Web.CommonAPI do def repeat(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - object <- Object.normalize(activity.data["object"]["id"]), + object <- Object.normalize(activity), nil <- Utils.get_existing_announce(user.ap_id, object) do ActivityPub.announce(user, object) else @@ -86,7 +86,7 @@ defmodule Pleroma.Web.CommonAPI do def unrepeat(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - object <- Object.normalize(activity.data["object"]["id"]) do + object <- Object.normalize(activity) do ActivityPub.unannounce(user, object) else _ -> @@ -96,7 +96,7 @@ defmodule Pleroma.Web.CommonAPI do def favorite(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - object <- Object.normalize(activity.data["object"]["id"]), + object <- Object.normalize(activity), nil <- Utils.get_existing_like(user.ap_id, object) do ActivityPub.like(user, object) else @@ -107,7 +107,7 @@ defmodule Pleroma.Web.CommonAPI do def unfavorite(id_or_ap_id, user) do with %Activity{} = activity <- get_by_id_or_ap_id(id_or_ap_id), - object <- Object.normalize(activity.data["object"]["id"]) do + object <- Object.normalize(activity) do ActivityPub.unlike(user, object) else _ -> @@ -142,7 +142,8 @@ defmodule Pleroma.Web.CommonAPI do make_content_html( status, attachments, - data + data, + visibility ), {to, cc} <- to_for_user_and_mentions(user, mentions, in_reply_to, visibility), context <- make_context(in_reply_to), diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index b7513ef28..f596f703b 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -17,13 +17,14 @@ defmodule Pleroma.Web.CommonAPI.Utils do # This is a hack for twidere. def get_by_id_or_ap_id(id) do - activity = Repo.get(Activity, id) || Activity.get_create_by_object_ap_id(id) + activity = + Activity.get_by_id_with_object(id) || Activity.get_create_by_object_ap_id_with_object(id) activity && if activity.data["type"] == "Create" do activity else - Activity.get_create_by_object_ap_id(activity.data["object"]) + Activity.get_create_by_object_ap_id_with_object(activity.data["object"]) end end @@ -101,7 +102,8 @@ defmodule Pleroma.Web.CommonAPI.Utils do def make_content_html( status, attachments, - data + data, + visibility ) do no_attachment_links = data @@ -110,8 +112,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do content_type = get_content_type(data["content_type"]) + options = + if visibility == "direct" && Config.get([:instance, :safe_dm_mentions]) do + [safe_mention: true] + else + [] + end + status - |> format_input(content_type) + |> format_input(content_type, options) |> maybe_add_attachments(attachments, no_attachment_links) |> maybe_add_nsfw_tag(data) end @@ -294,10 +303,10 @@ defmodule Pleroma.Web.CommonAPI.Utils do def maybe_notify_mentioned_recipients( recipients, - %Activity{data: %{"to" => _to, "type" => type} = data} = _activity + %Activity{data: %{"to" => _to, "type" => type} = data} = activity ) when type == "Create" do - object = Object.normalize(data["object"]) + object = Object.normalize(activity) object_data = cond do @@ -344,4 +353,33 @@ defmodule Pleroma.Web.CommonAPI.Utils do end def get_report_statuses(_, _), do: {:ok, nil} + + # DEPRECATED mostly, context objects are now created at insertion time. + def context_to_conversation_id(context) do + with %Object{id: id} <- Object.get_cached_by_ap_id(context) do + id + else + _e -> + changeset = Object.context_mapping(context) + + case Repo.insert(changeset) do + {:ok, %{id: id}} -> + id + + # This should be solved by an upsert, but it seems ecto + # has problems accessing the constraint inside the jsonb. + {:error, _} -> + Object.get_cached_by_ap_id(context).id + end + end + end + + def conversation_id_to_context(id) do + with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do + context + else + _e -> + {:error, "No such conversation"} + end + end end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 209119dd5..1ca8338cc 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -46,6 +46,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end end + defp get_context_id(%{data: %{"context_id" => context_id}}) when not is_nil(context_id), + do: context_id + + defp get_context_id(%{data: %{"context" => context}}) when is_binary(context), + do: Utils.context_to_conversation_id(context) + + defp get_context_id(_), do: nil + def render("index.json", opts) do replied_to_activities = get_replied_to_activities(opts.activities) @@ -186,7 +194,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do language: nil, emojis: build_emojis(activity.data["object"]["emoji"]), pleroma: %{ - local: activity.local + local: activity.local, + conversation_id: get_context_id(activity) } } end diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 8c775ce24..216a962bd 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -124,6 +124,9 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do end, if Keyword.get(instance, :allow_relay) do "relay" + end, + if Keyword.get(instance, :safe_dm_mentions) do + "safe_dm_mentions" end ] |> Enum.filter(& &1) diff --git a/lib/pleroma/web/oauth/authorization.ex b/lib/pleroma/web/oauth/authorization.ex index a80543adf..3461f9983 100644 --- a/lib/pleroma/web/oauth/authorization.ex +++ b/lib/pleroma/web/oauth/authorization.ex @@ -16,7 +16,7 @@ defmodule Pleroma.Web.OAuth.Authorization do schema "oauth_authorizations" do field(:token, :string) field(:scopes, {:array, :string}, default: []) - field(:valid_until, :naive_datetime) + field(:valid_until, :naive_datetime_usec) field(:used, :boolean, default: false) belongs_to(:user, Pleroma.User, type: Pleroma.FlakeId) belongs_to(:app, App) diff --git a/lib/pleroma/web/oauth/token.ex b/lib/pleroma/web/oauth/token.ex index 2b074b470..a8b06db36 100644 --- a/lib/pleroma/web/oauth/token.ex +++ b/lib/pleroma/web/oauth/token.ex @@ -17,7 +17,7 @@ defmodule Pleroma.Web.OAuth.Token do field(:token, :string) field(:refresh_token, :string) field(:scopes, {:array, :string}, default: []) - field(:valid_until, :naive_datetime) + field(:valid_until, :naive_datetime_usec) belongs_to(:user, Pleroma.User, type: Pleroma.FlakeId) belongs_to(:app, App) diff --git a/lib/pleroma/web/ostatus/handlers/note_handler.ex b/lib/pleroma/web/ostatus/handlers/note_handler.ex index 770a71a0a..db995ec77 100644 --- a/lib/pleroma/web/ostatus/handlers/note_handler.ex +++ b/lib/pleroma/web/ostatus/handlers/note_handler.ex @@ -106,7 +106,7 @@ defmodule Pleroma.Web.OStatus.NoteHandler do # TODO: Clean this up a bit. def handle_note(entry, doc \\ nil) do with id <- XML.string_from_xpath("//id", entry), - activity when is_nil(activity) <- Activity.get_create_by_object_ap_id(id), + activity when is_nil(activity) <- Activity.get_create_by_object_ap_id_with_object(id), [author] <- :xmerl_xpath.string('//author[1]', doc), {:ok, actor} <- OStatus.find_make_or_update_user(author), content_html <- OStatus.get_content(entry), diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index 266f86bf4..9a34d7ad5 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -23,8 +23,8 @@ defmodule Pleroma.Web.OStatus do alias Pleroma.Web.WebFinger alias Pleroma.Web.Websub - def is_representable?(%Activity{data: data}) do - object = Object.normalize(data["object"]) + def is_representable?(%Activity{} = activity) do + object = Object.normalize(activity) cond do is_nil(object) -> @@ -119,7 +119,7 @@ defmodule Pleroma.Web.OStatus do def make_share(entry, doc, retweeted_activity) do with {:ok, actor} <- find_make_or_update_user(doc), - %Object{} = object <- Object.normalize(retweeted_activity.data["object"]), + %Object{} = object <- Object.normalize(retweeted_activity), id when not is_nil(id) <- string_from_xpath("/entry/id", entry), {:ok, activity, _object} = ActivityPub.announce(actor, object, id, false) do {:ok, activity} @@ -137,7 +137,7 @@ defmodule Pleroma.Web.OStatus do def make_favorite(entry, doc, favorited_activity) do with {:ok, actor} <- find_make_or_update_user(doc), - %Object{} = object <- Object.normalize(favorited_activity.data["object"]), + %Object{} = object <- Object.normalize(favorited_activity), id when not is_nil(id) <- string_from_xpath("/entry/id", entry), {:ok, activity, _object} = ActivityPub.like(actor, object, id, false) do {:ok, activity} @@ -159,7 +159,7 @@ defmodule Pleroma.Web.OStatus do Logger.debug("Trying to get entry from db") with id when not is_nil(id) <- string_from_xpath("//activity:object[1]/id", entry), - %Activity{} = activity <- Activity.get_create_by_object_ap_id(id) do + %Activity{} = activity <- Activity.get_create_by_object_ap_id_with_object(id) do {:ok, activity} else _ -> diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex index 0579a5f3d..2fb6ce41b 100644 --- a/lib/pleroma/web/ostatus/ostatus_controller.ex +++ b/lib/pleroma/web/ostatus/ostatus_controller.ex @@ -102,7 +102,8 @@ defmodule Pleroma.Web.OStatus.OStatusController do ActivityPubController.call(conn, :object) else with id <- o_status_url(conn, :object, uuid), - {_, %Activity{} = activity} <- {:activity, Activity.get_create_by_object_ap_id(id)}, + {_, %Activity{} = activity} <- + {:activity, Activity.get_create_by_object_ap_id_with_object(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)}, %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do case get_format(conn) do @@ -148,13 +149,13 @@ defmodule Pleroma.Web.OStatus.OStatusController do end def notice(conn, %{"id" => id}) do - with {_, %Activity{} = activity} <- {:activity, Activity.get_by_id(id)}, + with {_, %Activity{} = activity} <- {:activity, Activity.get_by_id_with_object(id)}, {_, true} <- {:public?, Visibility.is_public?(activity)}, %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do case format = get_format(conn) do "html" -> if activity.data["type"] == "Create" do - %Object{} = object = Object.normalize(activity.data["object"]) + %Object{} = object = Object.normalize(activity) Fallback.RedirectController.redirector_with_meta(conn, %{ activity_id: activity.id, @@ -191,9 +192,9 @@ defmodule Pleroma.Web.OStatus.OStatusController do # Returns an HTML embedded <audio> or <video> player suitable for embed iframes. def notice_player(conn, %{"id" => id}) do - with %Activity{data: %{"type" => "Create"}} = activity <- Activity.get_by_id(id), + with %Activity{data: %{"type" => "Create"}} = activity <- Activity.get_by_id_with_object(id), true <- Visibility.is_public?(activity), - %Object{} = object <- Object.normalize(activity.data["object"]), + %Object{} = object <- Object.normalize(activity), %{data: %{"attachment" => [%{"url" => [url | _]} | _]}} <- object, true <- String.starts_with?(url["mediaType"], ["audio", "video"]) do conn @@ -219,7 +220,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do %Activity{data: %{"type" => "Create"}} = activity, _user ) do - object = Object.normalize(activity.data["object"]) + object = Object.normalize(activity) conn |> put_resp_header("content-type", "application/activity+json") diff --git a/lib/pleroma/web/rich_media/helpers.ex b/lib/pleroma/web/rich_media/helpers.ex index 92c61ff51..f67aaf58b 100644 --- a/lib/pleroma/web/rich_media/helpers.ex +++ b/lib/pleroma/web/rich_media/helpers.ex @@ -21,9 +21,9 @@ defmodule Pleroma.Web.RichMedia.Helpers do defp validate_page_url(%URI{}), do: :ok defp validate_page_url(_), do: :error - def fetch_data_for_activity(%Activity{} = activity) do + def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do with true <- Pleroma.Config.get([:rich_media, :enabled]), - %Object{} = object <- Object.normalize(activity.data["object"]), + %Object{} = object <- Object.normalize(activity), {:ok, page_url} <- HTML.extract_first_external_url(object, object.data["content"]), :ok <- validate_page_url(page_url), {:ok, rich_media} <- Parser.parse(page_url) do @@ -32,4 +32,6 @@ defmodule Pleroma.Web.RichMedia.Helpers do _ -> %{} end end + + def fetch_data_for_activity(_), do: %{} end diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index 7425bfb54..592749b42 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -202,7 +202,7 @@ defmodule Pleroma.Web.Streamer do mutes = user.info.mutes || [] reblog_mutes = user.info.muted_reblogs || [] - parent = Object.normalize(item.data["object"]) + parent = Object.normalize(item) unless is_nil(parent) or item.actor in blocks or item.actor in mutes or item.actor in reblog_mutes or not ActivityPub.contain_activity(item, user) or diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 320ec778c..faa733fec 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -197,7 +197,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do vapidPublicKey: vapid_public_key, accountActivationRequired: if(Keyword.get(instance, :account_activation_required, false), do: "1", else: "0"), - invitesEnabled: if(Keyword.get(instance, :invites_enabled, false), do: "1", else: "0") + invitesEnabled: if(Keyword.get(instance, :invites_enabled, false), do: "1", else: "0"), + safeDMMentionsEnabled: + if(Pleroma.Config.get([:instance, :safe_dm_mentions]), do: "1", else: "0") } pleroma_fe = diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index d57100491..9978c7f64 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -5,7 +5,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do alias Pleroma.Activity alias Pleroma.Mailer - alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User alias Pleroma.UserEmail @@ -282,35 +281,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do _activities = Repo.all(q) end - # DEPRECATED mostly, context objects are now created at insertion time. - def context_to_conversation_id(context) do - with %Object{id: id} <- Object.get_cached_by_ap_id(context) do - id - else - _e -> - changeset = Object.context_mapping(context) - - case Repo.insert(changeset) do - {:ok, %{id: id}} -> - id - - # This should be solved by an upsert, but it seems ecto - # has problems accessing the constraint inside the jsonb. - {:error, _} -> - Object.get_cached_by_ap_id(context).id - end - end - end - - def conversation_id_to_context(id) do - with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do - context - else - _e -> - {:error, "No such conversation"} - end - end - def get_external_profile(for_user, uri) do with %User{} = user <- User.get_or_fetch(uri) do {:ok, UserView.render("show.json", %{user: user, for: for_user})} diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 6ea0b110b..62cce18dc 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -16,6 +16,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.CommonAPI + alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.OAuth.Token alias Pleroma.Web.TwitterAPI.ActivityView alias Pleroma.Web.TwitterAPI.NotificationView @@ -278,7 +279,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do end def fetch_conversation(%{assigns: %{user: user}} = conn, %{"id" => id}) do - with context when is_binary(context) <- TwitterAPI.conversation_id_to_context(id), + with context when is_binary(context) <- Utils.conversation_id_to_context(id), activities <- ActivityPub.fetch_activities_for_context(context, %{ "blocking_user" => user, diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index 4926f007e..aa1d41fa2 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -15,7 +15,6 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.TwitterAPI.ActivityView alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter - alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.Web.TwitterAPI.UserView import Ecto.Query @@ -78,7 +77,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do defp get_context_id(%{data: %{"context" => context}}, options) do cond do id = options[:context_ids][context] -> id - true -> TwitterAPI.context_to_conversation_id(context) + true -> Utils.context_to_conversation_id(context) end end @@ -267,6 +266,8 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do content |> String.replace(~r/<br\s?\/?>/, "\n") |> HTML.get_cached_stripped_html_for_object(activity, __MODULE__) + else + "" end reply_parent = Activity.get_in_reply_to_activity(activity) diff --git a/lib/pleroma/web/websub/websub_client_subscription.ex b/lib/pleroma/web/websub/websub_client_subscription.ex index 969ee0684..77703c496 100644 --- a/lib/pleroma/web/websub/websub_client_subscription.ex +++ b/lib/pleroma/web/websub/websub_client_subscription.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.Websub.WebsubClientSubscription do schema "websub_client_subscriptions" do field(:topic, :string) field(:secret, :string) - field(:valid_until, :naive_datetime) + field(:valid_until, :naive_datetime_usec) field(:state, :string) field(:subscribers, {:array, :string}, default: []) field(:hub, :string) @@ -62,7 +62,8 @@ defmodule Pleroma.Mixfile do {:phoenix, "~> 1.4.1"}, {:plug_cowboy, "~> 2.0"}, {:phoenix_pubsub, "~> 1.1"}, - {:phoenix_ecto, "~> 3.3"}, + {:phoenix_ecto, "~> 4.0"}, + {:ecto_sql, "~>3.0.5"}, {:postgrex, ">= 0.13.5"}, {:gettext, "~> 0.15"}, {:comeonin, "~> 4.1.1"}, @@ -13,10 +13,11 @@ "cowlib": {:hex, :cowlib, "2.7.0", "3ef16e77562f9855a2605900cedb15c1462d76fb1be6a32fc3ae91973ee543d2", [:rebar3], [], "hexpm"}, "credo": {:hex, :credo, "0.9.3", "76fa3e9e497ab282e0cf64b98a624aa11da702854c52c82db1bf24e54ab7c97a", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:poison, ">= 0.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt", "1f2b58927ab57e72910191a7ebaeff984382a1d3", [ref: "1f2b58927ab57e72910191a7ebaeff984382a1d3"]}, - "db_connection": {:hex, :db_connection, "1.1.3", "89b30ca1ef0a3b469b1c779579590688561d586694a3ce8792985d4d7e575a61", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"}, + "db_connection": {:hex, :db_connection, "2.0.5", "ddb2ba6761a08b2bb9ca0e7d260e8f4dd39067426d835c24491a321b7f92a4da", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"}, "decimal": {:hex, :decimal, "1.7.0", "30d6b52c88541f9a66637359ddf85016df9eb266170d53105f02e4a67e00c5aa", [:mix], [], "hexpm"}, "earmark": {:hex, :earmark, "1.3.0", "17f0c38eaafb4800f746b457313af4b2442a8c2405b49c645768680f900be603", [:mix], [], "hexpm"}, - "ecto": {:hex, :ecto, "2.2.11", "4bb8f11718b72ba97a2696f65d247a379e739a0ecabf6a13ad1face79844791c", [:mix], [{:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: true]}, {:decimal, "~> 1.2", [hex: :decimal, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.8.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:poolboy, "~> 1.5", [hex: :poolboy, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:sbroker, "~> 1.0", [hex: :sbroker, repo: "hexpm", optional: true]}], "hexpm"}, + "ecto": {:hex, :ecto, "3.0.7", "44dda84ac6b17bbbdeb8ac5dfef08b7da253b37a453c34ab1a98de7f7e5fec7f", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"}, + "ecto_sql": {:hex, :ecto_sql, "3.0.5", "7e44172b4f7aca4469f38d7f6a3da394dbf43a1bcf0ca975e958cb957becd74e", [:mix], [{:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.0.6", [hex: :ecto, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.9.1", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.14.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, "eternal": {:hex, :eternal, "1.2.0", "e2a6b6ce3b8c248f7dc31451aefca57e3bdf0e48d73ae5043229380a67614c41", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.0", "b92651527d6c09c479f9013caa9c7331f19cba38a650590d82ebf2c6c16a1d8a", [:mix], [{:configparser_ex, "~> 2.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "1.6.3 or 1.6.5 or 1.7.1 or 1.8.6 or ~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0", [hex: :poison, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:xml_builder, "~> 0.1.0", [hex: :xml_builder, repo: "hexpm", optional: true]}], "hexpm"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.0.1", "9e09366e77f25d3d88c5393824e613344631be8db0d1839faca49686e99b6704", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm"}, @@ -46,7 +47,7 @@ "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.3", "6706a148809a29c306062862c803406e88f048277f6e85b68faf73291e820b84", [:mix], [], "hexpm"}, "phoenix": {:hex, :phoenix, "1.4.1", "801f9d632808657f1f7c657c8bbe624caaf2ba91429123ebe3801598aea4c3d9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "3.3.0", "702f6e164512853d29f9d20763493f2b3bcfcb44f118af2bc37bb95d0801b480", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, "phoenix_html": {:hex, :phoenix_html, "2.13.1", "fa8f034b5328e2dfa0e4131b5569379003f34bc1fafdaa84985b0b9d2f12e68b", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.1.1", "6668d787e602981f24f17a5fbb69cc98f8ab085114ebfac6cc36e10a90c8e93c", [:mix], [], "hexpm"}, "plug": {:hex, :plug, "1.7.2", "d7b7db7fbd755e8283b6c0a50be71ec0a3d67d9213d74422d9372effc8e87fd1", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}], "hexpm"}, @@ -54,11 +55,12 @@ "plug_crypto": {:hex, :plug_crypto, "1.0.0", "18e49317d3fa343f24620ed22795ec29d4a5e602d52d1513ccea0b07d8ea7d4d", [:mix], [], "hexpm"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm"}, - "postgrex": {:hex, :postgrex, "0.13.5", "3d931aba29363e1443da167a4b12f06dcd171103c424de15e5f3fc2ba3e6d9c5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"}, + "postgrex": {:hex, :postgrex, "0.14.1", "63247d4a5ad6b9de57a0bac5d807e1c32d41e39c04b8a4156a26c63bcd8a2e49", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, "ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm"}, "swoosh": {:hex, :swoosh, "0.20.0", "9a6c13822c9815993c03b6f8fccc370fcffb3c158d9754f67b1fdee6b3a5d928", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.12", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm"}, "syslog": {:git, "https://github.com/Vagabond/erlang-syslog.git", "4a6c6f2c996483e86c1320e9553f91d337bcb6aa", [tag: "1.0.5"]}, + "telemetry": {:hex, :telemetry, "0.3.0", "099a7f3ce31e4780f971b4630a3c22ec66d22208bc090fe33a2a3a6a67754a73", [:rebar3], [], "hexpm"}, "tesla": {:hex, :tesla, "1.2.1", "864783cc27f71dd8c8969163704752476cec0f3a51eb3b06393b3971dc9733ff", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "~> 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"}, "timex": {:hex, :timex, "3.5.0", "b0a23167da02d0fe4f1a4e104d1f929a00d348502b52432c05de875d0b9cffa5", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 0.1.8 or ~> 0.5", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, diff --git a/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs b/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs index f42782840..89d3af7ae 100644 --- a/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs +++ b/priv/repo/migrations/20170426154155_create_websub_client_subscription.exs @@ -5,7 +5,7 @@ defmodule Pleroma.Repo.Migrations.CreateWebsubClientSubscription do create table(:websub_client_subscriptions) do add :topic, :string add :secret, :string - add :valid_until, :naive_datetime + add :valid_until, :naive_datetime_usec add :state, :string add :subscribers, :map diff --git a/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs b/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs index b4332870e..ead1d023e 100644 --- a/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs +++ b/priv/repo/migrations/20170906143140_create_o_auth_authorizations.exs @@ -6,7 +6,7 @@ defmodule Pleroma.Repo.Migrations.CreateOAuthAuthorizations do add :app_id, references(:apps) add :user_id, references(:users) add :token, :string - add :valid_until, :naive_datetime + add :valid_until, :naive_datetime_usec add :used, :boolean, default: false timestamps() diff --git a/priv/repo/migrations/20170906152508_create_o_auth_token.exs b/priv/repo/migrations/20170906152508_create_o_auth_token.exs index 7f8550f33..ed56bbf36 100644 --- a/priv/repo/migrations/20170906152508_create_o_auth_token.exs +++ b/priv/repo/migrations/20170906152508_create_o_auth_token.exs @@ -7,7 +7,7 @@ defmodule Pleroma.Repo.Migrations.CreateOAuthToken do add :user_id, references(:users) add :token, :string add :refresh_token, :string - add :valid_until, :naive_datetime + add :valid_until, :naive_datetime_usec timestamps() end diff --git a/priv/repo/migrations/20180813003722_create_filters.exs b/priv/repo/migrations/20180813003722_create_filters.exs index a273004ee..8e7129f34 100644 --- a/priv/repo/migrations/20180813003722_create_filters.exs +++ b/priv/repo/migrations/20180813003722_create_filters.exs @@ -8,7 +8,7 @@ defmodule Pleroma.Repo.Migrations.CreateFilters do add :hide, :boolean add :phrase, :string add :context, {:array, :string} - add :expires_at, :datetime + add :expires_at, :utc_datetime add :whole_word, :boolean timestamps() diff --git a/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs index 1942e4e9c..815177e05 100644 --- a/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs +++ b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs @@ -3,7 +3,7 @@ defmodule Pleroma.Repo.Migrations.UsersAddLastRefreshedAt do def change do alter table(:users) do - add :last_refreshed_at, :naive_datetime + add :last_refreshed_at, :naive_datetime_usec end end end diff --git a/priv/repo/migrations/20190123125546_create_instances.exs b/priv/repo/migrations/20190123125546_create_instances.exs index b527ad7ec..3d23b343e 100644 --- a/priv/repo/migrations/20190123125546_create_instances.exs +++ b/priv/repo/migrations/20190123125546_create_instances.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Repo.Migrations.CreateInstances do def change do create table(:instances) do add :host, :string - add :unreachable_since, :naive_datetime + add :unreachable_since, :naive_datetime_usec timestamps() end diff --git a/priv/static/emoji/Firefox.gif b/priv/static/emoji/Firefox.gif Binary files differindex 27e29b97a..81561d94b 100644 --- a/priv/static/emoji/Firefox.gif +++ b/priv/static/emoji/Firefox.gif diff --git a/priv/static/emoji/blank.png b/priv/static/emoji/blank.png Binary files differindex 175a1d412..8f50fa023 100644 --- a/priv/static/emoji/blank.png +++ b/priv/static/emoji/blank.png diff --git a/priv/static/emoji/f_00b.png b/priv/static/emoji/f_00b.png Binary files differindex 8c0f8b7e8..3d00b89b0 100644 --- a/priv/static/emoji/f_00b.png +++ b/priv/static/emoji/f_00b.png diff --git a/priv/static/emoji/f_00b11b.png b/priv/static/emoji/f_00b11b.png Binary files differindex 408b8fdd3..3e99ce464 100644 --- a/priv/static/emoji/f_00b11b.png +++ b/priv/static/emoji/f_00b11b.png diff --git a/priv/static/emoji/f_00b33b.png b/priv/static/emoji/f_00b33b.png Binary files differindex 7926f497c..8f4929297 100644 --- a/priv/static/emoji/f_00b33b.png +++ b/priv/static/emoji/f_00b33b.png diff --git a/priv/static/emoji/f_00h.png b/priv/static/emoji/f_00h.png Binary files differindex a8e26b330..ba3da57c6 100644 --- a/priv/static/emoji/f_00h.png +++ b/priv/static/emoji/f_00h.png diff --git a/priv/static/emoji/f_00t.png b/priv/static/emoji/f_00t.png Binary files differindex 5b78986f7..31d98b433 100644 --- a/priv/static/emoji/f_00t.png +++ b/priv/static/emoji/f_00t.png diff --git a/priv/static/emoji/f_01b.png b/priv/static/emoji/f_01b.png Binary files differindex 13359359e..7bd2582c5 100644 --- a/priv/static/emoji/f_01b.png +++ b/priv/static/emoji/f_01b.png diff --git a/priv/static/emoji/f_03b.png b/priv/static/emoji/f_03b.png Binary files differindex ab95f9b28..9e4ff1bf7 100644 --- a/priv/static/emoji/f_03b.png +++ b/priv/static/emoji/f_03b.png diff --git a/priv/static/emoji/f_10b.png b/priv/static/emoji/f_10b.png Binary files differindex b57b5b3b2..67c6493fc 100644 --- a/priv/static/emoji/f_10b.png +++ b/priv/static/emoji/f_10b.png diff --git a/priv/static/emoji/f_11b.png b/priv/static/emoji/f_11b.png Binary files differindex dcdb61ea4..b53328ba9 100644 --- a/priv/static/emoji/f_11b.png +++ b/priv/static/emoji/f_11b.png diff --git a/priv/static/emoji/f_11b00b.png b/priv/static/emoji/f_11b00b.png Binary files differindex 48e487dff..c4c30e11f 100644 --- a/priv/static/emoji/f_11b00b.png +++ b/priv/static/emoji/f_11b00b.png diff --git a/priv/static/emoji/f_11b22b.png b/priv/static/emoji/f_11b22b.png Binary files differindex a1f09b063..47425e06e 100644 --- a/priv/static/emoji/f_11b22b.png +++ b/priv/static/emoji/f_11b22b.png diff --git a/priv/static/emoji/f_11h.png b/priv/static/emoji/f_11h.png Binary files differindex 59a86c98e..28342363a 100644 --- a/priv/static/emoji/f_11h.png +++ b/priv/static/emoji/f_11h.png diff --git a/priv/static/emoji/f_11t.png b/priv/static/emoji/f_11t.png Binary files differindex 8a31379b1..dca67dc70 100644 --- a/priv/static/emoji/f_11t.png +++ b/priv/static/emoji/f_11t.png diff --git a/priv/static/emoji/f_12b.png b/priv/static/emoji/f_12b.png Binary files differindex 99481725e..9925adb7c 100644 --- a/priv/static/emoji/f_12b.png +++ b/priv/static/emoji/f_12b.png diff --git a/priv/static/emoji/f_21b.png b/priv/static/emoji/f_21b.png Binary files differindex d6f6e2131..aa56d2cb2 100644 --- a/priv/static/emoji/f_21b.png +++ b/priv/static/emoji/f_21b.png diff --git a/priv/static/emoji/f_22b.png b/priv/static/emoji/f_22b.png Binary files differindex e90a407d9..426878986 100644 --- a/priv/static/emoji/f_22b.png +++ b/priv/static/emoji/f_22b.png diff --git a/priv/static/emoji/f_22b11b.png b/priv/static/emoji/f_22b11b.png Binary files differindex ca25cf1af..4bdfb3107 100644 --- a/priv/static/emoji/f_22b11b.png +++ b/priv/static/emoji/f_22b11b.png diff --git a/priv/static/emoji/f_22b33b.png b/priv/static/emoji/f_22b33b.png Binary files differindex ec4760ca1..adf94f811 100644 --- a/priv/static/emoji/f_22b33b.png +++ b/priv/static/emoji/f_22b33b.png diff --git a/priv/static/emoji/f_22h.png b/priv/static/emoji/f_22h.png Binary files differindex c82c9179b..3b27e2de8 100644 --- a/priv/static/emoji/f_22h.png +++ b/priv/static/emoji/f_22h.png diff --git a/priv/static/emoji/f_22t.png b/priv/static/emoji/f_22t.png Binary files differindex 2a858a6f3..addd9fec7 100644 --- a/priv/static/emoji/f_22t.png +++ b/priv/static/emoji/f_22t.png diff --git a/priv/static/emoji/f_23b.png b/priv/static/emoji/f_23b.png Binary files differindex 551598a24..beb69ab36 100644 --- a/priv/static/emoji/f_23b.png +++ b/priv/static/emoji/f_23b.png diff --git a/priv/static/emoji/f_30b.png b/priv/static/emoji/f_30b.png Binary files differindex f2cb32978..41dbb2a5d 100644 --- a/priv/static/emoji/f_30b.png +++ b/priv/static/emoji/f_30b.png diff --git a/priv/static/emoji/f_32b.png b/priv/static/emoji/f_32b.png Binary files differindex 5646a0fcd..d8261e8a8 100644 --- a/priv/static/emoji/f_32b.png +++ b/priv/static/emoji/f_32b.png diff --git a/priv/static/emoji/f_33b.png b/priv/static/emoji/f_33b.png Binary files differindex 86f2a0a0e..71b8b914a 100644 --- a/priv/static/emoji/f_33b.png +++ b/priv/static/emoji/f_33b.png diff --git a/priv/static/emoji/f_33b00b.png b/priv/static/emoji/f_33b00b.png Binary files differindex 9f9a750b0..65b6e24b8 100644 --- a/priv/static/emoji/f_33b00b.png +++ b/priv/static/emoji/f_33b00b.png diff --git a/priv/static/emoji/f_33b22b.png b/priv/static/emoji/f_33b22b.png Binary files differindex 48520a17e..d71a8ddd4 100644 --- a/priv/static/emoji/f_33b22b.png +++ b/priv/static/emoji/f_33b22b.png diff --git a/priv/static/emoji/f_33h.png b/priv/static/emoji/f_33h.png Binary files differindex 0b8a333d2..e141c5184 100644 --- a/priv/static/emoji/f_33h.png +++ b/priv/static/emoji/f_33h.png diff --git a/priv/static/emoji/f_33t.png b/priv/static/emoji/f_33t.png Binary files differindex 0f8812075..d5a23073d 100644 --- a/priv/static/emoji/f_33t.png +++ b/priv/static/emoji/f_33t.png diff --git a/priv/static/favicon.png b/priv/static/favicon.png Binary files differindex f83d923bb..a96d5d252 100644 --- a/priv/static/favicon.png +++ b/priv/static/favicon.png diff --git a/priv/static/finmoji/1000px/a_trusted_friend.png b/priv/static/finmoji/1000px/a_trusted_friend.png Binary files differindex 74c4c7af7..5658d589c 100644 --- a/priv/static/finmoji/1000px/a_trusted_friend.png +++ b/priv/static/finmoji/1000px/a_trusted_friend.png diff --git a/priv/static/finmoji/1000px/alandislands.png b/priv/static/finmoji/1000px/alandislands.png Binary files differindex 816e75d33..094dd3284 100644 --- a/priv/static/finmoji/1000px/alandislands.png +++ b/priv/static/finmoji/1000px/alandislands.png diff --git a/priv/static/finmoji/1000px/association.png b/priv/static/finmoji/1000px/association.png Binary files differindex 175bfaf0a..dad3b8864 100644 --- a/priv/static/finmoji/1000px/association.png +++ b/priv/static/finmoji/1000px/association.png diff --git a/priv/static/finmoji/1000px/auroraborealis.png b/priv/static/finmoji/1000px/auroraborealis.png Binary files differindex 1352ff64d..5875dc2c4 100644 --- a/priv/static/finmoji/1000px/auroraborealis.png +++ b/priv/static/finmoji/1000px/auroraborealis.png diff --git a/priv/static/finmoji/1000px/baby_in_a_box.png b/priv/static/finmoji/1000px/baby_in_a_box.png Binary files differindex 928362adc..9479aaebb 100644 --- a/priv/static/finmoji/1000px/baby_in_a_box.png +++ b/priv/static/finmoji/1000px/baby_in_a_box.png diff --git a/priv/static/finmoji/1000px/bear.png b/priv/static/finmoji/1000px/bear.png Binary files differindex 0c30501be..5d9fbb320 100644 --- a/priv/static/finmoji/1000px/bear.png +++ b/priv/static/finmoji/1000px/bear.png diff --git a/priv/static/finmoji/1000px/black_gold.png b/priv/static/finmoji/1000px/black_gold.png Binary files differindex c8993683b..707e949ec 100644 --- a/priv/static/finmoji/1000px/black_gold.png +++ b/priv/static/finmoji/1000px/black_gold.png diff --git a/priv/static/finmoji/1000px/christmasparty.png b/priv/static/finmoji/1000px/christmasparty.png Binary files differindex 8b8eb62f1..785decb8d 100644 --- a/priv/static/finmoji/1000px/christmasparty.png +++ b/priv/static/finmoji/1000px/christmasparty.png diff --git a/priv/static/finmoji/1000px/crosscountryskiing.png b/priv/static/finmoji/1000px/crosscountryskiing.png Binary files differindex e6de38e1e..2a9bddf41 100644 --- a/priv/static/finmoji/1000px/crosscountryskiing.png +++ b/priv/static/finmoji/1000px/crosscountryskiing.png diff --git a/priv/static/finmoji/1000px/cupofcoffee.png b/priv/static/finmoji/1000px/cupofcoffee.png Binary files differindex 8cb91d0c1..a12cc867c 100644 --- a/priv/static/finmoji/1000px/cupofcoffee.png +++ b/priv/static/finmoji/1000px/cupofcoffee.png diff --git a/priv/static/finmoji/1000px/education.png b/priv/static/finmoji/1000px/education.png Binary files differindex 0092d32e9..af9feee59 100644 --- a/priv/static/finmoji/1000px/education.png +++ b/priv/static/finmoji/1000px/education.png diff --git a/priv/static/finmoji/1000px/fashionista_finns.png b/priv/static/finmoji/1000px/fashionista_finns.png Binary files differindex 214d42d67..d1140250d 100644 --- a/priv/static/finmoji/1000px/fashionista_finns.png +++ b/priv/static/finmoji/1000px/fashionista_finns.png diff --git a/priv/static/finmoji/1000px/finnishlove.png b/priv/static/finmoji/1000px/finnishlove.png Binary files differindex 5fa87ca56..00148202f 100644 --- a/priv/static/finmoji/1000px/finnishlove.png +++ b/priv/static/finmoji/1000px/finnishlove.png diff --git a/priv/static/finmoji/1000px/flag.png b/priv/static/finmoji/1000px/flag.png Binary files differindex 9af9872f6..e709449d7 100644 --- a/priv/static/finmoji/1000px/flag.png +++ b/priv/static/finmoji/1000px/flag.png diff --git a/priv/static/finmoji/1000px/forest.png b/priv/static/finmoji/1000px/forest.png Binary files differindex 090d2dfad..b2d64ea37 100644 --- a/priv/static/finmoji/1000px/forest.png +++ b/priv/static/finmoji/1000px/forest.png diff --git a/priv/static/finmoji/1000px/four_seasons_of_bbq.png b/priv/static/finmoji/1000px/four_seasons_of_bbq.png Binary files differindex 3cffbb440..42f4a7fb7 100644 --- a/priv/static/finmoji/1000px/four_seasons_of_bbq.png +++ b/priv/static/finmoji/1000px/four_seasons_of_bbq.png diff --git a/priv/static/finmoji/1000px/girlpower.png b/priv/static/finmoji/1000px/girlpower.png Binary files differindex 3eb0ba64a..7674f2e26 100644 --- a/priv/static/finmoji/1000px/girlpower.png +++ b/priv/static/finmoji/1000px/girlpower.png diff --git a/priv/static/finmoji/1000px/handshake.png b/priv/static/finmoji/1000px/handshake.png Binary files differindex 6ca1533a7..d9857d699 100644 --- a/priv/static/finmoji/1000px/handshake.png +++ b/priv/static/finmoji/1000px/handshake.png diff --git a/priv/static/finmoji/1000px/happiness.png b/priv/static/finmoji/1000px/happiness.png Binary files differindex faf31b72d..fbfc34fe4 100644 --- a/priv/static/finmoji/1000px/happiness.png +++ b/priv/static/finmoji/1000px/happiness.png diff --git a/priv/static/finmoji/1000px/headbanger.png b/priv/static/finmoji/1000px/headbanger.png Binary files differindex 643fa8afd..d9c2f6247 100644 --- a/priv/static/finmoji/1000px/headbanger.png +++ b/priv/static/finmoji/1000px/headbanger.png diff --git a/priv/static/finmoji/1000px/icebreaker.png b/priv/static/finmoji/1000px/icebreaker.png Binary files differindex 08f8908a2..aedce3dca 100644 --- a/priv/static/finmoji/1000px/icebreaker.png +++ b/priv/static/finmoji/1000px/icebreaker.png diff --git a/priv/static/finmoji/1000px/iceman.png b/priv/static/finmoji/1000px/iceman.png Binary files differindex 2da5ad83e..c172e60d5 100644 --- a/priv/static/finmoji/1000px/iceman.png +++ b/priv/static/finmoji/1000px/iceman.png diff --git a/priv/static/finmoji/1000px/joulutorttu.png b/priv/static/finmoji/1000px/joulutorttu.png Binary files differindex 05c974d98..d7b5a7e53 100644 --- a/priv/static/finmoji/1000px/joulutorttu.png +++ b/priv/static/finmoji/1000px/joulutorttu.png diff --git a/priv/static/finmoji/1000px/kaamos.png b/priv/static/finmoji/1000px/kaamos.png Binary files differindex 053cd4fc4..139b21953 100644 --- a/priv/static/finmoji/1000px/kaamos.png +++ b/priv/static/finmoji/1000px/kaamos.png diff --git a/priv/static/finmoji/1000px/kalsarikannit_f.png b/priv/static/finmoji/1000px/kalsarikannit_f.png Binary files differindex 718ca6934..064c86160 100644 --- a/priv/static/finmoji/1000px/kalsarikannit_f.png +++ b/priv/static/finmoji/1000px/kalsarikannit_f.png diff --git a/priv/static/finmoji/1000px/kalsarikannit_m.png b/priv/static/finmoji/1000px/kalsarikannit_m.png Binary files differindex a081dd5e1..e08bd27af 100644 --- a/priv/static/finmoji/1000px/kalsarikannit_m.png +++ b/priv/static/finmoji/1000px/kalsarikannit_m.png diff --git a/priv/static/finmoji/1000px/karjalanpiirakka.png b/priv/static/finmoji/1000px/karjalanpiirakka.png Binary files differindex a918305e4..dbf647df5 100644 --- a/priv/static/finmoji/1000px/karjalanpiirakka.png +++ b/priv/static/finmoji/1000px/karjalanpiirakka.png diff --git a/priv/static/finmoji/1000px/kicksled.png b/priv/static/finmoji/1000px/kicksled.png Binary files differindex fc489fb62..305a56f77 100644 --- a/priv/static/finmoji/1000px/kicksled.png +++ b/priv/static/finmoji/1000px/kicksled.png diff --git a/priv/static/finmoji/1000px/kokko.png b/priv/static/finmoji/1000px/kokko.png Binary files differindex c6ed2a98a..0a5472c9a 100644 --- a/priv/static/finmoji/1000px/kokko.png +++ b/priv/static/finmoji/1000px/kokko.png diff --git a/priv/static/finmoji/1000px/lavatanssit.png b/priv/static/finmoji/1000px/lavatanssit.png Binary files differindex 04a0b48f6..a1f0a69dd 100644 --- a/priv/static/finmoji/1000px/lavatanssit.png +++ b/priv/static/finmoji/1000px/lavatanssit.png diff --git a/priv/static/finmoji/1000px/losthopes_f.png b/priv/static/finmoji/1000px/losthopes_f.png Binary files differindex 06a3061fa..a847df3c5 100644 --- a/priv/static/finmoji/1000px/losthopes_f.png +++ b/priv/static/finmoji/1000px/losthopes_f.png diff --git a/priv/static/finmoji/1000px/losthopes_m.png b/priv/static/finmoji/1000px/losthopes_m.png Binary files differindex 78caa6b1d..93c83b995 100644 --- a/priv/static/finmoji/1000px/losthopes_m.png +++ b/priv/static/finmoji/1000px/losthopes_m.png diff --git a/priv/static/finmoji/1000px/mattinykanen.png b/priv/static/finmoji/1000px/mattinykanen.png Binary files differindex 4a7c76b41..2d9c9d38f 100644 --- a/priv/static/finmoji/1000px/mattinykanen.png +++ b/priv/static/finmoji/1000px/mattinykanen.png diff --git a/priv/static/finmoji/1000px/meanwhileinfinland.png b/priv/static/finmoji/1000px/meanwhileinfinland.png Binary files differindex e591cb18a..794db1eed 100644 --- a/priv/static/finmoji/1000px/meanwhileinfinland.png +++ b/priv/static/finmoji/1000px/meanwhileinfinland.png diff --git a/priv/static/finmoji/1000px/moominmamma.png b/priv/static/finmoji/1000px/moominmamma.png Binary files differindex 963b18573..d34b1b98b 100644 --- a/priv/static/finmoji/1000px/moominmamma.png +++ b/priv/static/finmoji/1000px/moominmamma.png diff --git a/priv/static/finmoji/1000px/nordicfamily.png b/priv/static/finmoji/1000px/nordicfamily.png Binary files differindex 81ae83a71..21292eaff 100644 --- a/priv/static/finmoji/1000px/nordicfamily.png +++ b/priv/static/finmoji/1000px/nordicfamily.png diff --git a/priv/static/finmoji/1000px/out_of_office.png b/priv/static/finmoji/1000px/out_of_office.png Binary files differindex af5dbce7f..b72d6dbd5 100644 --- a/priv/static/finmoji/1000px/out_of_office.png +++ b/priv/static/finmoji/1000px/out_of_office.png diff --git a/priv/static/finmoji/1000px/peacemaker.png b/priv/static/finmoji/1000px/peacemaker.png Binary files differindex 89e4265f2..48a51fa6f 100644 --- a/priv/static/finmoji/1000px/peacemaker.png +++ b/priv/static/finmoji/1000px/peacemaker.png diff --git a/priv/static/finmoji/1000px/perkele.png b/priv/static/finmoji/1000px/perkele.png Binary files differindex 98ac34606..16a68d053 100644 --- a/priv/static/finmoji/1000px/perkele.png +++ b/priv/static/finmoji/1000px/perkele.png diff --git a/priv/static/finmoji/1000px/pesapallo.png b/priv/static/finmoji/1000px/pesapallo.png Binary files differindex f701a0168..2f35c8e02 100644 --- a/priv/static/finmoji/1000px/pesapallo.png +++ b/priv/static/finmoji/1000px/pesapallo.png diff --git a/priv/static/finmoji/1000px/polarbear.png b/priv/static/finmoji/1000px/polarbear.png Binary files differindex 1e2eed5f5..ce6c65e8b 100644 --- a/priv/static/finmoji/1000px/polarbear.png +++ b/priv/static/finmoji/1000px/polarbear.png diff --git a/priv/static/finmoji/1000px/pusa_hispida_saimensis.png b/priv/static/finmoji/1000px/pusa_hispida_saimensis.png Binary files differindex 61145bccc..35ec8caed 100644 --- a/priv/static/finmoji/1000px/pusa_hispida_saimensis.png +++ b/priv/static/finmoji/1000px/pusa_hispida_saimensis.png diff --git a/priv/static/finmoji/1000px/reindeer.png b/priv/static/finmoji/1000px/reindeer.png Binary files differindex a3d28fb9c..e60f0f0a4 100644 --- a/priv/static/finmoji/1000px/reindeer.png +++ b/priv/static/finmoji/1000px/reindeer.png diff --git a/priv/static/finmoji/1000px/sami.png b/priv/static/finmoji/1000px/sami.png Binary files differindex f3a089b3b..e4703dfd2 100644 --- a/priv/static/finmoji/1000px/sami.png +++ b/priv/static/finmoji/1000px/sami.png diff --git a/priv/static/finmoji/1000px/sauna_f.png b/priv/static/finmoji/1000px/sauna_f.png Binary files differindex ca83c8bfc..9a4ba8629 100644 --- a/priv/static/finmoji/1000px/sauna_f.png +++ b/priv/static/finmoji/1000px/sauna_f.png diff --git a/priv/static/finmoji/1000px/sauna_m.png b/priv/static/finmoji/1000px/sauna_m.png Binary files differindex 0de893cb7..4bdd33f7b 100644 --- a/priv/static/finmoji/1000px/sauna_m.png +++ b/priv/static/finmoji/1000px/sauna_m.png diff --git a/priv/static/finmoji/1000px/sauna_whisk.png b/priv/static/finmoji/1000px/sauna_whisk.png Binary files differindex 2b8af6740..c16928065 100644 --- a/priv/static/finmoji/1000px/sauna_whisk.png +++ b/priv/static/finmoji/1000px/sauna_whisk.png diff --git a/priv/static/finmoji/1000px/sisu.png b/priv/static/finmoji/1000px/sisu.png Binary files differindex 18320729f..238453bb5 100644 --- a/priv/static/finmoji/1000px/sisu.png +++ b/priv/static/finmoji/1000px/sisu.png diff --git a/priv/static/finmoji/1000px/stuck.png b/priv/static/finmoji/1000px/stuck.png Binary files differindex 445b6bcd8..4180e3ecd 100644 --- a/priv/static/finmoji/1000px/stuck.png +++ b/priv/static/finmoji/1000px/stuck.png diff --git a/priv/static/finmoji/1000px/suomimainittu.png b/priv/static/finmoji/1000px/suomimainittu.png Binary files differindex 01dfa64e4..af46347f5 100644 --- a/priv/static/finmoji/1000px/suomimainittu.png +++ b/priv/static/finmoji/1000px/suomimainittu.png diff --git a/priv/static/finmoji/1000px/superfood.png b/priv/static/finmoji/1000px/superfood.png Binary files differindex 8a81f4e3d..8fa033c18 100644 --- a/priv/static/finmoji/1000px/superfood.png +++ b/priv/static/finmoji/1000px/superfood.png diff --git a/priv/static/finmoji/1000px/swan.png b/priv/static/finmoji/1000px/swan.png Binary files differindex dbdf0ed0c..5363f861d 100644 --- a/priv/static/finmoji/1000px/swan.png +++ b/priv/static/finmoji/1000px/swan.png diff --git a/priv/static/finmoji/1000px/the_cap.png b/priv/static/finmoji/1000px/the_cap.png Binary files differindex f1232e10f..7f547dc0e 100644 --- a/priv/static/finmoji/1000px/the_cap.png +++ b/priv/static/finmoji/1000px/the_cap.png diff --git a/priv/static/finmoji/1000px/the_conductor.png b/priv/static/finmoji/1000px/the_conductor.png Binary files differindex d231bf6f9..ed5ca7f1f 100644 --- a/priv/static/finmoji/1000px/the_conductor.png +++ b/priv/static/finmoji/1000px/the_conductor.png diff --git a/priv/static/finmoji/1000px/the_king.png b/priv/static/finmoji/1000px/the_king.png Binary files differindex f1f589667..8c3a5c66d 100644 --- a/priv/static/finmoji/1000px/the_king.png +++ b/priv/static/finmoji/1000px/the_king.png diff --git a/priv/static/finmoji/1000px/the_voice.png b/priv/static/finmoji/1000px/the_voice.png Binary files differindex 2085a56c8..9bfc87b3a 100644 --- a/priv/static/finmoji/1000px/the_voice.png +++ b/priv/static/finmoji/1000px/the_voice.png diff --git a/priv/static/finmoji/1000px/theoriginalsanta.png b/priv/static/finmoji/1000px/theoriginalsanta.png Binary files differindex 707921b2d..b8dc1ef47 100644 --- a/priv/static/finmoji/1000px/theoriginalsanta.png +++ b/priv/static/finmoji/1000px/theoriginalsanta.png diff --git a/priv/static/finmoji/1000px/tomoffinland.png b/priv/static/finmoji/1000px/tomoffinland.png Binary files differindex bf83c7573..97da05a64 100644 --- a/priv/static/finmoji/1000px/tomoffinland.png +++ b/priv/static/finmoji/1000px/tomoffinland.png diff --git a/priv/static/finmoji/1000px/torillatavataan.png b/priv/static/finmoji/1000px/torillatavataan.png Binary files differindex 6e82251f8..ff7a81eda 100644 --- a/priv/static/finmoji/1000px/torillatavataan.png +++ b/priv/static/finmoji/1000px/torillatavataan.png diff --git a/priv/static/finmoji/1000px/unbreakable.png b/priv/static/finmoji/1000px/unbreakable.png Binary files differindex 9a4197367..1778fc115 100644 --- a/priv/static/finmoji/1000px/unbreakable.png +++ b/priv/static/finmoji/1000px/unbreakable.png diff --git a/priv/static/finmoji/1000px/waiting.png b/priv/static/finmoji/1000px/waiting.png Binary files differindex 4b98139a0..2aa9afa70 100644 --- a/priv/static/finmoji/1000px/waiting.png +++ b/priv/static/finmoji/1000px/waiting.png diff --git a/priv/static/finmoji/1000px/white_nights.png b/priv/static/finmoji/1000px/white_nights.png Binary files differindex d00e2febe..8e9cd3fc8 100644 --- a/priv/static/finmoji/1000px/white_nights.png +++ b/priv/static/finmoji/1000px/white_nights.png diff --git a/priv/static/finmoji/1000px/woollysocks.png b/priv/static/finmoji/1000px/woollysocks.png Binary files differindex 0bd8ee055..5ee4e6de1 100644 --- a/priv/static/finmoji/1000px/woollysocks.png +++ b/priv/static/finmoji/1000px/woollysocks.png diff --git a/priv/static/finmoji/128px/a_trusted_friend-128.png b/priv/static/finmoji/128px/a_trusted_friend-128.png Binary files differindex e459c5109..16d596bda 100644 --- a/priv/static/finmoji/128px/a_trusted_friend-128.png +++ b/priv/static/finmoji/128px/a_trusted_friend-128.png diff --git a/priv/static/finmoji/128px/alandislands-128.png b/priv/static/finmoji/128px/alandislands-128.png Binary files differindex 5b9ef6957..13cdf6e76 100644 --- a/priv/static/finmoji/128px/alandislands-128.png +++ b/priv/static/finmoji/128px/alandislands-128.png diff --git a/priv/static/finmoji/128px/association-128.png b/priv/static/finmoji/128px/association-128.png Binary files differindex 10879dbff..5b388d781 100644 --- a/priv/static/finmoji/128px/association-128.png +++ b/priv/static/finmoji/128px/association-128.png diff --git a/priv/static/finmoji/128px/auroraborealis-128.png b/priv/static/finmoji/128px/auroraborealis-128.png Binary files differindex 9e52d6011..7e2af77b9 100644 --- a/priv/static/finmoji/128px/auroraborealis-128.png +++ b/priv/static/finmoji/128px/auroraborealis-128.png diff --git a/priv/static/finmoji/128px/baby_in_a_box-128.png b/priv/static/finmoji/128px/baby_in_a_box-128.png Binary files differindex 64c7f8264..9c495e24a 100644 --- a/priv/static/finmoji/128px/baby_in_a_box-128.png +++ b/priv/static/finmoji/128px/baby_in_a_box-128.png diff --git a/priv/static/finmoji/128px/bear-128.png b/priv/static/finmoji/128px/bear-128.png Binary files differindex 987078491..8bb101bf4 100644 --- a/priv/static/finmoji/128px/bear-128.png +++ b/priv/static/finmoji/128px/bear-128.png diff --git a/priv/static/finmoji/128px/black_gold-128.png b/priv/static/finmoji/128px/black_gold-128.png Binary files differindex f8bf5638f..1833edab4 100644 --- a/priv/static/finmoji/128px/black_gold-128.png +++ b/priv/static/finmoji/128px/black_gold-128.png diff --git a/priv/static/finmoji/128px/christmasparty-128.png b/priv/static/finmoji/128px/christmasparty-128.png Binary files differindex e18c088b4..98216830c 100644 --- a/priv/static/finmoji/128px/christmasparty-128.png +++ b/priv/static/finmoji/128px/christmasparty-128.png diff --git a/priv/static/finmoji/128px/crosscountryskiing-128.png b/priv/static/finmoji/128px/crosscountryskiing-128.png Binary files differindex 317577170..67553f398 100644 --- a/priv/static/finmoji/128px/crosscountryskiing-128.png +++ b/priv/static/finmoji/128px/crosscountryskiing-128.png diff --git a/priv/static/finmoji/128px/cupofcoffee-128.png b/priv/static/finmoji/128px/cupofcoffee-128.png Binary files differindex 0851e9a46..20064f218 100644 --- a/priv/static/finmoji/128px/cupofcoffee-128.png +++ b/priv/static/finmoji/128px/cupofcoffee-128.png diff --git a/priv/static/finmoji/128px/education-128.png b/priv/static/finmoji/128px/education-128.png Binary files differindex 7456e90bf..c98083bdd 100644 --- a/priv/static/finmoji/128px/education-128.png +++ b/priv/static/finmoji/128px/education-128.png diff --git a/priv/static/finmoji/128px/fashionista_finns-128.png b/priv/static/finmoji/128px/fashionista_finns-128.png Binary files differindex 0b2b0466c..4248825e0 100644 --- a/priv/static/finmoji/128px/fashionista_finns-128.png +++ b/priv/static/finmoji/128px/fashionista_finns-128.png diff --git a/priv/static/finmoji/128px/finnishlove-128.png b/priv/static/finmoji/128px/finnishlove-128.png Binary files differindex 3a970bf7b..5d4f9476c 100644 --- a/priv/static/finmoji/128px/finnishlove-128.png +++ b/priv/static/finmoji/128px/finnishlove-128.png diff --git a/priv/static/finmoji/128px/flag-128.png b/priv/static/finmoji/128px/flag-128.png Binary files differindex a5363242d..0087cc589 100644 --- a/priv/static/finmoji/128px/flag-128.png +++ b/priv/static/finmoji/128px/flag-128.png diff --git a/priv/static/finmoji/128px/forest-128.png b/priv/static/finmoji/128px/forest-128.png Binary files differindex a350d7f0c..142e60b94 100644 --- a/priv/static/finmoji/128px/forest-128.png +++ b/priv/static/finmoji/128px/forest-128.png diff --git a/priv/static/finmoji/128px/four_seasons_of_bbq-128.png b/priv/static/finmoji/128px/four_seasons_of_bbq-128.png Binary files differindex d01ad662e..bb7fe1f51 100644 --- a/priv/static/finmoji/128px/four_seasons_of_bbq-128.png +++ b/priv/static/finmoji/128px/four_seasons_of_bbq-128.png diff --git a/priv/static/finmoji/128px/girlpower-128.png b/priv/static/finmoji/128px/girlpower-128.png Binary files differindex 1e6e9628e..bc76a51c5 100644 --- a/priv/static/finmoji/128px/girlpower-128.png +++ b/priv/static/finmoji/128px/girlpower-128.png diff --git a/priv/static/finmoji/128px/handshake-128.png b/priv/static/finmoji/128px/handshake-128.png Binary files differindex 92976f48b..4ebf196ab 100644 --- a/priv/static/finmoji/128px/handshake-128.png +++ b/priv/static/finmoji/128px/handshake-128.png diff --git a/priv/static/finmoji/128px/happiness-128.png b/priv/static/finmoji/128px/happiness-128.png Binary files differindex 3ae66fa4b..e28f99a26 100644 --- a/priv/static/finmoji/128px/happiness-128.png +++ b/priv/static/finmoji/128px/happiness-128.png diff --git a/priv/static/finmoji/128px/headbanger-128.png b/priv/static/finmoji/128px/headbanger-128.png Binary files differindex 094288c51..0de620efe 100644 --- a/priv/static/finmoji/128px/headbanger-128.png +++ b/priv/static/finmoji/128px/headbanger-128.png diff --git a/priv/static/finmoji/128px/icebreaker-128.png b/priv/static/finmoji/128px/icebreaker-128.png Binary files differindex 0473dc400..7fb36a4a3 100644 --- a/priv/static/finmoji/128px/icebreaker-128.png +++ b/priv/static/finmoji/128px/icebreaker-128.png diff --git a/priv/static/finmoji/128px/iceman-128.png b/priv/static/finmoji/128px/iceman-128.png Binary files differindex 217ef0c92..eb814e6aa 100644 --- a/priv/static/finmoji/128px/iceman-128.png +++ b/priv/static/finmoji/128px/iceman-128.png diff --git a/priv/static/finmoji/128px/joulutorttu-128.png b/priv/static/finmoji/128px/joulutorttu-128.png Binary files differindex c394570eb..50448e333 100644 --- a/priv/static/finmoji/128px/joulutorttu-128.png +++ b/priv/static/finmoji/128px/joulutorttu-128.png diff --git a/priv/static/finmoji/128px/kaamos-128.png b/priv/static/finmoji/128px/kaamos-128.png Binary files differindex 882ddf8ba..8b2df03ef 100644 --- a/priv/static/finmoji/128px/kaamos-128.png +++ b/priv/static/finmoji/128px/kaamos-128.png diff --git a/priv/static/finmoji/128px/kalsarikannit_f-128.png b/priv/static/finmoji/128px/kalsarikannit_f-128.png Binary files differindex a3390e66c..bcd94141a 100644 --- a/priv/static/finmoji/128px/kalsarikannit_f-128.png +++ b/priv/static/finmoji/128px/kalsarikannit_f-128.png diff --git a/priv/static/finmoji/128px/kalsarikannit_m-128.png b/priv/static/finmoji/128px/kalsarikannit_m-128.png Binary files differindex e48ca375d..c6938e677 100644 --- a/priv/static/finmoji/128px/kalsarikannit_m-128.png +++ b/priv/static/finmoji/128px/kalsarikannit_m-128.png diff --git a/priv/static/finmoji/128px/karjalanpiirakka-128.png b/priv/static/finmoji/128px/karjalanpiirakka-128.png Binary files differindex b489c9c28..a82a902db 100644 --- a/priv/static/finmoji/128px/karjalanpiirakka-128.png +++ b/priv/static/finmoji/128px/karjalanpiirakka-128.png diff --git a/priv/static/finmoji/128px/kicksled-128.png b/priv/static/finmoji/128px/kicksled-128.png Binary files differindex 99dee1eb8..ff42462db 100644 --- a/priv/static/finmoji/128px/kicksled-128.png +++ b/priv/static/finmoji/128px/kicksled-128.png diff --git a/priv/static/finmoji/128px/kokko-128.png b/priv/static/finmoji/128px/kokko-128.png Binary files differindex ef1ea0db5..e0b6e07fa 100644 --- a/priv/static/finmoji/128px/kokko-128.png +++ b/priv/static/finmoji/128px/kokko-128.png diff --git a/priv/static/finmoji/128px/lavatanssit-128.png b/priv/static/finmoji/128px/lavatanssit-128.png Binary files differindex e5d921dfe..f89dc358c 100644 --- a/priv/static/finmoji/128px/lavatanssit-128.png +++ b/priv/static/finmoji/128px/lavatanssit-128.png diff --git a/priv/static/finmoji/128px/losthopes_f-128.png b/priv/static/finmoji/128px/losthopes_f-128.png Binary files differindex 395b75a12..60f0949c0 100644 --- a/priv/static/finmoji/128px/losthopes_f-128.png +++ b/priv/static/finmoji/128px/losthopes_f-128.png diff --git a/priv/static/finmoji/128px/losthopes_m-128.png b/priv/static/finmoji/128px/losthopes_m-128.png Binary files differindex 4fdadb97a..9ae6f9e2f 100644 --- a/priv/static/finmoji/128px/losthopes_m-128.png +++ b/priv/static/finmoji/128px/losthopes_m-128.png diff --git a/priv/static/finmoji/128px/mattinykanen-128.png b/priv/static/finmoji/128px/mattinykanen-128.png Binary files differindex 230554e2e..0e81271ca 100644 --- a/priv/static/finmoji/128px/mattinykanen-128.png +++ b/priv/static/finmoji/128px/mattinykanen-128.png diff --git a/priv/static/finmoji/128px/meanwhileinfinland-128.png b/priv/static/finmoji/128px/meanwhileinfinland-128.png Binary files differindex 8cc636bd6..5a9710a3b 100644 --- a/priv/static/finmoji/128px/meanwhileinfinland-128.png +++ b/priv/static/finmoji/128px/meanwhileinfinland-128.png diff --git a/priv/static/finmoji/128px/moominmamma-128.png b/priv/static/finmoji/128px/moominmamma-128.png Binary files differindex 76a662a9d..ae37bb94a 100644 --- a/priv/static/finmoji/128px/moominmamma-128.png +++ b/priv/static/finmoji/128px/moominmamma-128.png diff --git a/priv/static/finmoji/128px/nordicfamily-128.png b/priv/static/finmoji/128px/nordicfamily-128.png Binary files differindex 6efd5daa8..cff41b228 100644 --- a/priv/static/finmoji/128px/nordicfamily-128.png +++ b/priv/static/finmoji/128px/nordicfamily-128.png diff --git a/priv/static/finmoji/128px/out_of_office-128.png b/priv/static/finmoji/128px/out_of_office-128.png Binary files differindex 98e359bcb..45cd1c2f5 100644 --- a/priv/static/finmoji/128px/out_of_office-128.png +++ b/priv/static/finmoji/128px/out_of_office-128.png diff --git a/priv/static/finmoji/128px/peacemaker-128.png b/priv/static/finmoji/128px/peacemaker-128.png Binary files differindex 2ec94560f..c4e9bd447 100644 --- a/priv/static/finmoji/128px/peacemaker-128.png +++ b/priv/static/finmoji/128px/peacemaker-128.png diff --git a/priv/static/finmoji/128px/perkele-128.png b/priv/static/finmoji/128px/perkele-128.png Binary files differindex 61b1d560c..e89e5bf32 100644 --- a/priv/static/finmoji/128px/perkele-128.png +++ b/priv/static/finmoji/128px/perkele-128.png diff --git a/priv/static/finmoji/128px/pesapallo-128.png b/priv/static/finmoji/128px/pesapallo-128.png Binary files differindex de0897e3c..5e06bec50 100644 --- a/priv/static/finmoji/128px/pesapallo-128.png +++ b/priv/static/finmoji/128px/pesapallo-128.png diff --git a/priv/static/finmoji/128px/polarbear-128.png b/priv/static/finmoji/128px/polarbear-128.png Binary files differindex 6a3abeccd..fd3c3ec30 100644 --- a/priv/static/finmoji/128px/polarbear-128.png +++ b/priv/static/finmoji/128px/polarbear-128.png diff --git a/priv/static/finmoji/128px/pusa_hispida_saimensis-128.png b/priv/static/finmoji/128px/pusa_hispida_saimensis-128.png Binary files differindex 277780d75..60620be5d 100644 --- a/priv/static/finmoji/128px/pusa_hispida_saimensis-128.png +++ b/priv/static/finmoji/128px/pusa_hispida_saimensis-128.png diff --git a/priv/static/finmoji/128px/reindeer-128.png b/priv/static/finmoji/128px/reindeer-128.png Binary files differindex c8c5ed795..8cdd05f27 100644 --- a/priv/static/finmoji/128px/reindeer-128.png +++ b/priv/static/finmoji/128px/reindeer-128.png diff --git a/priv/static/finmoji/128px/sami-128.png b/priv/static/finmoji/128px/sami-128.png Binary files differindex fc52cceac..e9e9f41a7 100644 --- a/priv/static/finmoji/128px/sami-128.png +++ b/priv/static/finmoji/128px/sami-128.png diff --git a/priv/static/finmoji/128px/sauna_f-128.png b/priv/static/finmoji/128px/sauna_f-128.png Binary files differindex 6c70fde1d..474f126ff 100644 --- a/priv/static/finmoji/128px/sauna_f-128.png +++ b/priv/static/finmoji/128px/sauna_f-128.png diff --git a/priv/static/finmoji/128px/sauna_m-128.png b/priv/static/finmoji/128px/sauna_m-128.png Binary files differindex f67406bf9..f7f563a9b 100644 --- a/priv/static/finmoji/128px/sauna_m-128.png +++ b/priv/static/finmoji/128px/sauna_m-128.png diff --git a/priv/static/finmoji/128px/sauna_whisk-128.png b/priv/static/finmoji/128px/sauna_whisk-128.png Binary files differindex 7450ff682..80ebb55e4 100644 --- a/priv/static/finmoji/128px/sauna_whisk-128.png +++ b/priv/static/finmoji/128px/sauna_whisk-128.png diff --git a/priv/static/finmoji/128px/sisu-128.png b/priv/static/finmoji/128px/sisu-128.png Binary files differindex 9ea6ae834..7b9330654 100644 --- a/priv/static/finmoji/128px/sisu-128.png +++ b/priv/static/finmoji/128px/sisu-128.png diff --git a/priv/static/finmoji/128px/stuck-128.png b/priv/static/finmoji/128px/stuck-128.png Binary files differindex c1f468135..c14bc555d 100644 --- a/priv/static/finmoji/128px/stuck-128.png +++ b/priv/static/finmoji/128px/stuck-128.png diff --git a/priv/static/finmoji/128px/suomimainittu-128.png b/priv/static/finmoji/128px/suomimainittu-128.png Binary files differindex ac9228d88..8d35b9be1 100644 --- a/priv/static/finmoji/128px/suomimainittu-128.png +++ b/priv/static/finmoji/128px/suomimainittu-128.png diff --git a/priv/static/finmoji/128px/superfood-128.png b/priv/static/finmoji/128px/superfood-128.png Binary files differindex bb6eb81b5..2e9d924cc 100644 --- a/priv/static/finmoji/128px/superfood-128.png +++ b/priv/static/finmoji/128px/superfood-128.png diff --git a/priv/static/finmoji/128px/swan-128.png b/priv/static/finmoji/128px/swan-128.png Binary files differindex b1c2c5ea0..d1711c70b 100644 --- a/priv/static/finmoji/128px/swan-128.png +++ b/priv/static/finmoji/128px/swan-128.png diff --git a/priv/static/finmoji/128px/the_cap-128.png b/priv/static/finmoji/128px/the_cap-128.png Binary files differindex 90d36f9b4..10d83c22e 100644 --- a/priv/static/finmoji/128px/the_cap-128.png +++ b/priv/static/finmoji/128px/the_cap-128.png diff --git a/priv/static/finmoji/128px/the_conductor-128.png b/priv/static/finmoji/128px/the_conductor-128.png Binary files differindex e061cf8f4..0da7c42e8 100644 --- a/priv/static/finmoji/128px/the_conductor-128.png +++ b/priv/static/finmoji/128px/the_conductor-128.png diff --git a/priv/static/finmoji/128px/the_king-128.png b/priv/static/finmoji/128px/the_king-128.png Binary files differindex 8611d2604..07dd27ad7 100644 --- a/priv/static/finmoji/128px/the_king-128.png +++ b/priv/static/finmoji/128px/the_king-128.png diff --git a/priv/static/finmoji/128px/the_voice-128.png b/priv/static/finmoji/128px/the_voice-128.png Binary files differindex 93fd9e0f4..bb436f95b 100644 --- a/priv/static/finmoji/128px/the_voice-128.png +++ b/priv/static/finmoji/128px/the_voice-128.png diff --git a/priv/static/finmoji/128px/theoriginalsanta-128.png b/priv/static/finmoji/128px/theoriginalsanta-128.png Binary files differindex 1827b2500..082d58c28 100644 --- a/priv/static/finmoji/128px/theoriginalsanta-128.png +++ b/priv/static/finmoji/128px/theoriginalsanta-128.png diff --git a/priv/static/finmoji/128px/tomoffinland-128.png b/priv/static/finmoji/128px/tomoffinland-128.png Binary files differindex 3f6cfc319..29c68bcba 100644 --- a/priv/static/finmoji/128px/tomoffinland-128.png +++ b/priv/static/finmoji/128px/tomoffinland-128.png diff --git a/priv/static/finmoji/128px/torillatavataan-128.png b/priv/static/finmoji/128px/torillatavataan-128.png Binary files differindex 2d2153f59..da7b502b4 100644 --- a/priv/static/finmoji/128px/torillatavataan-128.png +++ b/priv/static/finmoji/128px/torillatavataan-128.png diff --git a/priv/static/finmoji/128px/unbreakable-128.png b/priv/static/finmoji/128px/unbreakable-128.png Binary files differindex a8d7cc8f1..eb825e14f 100644 --- a/priv/static/finmoji/128px/unbreakable-128.png +++ b/priv/static/finmoji/128px/unbreakable-128.png diff --git a/priv/static/finmoji/128px/waiting-128.png b/priv/static/finmoji/128px/waiting-128.png Binary files differindex 20fd31dd4..10b9167f2 100644 --- a/priv/static/finmoji/128px/waiting-128.png +++ b/priv/static/finmoji/128px/waiting-128.png diff --git a/priv/static/finmoji/128px/white_nights-128.png b/priv/static/finmoji/128px/white_nights-128.png Binary files differindex 258d305a1..8eacd11f0 100644 --- a/priv/static/finmoji/128px/white_nights-128.png +++ b/priv/static/finmoji/128px/white_nights-128.png diff --git a/priv/static/finmoji/128px/woollysocks-128.png b/priv/static/finmoji/128px/woollysocks-128.png Binary files differindex a5d9cd5d5..856af5b2e 100644 --- a/priv/static/finmoji/128px/woollysocks-128.png +++ b/priv/static/finmoji/128px/woollysocks-128.png diff --git a/priv/static/images/avi.png b/priv/static/images/avi.png Binary files differindex 3fc699c12..c6595adad 100644 --- a/priv/static/images/avi.png +++ b/priv/static/images/avi.png diff --git a/priv/static/images/banner.png b/priv/static/images/banner.png Binary files differindex 467c075d6..aa76fdd8d 100644 --- a/priv/static/images/banner.png +++ b/priv/static/images/banner.png diff --git a/priv/static/images/city.jpg b/priv/static/images/city.jpg Binary files differindex c32204719..75c07b5bd 100644 --- a/priv/static/images/city.jpg +++ b/priv/static/images/city.jpg diff --git a/priv/static/instance/thumbnail.jpeg b/priv/static/instance/thumbnail.jpeg Binary files differindex b7e012644..f63c9fef2 100644 --- a/priv/static/instance/thumbnail.jpeg +++ b/priv/static/instance/thumbnail.jpeg diff --git a/priv/static/packs/clippy_frame-3446d4d28d72aef2f64f7fabae30eb4a.png b/priv/static/packs/clippy_frame-3446d4d28d72aef2f64f7fabae30eb4a.png Binary files differindex 7f2cd6a59..724bb0c19 100644 --- a/priv/static/packs/clippy_frame-3446d4d28d72aef2f64f7fabae30eb4a.png +++ b/priv/static/packs/clippy_frame-3446d4d28d72aef2f64f7fabae30eb4a.png diff --git a/priv/static/packs/clippy_wave-afb828463da264adbce26a3f17731f6c.gif b/priv/static/packs/clippy_wave-afb828463da264adbce26a3f17731f6c.gif Binary files differindex 4d2e38a3d..bbb4e53ab 100644 --- a/priv/static/packs/clippy_wave-afb828463da264adbce26a3f17731f6c.gif +++ b/priv/static/packs/clippy_wave-afb828463da264adbce26a3f17731f6c.gif diff --git a/priv/static/packs/glitch-preview-bb9cc15a0102bfaf65712e5cff7e58df.jpg b/priv/static/packs/glitch-preview-bb9cc15a0102bfaf65712e5cff7e58df.jpg Binary files differindex fc5c42043..5d2d5880c 100644 --- a/priv/static/packs/glitch-preview-bb9cc15a0102bfaf65712e5cff7e58df.jpg +++ b/priv/static/packs/glitch-preview-bb9cc15a0102bfaf65712e5cff7e58df.jpg diff --git a/priv/static/packs/icon_about-ffafc67a2e97ca436da6c1bf61a8ab68.png b/priv/static/packs/icon_about-ffafc67a2e97ca436da6c1bf61a8ab68.png Binary files differindex 08b76dcd9..b597becb9 100644 --- a/priv/static/packs/icon_about-ffafc67a2e97ca436da6c1bf61a8ab68.png +++ b/priv/static/packs/icon_about-ffafc67a2e97ca436da6c1bf61a8ab68.png diff --git a/priv/static/packs/icon_blocks-0b0e54d45ff0177b02e1357ac09c0d51.png b/priv/static/packs/icon_blocks-0b0e54d45ff0177b02e1357ac09c0d51.png Binary files differindex 8b1490875..521048961 100644 --- a/priv/static/packs/icon_blocks-0b0e54d45ff0177b02e1357ac09c0d51.png +++ b/priv/static/packs/icon_blocks-0b0e54d45ff0177b02e1357ac09c0d51.png diff --git a/priv/static/packs/icon_cached-26ffa26120a2a16a9be78a75cc603793.png b/priv/static/packs/icon_cached-26ffa26120a2a16a9be78a75cc603793.png Binary files differindex 5c993dbee..d3cd2a2fd 100644 --- a/priv/static/packs/icon_cached-26ffa26120a2a16a9be78a75cc603793.png +++ b/priv/static/packs/icon_cached-26ffa26120a2a16a9be78a75cc603793.png diff --git a/priv/static/packs/icon_done-e07ea253e82d137816cfb8d77a3b1562.png b/priv/static/packs/icon_done-e07ea253e82d137816cfb8d77a3b1562.png Binary files differindex f7f95a0e8..15a74c4c4 100644 --- a/priv/static/packs/icon_done-e07ea253e82d137816cfb8d77a3b1562.png +++ b/priv/static/packs/icon_done-e07ea253e82d137816cfb8d77a3b1562.png diff --git a/priv/static/packs/icon_email-ed5d2a37fa765e4c5fec080a82b0a783.png b/priv/static/packs/icon_email-ed5d2a37fa765e4c5fec080a82b0a783.png Binary files differindex 13967009a..c549e78fa 100644 --- a/priv/static/packs/icon_email-ed5d2a37fa765e4c5fec080a82b0a783.png +++ b/priv/static/packs/icon_email-ed5d2a37fa765e4c5fec080a82b0a783.png diff --git a/priv/static/packs/icon_file_download-0b212ed1bca11e1e02539a20b3821d87.png b/priv/static/packs/icon_file_download-0b212ed1bca11e1e02539a20b3821d87.png Binary files differindex 3f7ac429b..447012b4b 100644 --- a/priv/static/packs/icon_file_download-0b212ed1bca11e1e02539a20b3821d87.png +++ b/priv/static/packs/icon_file_download-0b212ed1bca11e1e02539a20b3821d87.png diff --git a/priv/static/packs/icon_follow_requests-32eaf00987b072b2b12f8015d6a6a250.png b/priv/static/packs/icon_follow_requests-32eaf00987b072b2b12f8015d6a6a250.png Binary files differindex 4123e2a69..7e5f220a6 100644 --- a/priv/static/packs/icon_follow_requests-32eaf00987b072b2b12f8015d6a6a250.png +++ b/priv/static/packs/icon_follow_requests-32eaf00987b072b2b12f8015d6a6a250.png diff --git a/priv/static/packs/icon_grade-1f9e039d0f024626ab071d18098b65a0.png b/priv/static/packs/icon_grade-1f9e039d0f024626ab071d18098b65a0.png Binary files differindex 8c212b7ee..1a4a8a4dc 100644 --- a/priv/static/packs/icon_grade-1f9e039d0f024626ab071d18098b65a0.png +++ b/priv/static/packs/icon_grade-1f9e039d0f024626ab071d18098b65a0.png diff --git a/priv/static/packs/icon_home-433b9d93fc1f035ec09330c2512a4879.png b/priv/static/packs/icon_home-433b9d93fc1f035ec09330c2512a4879.png Binary files differindex 66ce779c0..6bc35c479 100644 --- a/priv/static/packs/icon_home-433b9d93fc1f035ec09330c2512a4879.png +++ b/priv/static/packs/icon_home-433b9d93fc1f035ec09330c2512a4879.png diff --git a/priv/static/packs/icon_keyboard_shortcuts-4b183486762cfcc9f0de7522520a5485.png b/priv/static/packs/icon_keyboard_shortcuts-4b183486762cfcc9f0de7522520a5485.png Binary files differindex d66f3939e..ce82f0885 100644 --- a/priv/static/packs/icon_keyboard_shortcuts-4b183486762cfcc9f0de7522520a5485.png +++ b/priv/static/packs/icon_keyboard_shortcuts-4b183486762cfcc9f0de7522520a5485.png diff --git a/priv/static/packs/icon_likes-27b8551da2d56d81062818c035ed622e.png b/priv/static/packs/icon_likes-27b8551da2d56d81062818c035ed622e.png Binary files differindex 17d7a9c59..997bb0fcc 100644 --- a/priv/static/packs/icon_likes-27b8551da2d56d81062818c035ed622e.png +++ b/priv/static/packs/icon_likes-27b8551da2d56d81062818c035ed622e.png diff --git a/priv/static/packs/icon_lists-ae69bf4fb26c40d2c9b056c55c9153e2.png b/priv/static/packs/icon_lists-ae69bf4fb26c40d2c9b056c55c9153e2.png Binary files differindex 3828946e8..c50ecd936 100644 --- a/priv/static/packs/icon_lists-ae69bf4fb26c40d2c9b056c55c9153e2.png +++ b/priv/static/packs/icon_lists-ae69bf4fb26c40d2c9b056c55c9153e2.png diff --git a/priv/static/packs/icon_local-eade3ebeb7ac50f798cd40ed5fe62232.png b/priv/static/packs/icon_local-eade3ebeb7ac50f798cd40ed5fe62232.png Binary files differindex 5f82df395..261a13a73 100644 --- a/priv/static/packs/icon_local-eade3ebeb7ac50f798cd40ed5fe62232.png +++ b/priv/static/packs/icon_local-eade3ebeb7ac50f798cd40ed5fe62232.png diff --git a/priv/static/packs/icon_lock_open-d377f10d3f005d0d042a1ee1dee8284d.png b/priv/static/packs/icon_lock_open-d377f10d3f005d0d042a1ee1dee8284d.png Binary files differindex c854c3bdb..223deb185 100644 --- a/priv/static/packs/icon_lock_open-d377f10d3f005d0d042a1ee1dee8284d.png +++ b/priv/static/packs/icon_lock_open-d377f10d3f005d0d042a1ee1dee8284d.png diff --git a/priv/static/packs/icon_logout-3abd28c4fc25290e6e4088c50d3352f4.png b/priv/static/packs/icon_logout-3abd28c4fc25290e6e4088c50d3352f4.png Binary files differindex 7ff806f58..9a074d231 100644 --- a/priv/static/packs/icon_logout-3abd28c4fc25290e6e4088c50d3352f4.png +++ b/priv/static/packs/icon_logout-3abd28c4fc25290e6e4088c50d3352f4.png diff --git a/priv/static/packs/icon_mutes-5e7612d5c63fedb3fc59558284304cfc.png b/priv/static/packs/icon_mutes-5e7612d5c63fedb3fc59558284304cfc.png Binary files differindex c2225e966..6296a4972 100644 --- a/priv/static/packs/icon_mutes-5e7612d5c63fedb3fc59558284304cfc.png +++ b/priv/static/packs/icon_mutes-5e7612d5c63fedb3fc59558284304cfc.png diff --git a/priv/static/packs/icon_person_add-44d0a8dfa7dce95be5f6e3cfe0cdd133.png b/priv/static/packs/icon_person_add-44d0a8dfa7dce95be5f6e3cfe0cdd133.png Binary files differindex 6290a42ae..e6204e9c8 100644 --- a/priv/static/packs/icon_person_add-44d0a8dfa7dce95be5f6e3cfe0cdd133.png +++ b/priv/static/packs/icon_person_add-44d0a8dfa7dce95be5f6e3cfe0cdd133.png diff --git a/priv/static/packs/icon_pin-79e04b07bcaa1266eee3164e83f574b4.png b/priv/static/packs/icon_pin-79e04b07bcaa1266eee3164e83f574b4.png Binary files differindex 2329d8c54..e8a94266e 100644 --- a/priv/static/packs/icon_pin-79e04b07bcaa1266eee3164e83f574b4.png +++ b/priv/static/packs/icon_pin-79e04b07bcaa1266eee3164e83f574b4.png diff --git a/priv/static/packs/icon_public-2d798a39bb2bd6314e47b00669686556.png b/priv/static/packs/icon_public-2d798a39bb2bd6314e47b00669686556.png Binary files differindex 3c09460db..ee0b8cc56 100644 --- a/priv/static/packs/icon_public-2d798a39bb2bd6314e47b00669686556.png +++ b/priv/static/packs/icon_public-2d798a39bb2bd6314e47b00669686556.png diff --git a/priv/static/packs/icon_reply-1c00f97d10006dd420bc620b26a79d8a.png b/priv/static/packs/icon_reply-1c00f97d10006dd420bc620b26a79d8a.png Binary files differindex a70093356..544211c8c 100644 --- a/priv/static/packs/icon_reply-1c00f97d10006dd420bc620b26a79d8a.png +++ b/priv/static/packs/icon_reply-1c00f97d10006dd420bc620b26a79d8a.png diff --git a/priv/static/packs/icon_settings-e7c53fb8ee137f93827e2db21f507cb1.png b/priv/static/packs/icon_settings-e7c53fb8ee137f93827e2db21f507cb1.png Binary files differindex 07f5c4519..4c16ceef8 100644 --- a/priv/static/packs/icon_settings-e7c53fb8ee137f93827e2db21f507cb1.png +++ b/priv/static/packs/icon_settings-e7c53fb8ee137f93827e2db21f507cb1.png diff --git a/priv/static/packs/icon_warning-af2b38fe580f274ca4c80479bd12141e.png b/priv/static/packs/icon_warning-af2b38fe580f274ca4c80479bd12141e.png Binary files differindex 7baaac61c..feb67f3ea 100644 --- a/priv/static/packs/icon_warning-af2b38fe580f274ca4c80479bd12141e.png +++ b/priv/static/packs/icon_warning-af2b38fe580f274ca4c80479bd12141e.png diff --git a/priv/static/packs/logo_full-efefe08462ede002abb7fc1e69005cbb.png b/priv/static/packs/logo_full-efefe08462ede002abb7fc1e69005cbb.png Binary files differindex 82d981fc6..19bdd81aa 100644 --- a/priv/static/packs/logo_full-efefe08462ede002abb7fc1e69005cbb.png +++ b/priv/static/packs/logo_full-efefe08462ede002abb7fc1e69005cbb.png diff --git a/priv/static/packs/logo_transparent-73bf4bea5ad08ce44d516e472dc452c1.png b/priv/static/packs/logo_transparent-73bf4bea5ad08ce44d516e472dc452c1.png Binary files differindex 6dbcc2e8d..28ead92d5 100644 --- a/priv/static/packs/logo_transparent-73bf4bea5ad08ce44d516e472dc452c1.png +++ b/priv/static/packs/logo_transparent-73bf4bea5ad08ce44d516e472dc452c1.png diff --git a/priv/static/packs/reticle-6490ecbb61185e86e62dca0845cf2dcf.png b/priv/static/packs/reticle-6490ecbb61185e86e62dca0845cf2dcf.png Binary files differindex 41a5d1c3a..a7d6644c8 100644 --- a/priv/static/packs/reticle-6490ecbb61185e86e62dca0845cf2dcf.png +++ b/priv/static/packs/reticle-6490ecbb61185e86e62dca0845cf2dcf.png diff --git a/priv/static/packs/screenshot-752460e373ba6c7519109936bd0656f6.jpg b/priv/static/packs/screenshot-752460e373ba6c7519109936bd0656f6.jpg Binary files differindex 45b270fbb..ab7462491 100644 --- a/priv/static/packs/screenshot-752460e373ba6c7519109936bd0656f6.jpg +++ b/priv/static/packs/screenshot-752460e373ba6c7519109936bd0656f6.jpg diff --git a/priv/static/packs/start-d443e819b6248a54c6eb466c75938306.png b/priv/static/packs/start-d443e819b6248a54c6eb466c75938306.png Binary files differindex 7843455b6..ea19ee306 100644 --- a/priv/static/packs/start-d443e819b6248a54c6eb466c75938306.png +++ b/priv/static/packs/start-d443e819b6248a54c6eb466c75938306.png diff --git a/priv/static/packs/void-4c8270c17facce6d53726a2ebb9745f2.png b/priv/static/packs/void-4c8270c17facce6d53726a2ebb9745f2.png Binary files differindex d73066688..c2b803c13 100644 --- a/priv/static/packs/void-4c8270c17facce6d53726a2ebb9745f2.png +++ b/priv/static/packs/void-4c8270c17facce6d53726a2ebb9745f2.png diff --git a/priv/static/packs/wave-drawer-ee1bfcbe5811ea31771b7187c7507ee6.png b/priv/static/packs/wave-drawer-ee1bfcbe5811ea31771b7187c7507ee6.png Binary files differindex ca9f9e1d8..6525035dc 100644 --- a/priv/static/packs/wave-drawer-ee1bfcbe5811ea31771b7187c7507ee6.png +++ b/priv/static/packs/wave-drawer-ee1bfcbe5811ea31771b7187c7507ee6.png diff --git a/priv/static/packs/wave-drawer-glitched-33467bf8c8d2b995d6c76d8810aba3db.png b/priv/static/packs/wave-drawer-glitched-33467bf8c8d2b995d6c76d8810aba3db.png Binary files differindex 2290663db..58ba61bca 100644 --- a/priv/static/packs/wave-drawer-glitched-33467bf8c8d2b995d6c76d8810aba3db.png +++ b/priv/static/packs/wave-drawer-glitched-33467bf8c8d2b995d6c76d8810aba3db.png diff --git a/priv/static/static/aurora_borealis.jpg b/priv/static/static/aurora_borealis.jpg Binary files differindex b6a0daf91..230e2abd7 100644 --- a/priv/static/static/aurora_borealis.jpg +++ b/priv/static/static/aurora_borealis.jpg diff --git a/priv/static/static/bg2.jpg b/priv/static/static/bg2.jpg Binary files differindex 60e2311a2..9a47504d1 100644 --- a/priv/static/static/bg2.jpg +++ b/priv/static/static/bg2.jpg diff --git a/priv/static/static/bgalt.jpg b/priv/static/static/bgalt.jpg Binary files differindex fdb666ff0..f6536337b 100644 --- a/priv/static/static/bgalt.jpg +++ b/priv/static/static/bgalt.jpg diff --git a/priv/static/static/img/nsfw.74818f9.png b/priv/static/static/img/nsfw.74818f9.png Binary files differindex d25137767..e32525aa5 100644 --- a/priv/static/static/img/nsfw.74818f9.png +++ b/priv/static/static/img/nsfw.74818f9.png diff --git a/priv/static/static/logo.png b/priv/static/static/logo.png Binary files differindex 7744b1acc..c3c92914b 100644 --- a/priv/static/static/logo.png +++ b/priv/static/static/logo.png diff --git a/test/fixtures/image.jpg b/test/fixtures/image.jpg Binary files differindex 09834bb5c..edff6246b 100644 --- a/test/fixtures/image.jpg +++ b/test/fixtures/image.jpg diff --git a/test/formatter_test.exs b/test/formatter_test.exs index 7d8864bf4..fcdf931b7 100644 --- a/test/formatter_test.exs +++ b/test/formatter_test.exs @@ -181,6 +181,31 @@ defmodule Pleroma.FormatterTest do expected_text = "@a hi" assert {^expected_text, [] = _mentions, [] = _tags} = Formatter.linkify(text) end + + test "given the 'safe_mention' option, it will only mention people in the beginning" do + user = insert(:user) + _other_user = insert(:user) + third_user = insert(:user) + text = " @#{user.nickname} hey dude i hate @#{third_user.nickname}" + {expected_text, mentions, [] = _tags} = Formatter.linkify(text, safe_mention: true) + + assert mentions == [{"@#{user.nickname}", user}] + + assert expected_text == + "<span class='h-card'><a data-user='#{user.id}' class='u-url mention' href='#{ + user.ap_id + }'>@<span>#{user.nickname}</span></a></span> hey dude i hate <span class='h-card'><a data-user='#{ + third_user.id + }' class='u-url mention' href='#{third_user.ap_id}'>@<span>#{third_user.nickname}</span></a></span>" + end + + test "given the 'safe_mention' option, it will still work without any mention" do + text = "A post without any mention" + {expected_text, mentions, [] = _tags} = Formatter.linkify(text, safe_mention: true) + + assert mentions == [] + assert expected_text == text + end end describe ".parse_tags" do diff --git a/test/tasks/relay_test.exs b/test/tasks/relay_test.exs index c9d90fa2e..535dc3756 100644 --- a/test/tasks/relay_test.exs +++ b/test/tasks/relay_test.exs @@ -60,7 +60,8 @@ defmodule Mix.Tasks.Pleroma.RelayTest do ActivityPub.fetch_activities([], %{ "type" => "Undo", "actor_id" => follower_id, - "limit" => 1 + "limit" => 1, + "skip_preload" => true }) assert undo_activity.data["type"] == "Undo" diff --git a/test/upload_test.exs b/test/upload_test.exs index bdda01b3f..946ebcb5a 100644 --- a/test/upload_test.exs +++ b/test/upload_test.exs @@ -56,7 +56,7 @@ defmodule Pleroma.UploadTest do assert List.first(data["url"])["href"] == Pleroma.Web.base_url() <> - "/media/e7a6d0cf595bff76f14c9a98b6c199539559e8b844e02e51e5efcfd1f614a2df.jpg" + "/media/e30397b58d226d6583ab5b8b3c5defb0c682bda5c31ef07a9f57c1c4986e3781.jpg" end test "copies the file to the configured folder without deduping" do diff --git a/test/user_test.exs b/test/user_test.exs index 1f54f3e30..442599910 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -879,7 +879,11 @@ defmodule Pleroma.UserTest do user = insert(:user, %{nickname: "john"}) Enum.each(["john", "jo", "j"], fn query -> - assert user == User.search(query) |> List.first() |> Map.put(:search_rank, nil) + assert user == + User.search(query) + |> List.first() + |> Map.put(:search_rank, nil) + |> Map.put(:search_type, nil) end) end @@ -887,7 +891,11 @@ defmodule Pleroma.UserTest do user = insert(:user, %{name: "John Doe"}) Enum.each(["John Doe", "JOHN", "doe", "j d", "j", "d"], fn query -> - assert user == User.search(query) |> List.first() |> Map.put(:search_rank, nil) + assert user == + User.search(query) + |> List.first() + |> Map.put(:search_rank, nil) + |> Map.put(:search_type, nil) end) end @@ -941,6 +949,7 @@ defmodule Pleroma.UserTest do User.search("lain@pleroma.soykaf.com") |> List.first() |> Map.put(:search_rank, nil) + |> Map.put(:search_type, nil) end test "does not yield false-positive matches" do @@ -958,7 +967,7 @@ defmodule Pleroma.UserTest do user = User.get_by_ap_id("http://mastodon.example.org/users/admin") assert length(results) == 1 - assert user == result |> Map.put(:search_rank, nil) + assert user == result |> Map.put(:search_rank, nil) |> Map.put(:search_type, nil) end end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 035778218..c8c3b6d5f 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -140,7 +140,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do activity = insert(:note_activity) {:ok, new_activity} = ActivityPub.insert(activity.data) - assert activity == new_activity + assert activity.id == new_activity.id end test "inserts a given map into the activity database, giving it an id if it has none." do @@ -270,7 +270,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do booster = insert(:user) {:ok, user} = User.block(user, %{ap_id: activity_one.data["actor"]}) - activities = ActivityPub.fetch_activities([], %{"blocking_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) @@ -278,7 +279,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do {:ok, user} = User.unblock(user, %{ap_id: activity_one.data["actor"]}) - activities = ActivityPub.fetch_activities([], %{"blocking_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) @@ -289,14 +291,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do %Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id) activity_three = Repo.get(Activity, activity_three.id) - activities = ActivityPub.fetch_activities([], %{"blocking_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"blocking_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) refute Enum.member?(activities, activity_three) refute Enum.member?(activities, boost_activity) assert Enum.member?(activities, activity_one) - activities = ActivityPub.fetch_activities([], %{"blocking_user" => nil}) + activities = + ActivityPub.fetch_activities([], %{"blocking_user" => nil, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) @@ -312,14 +316,20 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do booster = insert(:user) {:ok, user} = User.mute(user, %User{ap_id: activity_one.data["actor"]}) - activities = ActivityPub.fetch_activities([], %{"muting_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"muting_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) refute Enum.member?(activities, activity_one) # Calling with 'with_muted' will deliver muted activities, too. - activities = ActivityPub.fetch_activities([], %{"muting_user" => user, "with_muted" => true}) + activities = + ActivityPub.fetch_activities([], %{ + "muting_user" => user, + "with_muted" => true, + "skip_preload" => true + }) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) @@ -327,7 +337,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do {:ok, user} = User.unmute(user, %User{ap_id: activity_one.data["actor"]}) - activities = ActivityPub.fetch_activities([], %{"muting_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"muting_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) @@ -338,14 +349,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do %Activity{} = boost_activity = Activity.get_create_by_object_ap_id(id) activity_three = Repo.get(Activity, activity_three.id) - activities = ActivityPub.fetch_activities([], %{"muting_user" => user}) + activities = + ActivityPub.fetch_activities([], %{"muting_user" => user, "skip_preload" => true}) assert Enum.member?(activities, activity_two) refute Enum.member?(activities, activity_three) refute Enum.member?(activities, boost_activity) assert Enum.member?(activities, activity_one) - activities = ActivityPub.fetch_activities([], %{"muting_user" => nil}) + activities = ActivityPub.fetch_activities([], %{"muting_user" => nil, "skip_preload" => true}) assert Enum.member?(activities, activity_two) assert Enum.member?(activities, activity_three) diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index f83f80b40..34aa5bf18 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -10,6 +10,24 @@ defmodule Pleroma.Web.CommonAPITest do import Pleroma.Factory + test "with the safe_dm_mention option set, it does not mention people beyond the initial tags" do + har = insert(:user) + jafnhar = insert(:user) + tridi = insert(:user) + option = Pleroma.Config.get([:instance, :safe_dm_mentions]) + Pleroma.Config.put([:instance, :safe_dm_mentions], true) + + {:ok, activity} = + CommonAPI.post(har, %{ + "status" => "@#{jafnhar.nickname} hey, i never want to see @#{tridi.nickname} again", + "visibility" => "direct" + }) + + refute tridi.ap_id in activity.recipients + assert jafnhar.ap_id in activity.recipients + Pleroma.Config.put([:instance, :safe_dm_mentions], option) + end + test "it de-duplicates tags" do user = insert(:user) {:ok, activity} = CommonAPI.post(user, %{"status" => "#2hu #2HU"}) diff --git a/test/web/common_api/common_api_utils_test.exs b/test/web/common_api/common_api_utils_test.exs index 4c97b0d62..e04b9f9b5 100644 --- a/test/web/common_api/common_api_utils_test.exs +++ b/test/web/common_api/common_api_utils_test.exs @@ -4,6 +4,7 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do alias Pleroma.Builders.UserBuilder + alias Pleroma.Object alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.Endpoint use Pleroma.DataCase @@ -136,4 +137,20 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do assert output == expected end end + + describe "context_to_conversation_id" do + test "creates a mapping object" do + conversation_id = Utils.context_to_conversation_id("random context") + object = Object.get_by_ap_id("random context") + + assert conversation_id == object.id + end + + test "returns an existing mapping for an existing object" do + {:ok, object} = Object.context_mapping("random context") |> Repo.insert() + conversation_id = Utils.context_to_conversation_id("random context") + + assert conversation_id == object.id + end + end end diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs index ade0ca9f9..e1c9b2c8f 100644 --- a/test/web/mastodon_api/status_view_test.exs +++ b/test/web/mastodon_api/status_view_test.exs @@ -9,6 +9,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI + alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.OStatus @@ -72,6 +73,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do note = insert(:note_activity) user = User.get_cached_by_ap_id(note.data["actor"]) + convo_id = Utils.context_to_conversation_id(note.data["object"]["context"]) + status = StatusView.render("status.json", %{activity: note}) created_at = @@ -122,7 +125,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do } ], pleroma: %{ - local: true + local: true, + conversation_id: convo_id } } diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs index 038feecc1..2fc42b7cc 100644 --- a/test/web/node_info_test.exs +++ b/test/web/node_info_test.exs @@ -108,4 +108,27 @@ defmodule Pleroma.Web.NodeInfoTest do assert result = json_response(conn, 200) assert Pleroma.Application.repository() == result["software"]["repository"] end + + test "it returns the safe_dm_mentions feature if enabled", %{conn: conn} do + option = Pleroma.Config.get([:instance, :safe_dm_mentions]) + Pleroma.Config.put([:instance, :safe_dm_mentions], true) + + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert "safe_dm_mentions" in response["metadata"]["features"] + + Pleroma.Config.put([:instance, :safe_dm_mentions], false) + + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + refute "safe_dm_mentions" in response["metadata"]["features"] + + Pleroma.Config.put([:instance, :safe_dm_mentions], option) + end end diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index c8dd3fd7a..b823bfd68 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -445,22 +445,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do :ok end - describe "context_to_conversation_id" do - test "creates a mapping object" do - conversation_id = TwitterAPI.context_to_conversation_id("random context") - object = Object.get_by_ap_id("random context") - - assert conversation_id == object.id - end - - test "returns an existing mapping for an existing object" do - {:ok, object} = Object.context_mapping("random context") |> Repo.insert() - conversation_id = TwitterAPI.context_to_conversation_id("random context") - - assert conversation_id == object.id - end - end - describe "fetching a user by uri" do test "fetches a user by uri" do id = "https://mastodon.social/users/lambadalambda" diff --git a/test/web/twitter_api/util_controller_test.exs b/test/web/twitter_api/util_controller_test.exs index 6e8a25056..832fdc096 100644 --- a/test/web/twitter_api/util_controller_test.exs +++ b/test/web/twitter_api/util_controller_test.exs @@ -75,6 +75,29 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do end describe "GET /api/statusnet/config.json" do + test "returns the state of safe_dm_mentions flag", %{conn: conn} do + option = Pleroma.Config.get([:instance, :safe_dm_mentions]) + Pleroma.Config.put([:instance, :safe_dm_mentions], true) + + response = + conn + |> get("/api/statusnet/config.json") + |> json_response(:ok) + + assert response["site"]["safeDMMentionsEnabled"] == "1" + + Pleroma.Config.put([:instance, :safe_dm_mentions], false) + + response = + conn + |> get("/api/statusnet/config.json") + |> json_response(:ok) + + assert response["site"]["safeDMMentionsEnabled"] == "0" + + Pleroma.Config.put([:instance, :safe_dm_mentions], option) + end + test "it returns the managed config", %{conn: conn} do Pleroma.Config.put([:instance, :managed_config], false) Pleroma.Config.put([:fe], theme: "rei-ayanami-towel") diff --git a/test/web/twitter_api/views/activity_view_test.exs b/test/web/twitter_api/views/activity_view_test.exs index d9df01c6e..a1776b3e6 100644 --- a/test/web/twitter_api/views/activity_view_test.exs +++ b/test/web/twitter_api/views/activity_view_test.exs @@ -12,7 +12,6 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.TwitterAPI.ActivityView - alias Pleroma.Web.TwitterAPI.TwitterAPI alias Pleroma.Web.TwitterAPI.UserView import Pleroma.Factory @@ -129,7 +128,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do result = ActivityView.render("activity.json", activity: activity) - convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + convo_id = Utils.context_to_conversation_id(activity.data["object"]["context"]) expected = %{ "activity_type" => "post", @@ -177,12 +176,12 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do other_user = insert(:user, %{nickname: "shp"}) {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) - convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + convo_id = Utils.context_to_conversation_id(activity.data["object"]["context"]) mocks = [ { - TwitterAPI, - [], + Utils, + [:passthrough], [context_to_conversation_id: fn _ -> false end] }, { @@ -197,7 +196,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do assert result["statusnet_conversation_id"] == convo_id assert result["user"] - refute called(TwitterAPI.context_to_conversation_id(:_)) + refute called(Utils.context_to_conversation_id(:_)) refute called(User.get_cached_by_ap_id(user.ap_id)) refute called(User.get_cached_by_ap_id(other_user.ap_id)) end @@ -280,7 +279,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityViewTest do {:ok, activity} = CommonAPI.post(user, %{"status" => "Hey @shp!"}) {:ok, announce, _object} = CommonAPI.repeat(activity.id, other_user) - convo_id = TwitterAPI.context_to_conversation_id(activity.data["object"]["context"]) + convo_id = Utils.context_to_conversation_id(activity.data["object"]["context"]) activity = Repo.get(Activity, activity.id) |