diff options
| -rw-r--r-- | config/test.exs | 2 | ||||
| -rw-r--r-- | installation/pleroma.nginx | 5 | ||||
| -rw-r--r-- | lib/pleroma/application.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/object.ex | 20 | ||||
| -rw-r--r-- | lib/pleroma/user.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 14 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 5 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 6 | ||||
| -rw-r--r-- | mix.exs | 5 | ||||
| -rw-r--r-- | mix.lock | 20 | ||||
| -rw-r--r-- | test/support/factory.ex | 3 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 13 | ||||
| -rw-r--r-- | test/web/twitter_api/views/notification_view_test.exs | 2 | ||||
| -rw-r--r-- | test/web/twitter_api/views/user_view_test.exs | 2 | 
15 files changed, 64 insertions, 55 deletions
| diff --git a/config/test.exs b/config/test.exs index 0c73f892a..1bd11dee4 100644 --- a/config/test.exs +++ b/config/test.exs @@ -21,7 +21,7 @@ config :pleroma, Pleroma.Repo,    pool: Ecto.Adapters.SQL.Sandbox  # Reduce hash rounds for testing -config :comeonin, :pbkdf2_rounds, 1 +config :pbkdf2_elixir, rounds: 1  config :pleroma, :websub, Pleroma.Web.WebsubMock  config :pleroma, :ostatus, Pleroma.Web.OStatusMock diff --git a/installation/pleroma.nginx b/installation/pleroma.nginx index 44905da49..b6ca30cc9 100644 --- a/installation/pleroma.nginx +++ b/installation/pleroma.nginx @@ -52,8 +52,9 @@ server {          # if you do not want remote frontends to be able to access your Pleroma backend          # server, remove these lines.          add_header 'Access-Control-Allow-Origin' '*' always; -        add_header 'Access-Control-Allow-Methods' 'POST, GET, OPTIONS' always; -        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always; +        add_header 'Access-Control-Allow-Methods' 'POST, PUT, DELETE, GET, PATCH, OPTIONS' always; +        add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Idempotency-Key' always; +        add_header 'Access-Control-Expose-Headers' 'Link, X-RateLimit-Reset, X-RateLimit-Limit, X-RateLimit-Remaining, X-Request-Id' always;          if ($request_method = OPTIONS) {              return 204;          } diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index e1e3bcd63..a89728471 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -5,6 +5,7 @@ defmodule Pleroma.Application do    # for more information on OTP Applications    def start(_type, _args) do      import Supervisor.Spec +    import Cachex.Spec      # Define workers and child supervisors to be supervised      children = @@ -28,8 +29,11 @@ defmodule Pleroma.Application do            [              :idempotency_cache,              [ -              default_ttl: :timer.seconds(6 * 60 * 60), -              ttl_interval: :timer.seconds(60), +              expiration: +                expiration( +                  default: :timer.seconds(6 * 60 * 60), +                  interval: :timer.seconds(60) +                ),                limit: 2500              ]            ], diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 558e151b0..ff2af4a6f 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -33,19 +33,15 @@ defmodule Pleroma.Object do      else        key = "object:#{ap_id}" -      Cachex.get!( -        :user_cache, -        key, -        fallback: fn _ -> -          object = get_by_ap_id(ap_id) - -          if object do -            {:commit, object} -          else -            {:ignore, object} -          end +      Cachex.fetch!(:user_cache, key, fn _ -> +        object = get_by_ap_id(ap_id) + +        if object do +          {:commit, object} +        else +          {:ignore, object}          end -      ) +      end)      end    end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 6a8129ac8..690cc7cf3 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -223,9 +223,9 @@ defmodule Pleroma.User do    def update_and_set_cache(changeset) do      with {:ok, user} <- Repo.update(changeset) do -      Cachex.set(:user_cache, "ap_id:#{user.ap_id}", user) -      Cachex.set(:user_cache, "nickname:#{user.nickname}", user) -      Cachex.set(:user_cache, "user_info:#{user.id}", user_info(user)) +      Cachex.put(:user_cache, "ap_id:#{user.ap_id}", user) +      Cachex.put(:user_cache, "nickname:#{user.nickname}", user) +      Cachex.put(:user_cache, "user_info:#{user.id}", user_info(user))        {:ok, user}      else        e -> e @@ -239,12 +239,12 @@ defmodule Pleroma.User do    def get_cached_by_ap_id(ap_id) do      key = "ap_id:#{ap_id}" -    Cachex.get!(:user_cache, key, fallback: fn _ -> get_by_ap_id(ap_id) end) +    Cachex.fetch!(:user_cache, key, fn _ -> get_by_ap_id(ap_id) end)    end    def get_cached_by_nickname(nickname) do      key = "nickname:#{nickname}" -    Cachex.get!(:user_cache, key, fallback: fn _ -> get_or_fetch_by_nickname(nickname) end) +    Cachex.fetch!(:user_cache, key, fn _ -> get_or_fetch_by_nickname(nickname) end)    end    def get_by_nickname(nickname) do @@ -260,7 +260,7 @@ defmodule Pleroma.User do    def get_cached_user_info(user) do      key = "user_info:#{user.id}" -    Cachex.get!(:user_cache, key, fallback: fn _ -> user_info(user) end) +    Cachex.fetch!(:user_cache, key, fn _ -> user_info(user) end)    end    def fetch_by_nickname(nickname) do diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index a31452a63..7d6fd8632 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -229,7 +229,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do            "object" => %{"type" => "Announce", "object" => object_id},            "actor" => actor,            "id" => id -        } = data +        } = _data        ) do      with %User{} = actor <- User.get_or_fetch_by_ap_id(actor),           {:ok, object} <- @@ -237,7 +237,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do           {:ok, activity, _, _} <- ActivityPub.unannounce(actor, object, id, false) do        {:ok, activity}      else -      e -> :error +      _e -> :error      end    end @@ -247,7 +247,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do            "object" => %{"type" => "Like", "object" => object_id},            "actor" => actor,            "id" => id -        } = data +        } = _data        ) do      with %User{} = actor <- User.get_or_fetch_by_ap_id(actor),           {:ok, object} <- @@ -255,7 +255,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do           {:ok, activity, _, _} <- ActivityPub.unlike(actor, object, id, false) do        {:ok, activity}      else -      e -> :error +      _e -> :error      end    end @@ -516,10 +516,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do    def maybe_fix_user_url(data) do      if is_map(data["url"]) do -      data = Map.put(data, "url", data["url"]["href"]) +      Map.put(data, "url", data["url"]["href"]) +    else +      data      end - -    data    end    def maybe_fix_user_object(data) do diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 937f032c3..a3feca480 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -242,8 +242,9 @@ defmodule Pleroma.Web.ActivityPub.Utils do            fragment(              "? @> ?",              activity.data, -            ^%{type: "Follow", actor: follower_id, object: followed_id} +            ^%{type: "Follow", object: followed_id}            ), +        where: activity.actor == ^follower_id,          order_by: [desc: :id],          limit: 1        ) @@ -260,7 +261,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do      query =        from(          activity in Activity, -        where: fragment("(?)->>'actor' = ?", activity.data, ^actor), +        where: activity.actor == ^actor,          # this is to use the index          where:            fragment( diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 4ac45b592..9c9951371 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -133,7 +133,7 @@ defmodule Pleroma.Web.CommonAPI.Utils do        "context" => context,        "attachment" => attachments,        "actor" => actor, -      "tag" => tags |> Enum.map(fn {_, tag} -> tag end) +      "tag" => tags |> Enum.map(fn {_, tag} -> tag end) |> Enum.uniq()      }      if inReplyTo do diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index 85f9c5b7b..e6365620e 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -275,11 +275,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do        end      {:ok, activity} = -      Cachex.get!( -        :idempotency_cache, -        idempotency_key, -        fallback: fn _ -> CommonAPI.post(user, params) end -      ) +      Cachex.fetch!(:idempotency_cache, idempotency_key, fn _ -> CommonAPI.post(user, params) end)      render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity})    end @@ -36,12 +36,13 @@ defmodule Pleroma.Mixfile do        {:postgrex, ">= 0.0.0"},        {:gettext, "~> 0.11"},        {:cowboy, "~> 1.0", override: true}, -      {:comeonin, "~> 3.0"}, +      {:comeonin, "~> 4.0"}, +      {:pbkdf2_elixir, "~> 0.12"},        {:trailing_format_plug, "~> 0.0.5"},        {:html_sanitize_ex, "~> 1.3.0-rc1"},        {:phoenix_html, "~> 2.10"},        {:calendar, "~> 0.16.1"}, -      {:cachex, "~> 2.1"}, +      {:cachex, "~> 3.0"},        {:httpoison, "~> 1.1.0"},        {:jason, "~> 1.0"},        {:ex_machina, "~> 2.0", only: :test}, @@ -1,42 +1,37 @@  %{    "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, -  "cachex": {:hex, :cachex, "2.1.0", "fad49b4e78d11c6c314e75bd8c9408f5b78cb065c047442798caed10803ee3be", [:mix], [{:eternal, "~> 1.1", [hex: :eternal, repo: "hexpm", optional: false]}], "hexpm"}, +  "cachex": {:hex, :cachex, "3.0.2", "1351caa4e26e29f7d7ec1d29b53d6013f0447630bbf382b4fb5d5bad0209f203", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm"},    "calendar": {:hex, :calendar, "0.16.1", "782327ad8bae7c797b887840dc4ddb933f05ce6e333e5b04964d7a5d5f79bde3", [:mix], [{:tzdata, "~> 0.5.8 or ~> 0.1.201603", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm"},    "certifi": {:hex, :certifi, "2.3.1", "d0f424232390bf47d82da8478022301c561cf6445b5b5fb6a84d49a9e76d2639", [:rebar3], [{:parse_trans, "3.2.0", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"}, -  "comeonin": {:hex, :comeonin, "3.2.0", "cb10995a22aed6812667efb3856f548818c85d85394d8132bc116fbd6995c1ef", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm"}, -  "con_cache": {:hex, :con_cache, "0.12.0", "2d961aec219aa5a914473873f348f5a6088292dc69d5192a9d25f8a1e13e9905", [:mix], [{:exactor, "~> 2.2.0", [hex: :exactor, optional: false]}]}, +  "comeonin": {:hex, :comeonin, "4.1.1", "c7304fc29b45b897b34142a91122bc72757bc0c295e9e824999d5179ffc08416", [:mix], [{:argon2_elixir, "~> 1.2", [hex: :argon2_elixir, repo: "hexpm", optional: true]}, {:bcrypt_elixir, "~> 0.12.1 or ~> 1.0", [hex: :bcrypt_elixir, repo: "hexpm", optional: true]}, {:pbkdf2_elixir, "~> 0.12", [hex: :pbkdf2_elixir, repo: "hexpm", optional: true]}], "hexpm"},    "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm"},    "cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm"},    "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], [], "hexpm"}, -  "credo": {:hex, :credo, "0.9.1", "f021affa11b32a94dc2e807a6472ce0914289c9132f99644a97fc84432b202a1", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:poison, ">= 0.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, +  "credo": {:hex, :credo, "0.9.2", "841d316612f568beb22ba310d816353dddf31c2d94aa488ae5a27bb53760d0bf", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:poison, ">= 0.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"},    "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"},    "decimal": {:hex, :decimal, "1.5.0", "b0433a36d0e2430e3d50291b1c65f53c37d56f83665b43d79963684865beab68", [:mix], [], "hexpm"}, -  "deppie": {:hex, :deppie, "1.1.0", "cfb6fcee7dfb64eb78cb8505537971a0805131899326ad469ef10df04520f451", [:mix], []},    "ecto": {:hex, :ecto, "2.2.10", "e7366dc82f48f8dd78fcbf3ab50985ceeb11cb3dc93435147c6e13f2cda0992e", [: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"}, -  "elixir_make": {:hex, :elixir_make, "0.4.1", "6628b86053190a80b9072382bb9756a6c78624f208ec0ff22cb94c8977d80060", [:mix], [], "hexpm"},    "eternal": {:hex, :eternal, "1.2.0", "e2a6b6ce3b8c248f7dc31451aefca57e3bdf0e48d73ae5043229380a67614c41", [:mix], [], "hexpm"},    "ex_machina": {:hex, :ex_machina, "2.2.0", "fec496331e04fc2db2a1a24fe317c12c0c4a50d2beb8ebb3531ed1f0d84be0ed", [:mix], [{:ecto, "~> 2.1", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, -  "exactor": {:hex, :exactor, "2.2.3", "a6972f43bb6160afeb73e1d8ab45ba604cd0ac8b5244c557093f6e92ce582786", [:mix], []}, -  "fs": {:hex, :fs, "2.12.0", "ad631efacc9a5683c8eaa1b274e24fa64a1b8eb30747e9595b93bec7e492e25e", [:rebar3], []},    "gettext": {:hex, :gettext, "0.15.0", "40a2b8ce33a80ced7727e36768499fc9286881c43ebafccae6bab731e2b2b8ce", [:mix], [], "hexpm"},    "hackney": {:hex, :hackney, "1.12.1", "8bf2d0e11e722e533903fe126e14d6e7e94d9b7983ced595b75f532e04b7fdc7", [:rebar3], [{:certifi, "2.3.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.1.1", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"},    "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, -  "httpoison": {:hex, :httpoison, "1.1.0", "497949fb62924432f64a45269d20e6f61ecf35084ffa270917afcdb7cd4d8061", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, +  "httpoison": {:hex, :httpoison, "1.1.1", "96ed7ab79f78a31081bb523eefec205fd2900a02cda6dbc2300e7a1226219566", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},    "idna": {:hex, :idna, "5.1.1", "cbc3b2fa1645113267cc59c760bafa64b2ea0334635ef06dbac8801e42f7279c", [:rebar3], [{:unicode_util_compat, "0.3.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"},    "jason": {:hex, :jason, "1.0.0", "0f7cfa9bdb23fed721ec05419bcee2b2c21a77e926bce0deda029b5adc716fe2", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},    "meck": {:hex, :meck, "0.8.9", "64c5c0bd8bcca3a180b44196265c8ed7594e16bcc845d0698ec6b4e577f48188", [:rebar3], [], "hexpm"},    "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"},    "mime": {:hex, :mime, "1.2.0", "78adaa84832b3680de06f88f0997e3ead3b451a440d183d688085be2d709b534", [:mix], [], "hexpm"},    "mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"}, -  "mix_test_watch": {:hex, :mix_test_watch, "0.3.3", "70859889a8d1d43d1b75d69d87258a301f43209a17787cdb2bd9cab42adf271d", [:mix], [{:fs, "~> 2.12", [hex: :fs, optional: false]}]},    "mochiweb": {:hex, :mochiweb, "2.15.0", "e1daac474df07651e5d17cc1e642c4069c7850dc4508d3db7263a0651330aacc", [:rebar3], [], "hexpm"},    "mock": {:hex, :mock, "0.3.1", "994f00150f79a0ea50dc9d86134cd9ebd0d177ad60bd04d1e46336cdfdb98ff9", [:mix], [{:meck, "~> 0.8.8", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"},    "parse_trans": {:hex, :parse_trans, "3.2.0", "2adfa4daf80c14dc36f522cf190eb5c4ee3e28008fc6394397c16f62a26258c2", [:rebar3], [], "hexpm"}, +  "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "0.12.3", "6706a148809a29c306062862c803406e88f048277f6e85b68faf73291e820b84", [:mix], [], "hexpm"},    "phoenix": {:hex, :phoenix, "1.3.2", "2a00d751f51670ea6bc3f2ba4e6eb27ecb8a2c71e7978d9cd3e5de5ccf7378bd", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "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_html": {:hex, :phoenix_html, "2.11.1", "77b6f7fbd252168c6ec4f573de648d37cc5258cda13266ef001fbf99267eb6f3", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, +  "phoenix_html": {:hex, :phoenix_html, "2.11.2", "86ebd768258ba60a27f5578bec83095bdb93485d646fc4111db8844c316602d6", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},    "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.0.2", "bfa7fd52788b5eaa09cb51ff9fcad1d9edfeb68251add458523f839392f034c1", [:mix], [], "hexpm"}, -  "plug": {:hex, :plug, "1.5.0", "224b25b4039bedc1eac149fb52ed456770b9678bbf0349cdd810460e1e09195b", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.1", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm"}, +  "plug": {:hex, :plug, "1.5.1", "1ff35bdecfb616f1a2b1c935ab5e4c47303f866cb929d2a76f0541e553a58165", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1 or ~> 2.3", [hex: :cowboy, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}], "hexpm"},    "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"},    "poolboy": {:hex, :poolboy, "1.5.1", "6b46163901cfd0a1b43d692657ed9d7e599853b3b21b95ae5ae0a777cf9b6ca8", [:rebar], [], "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"}, @@ -45,4 +40,5 @@    "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"},    "tzdata": {:hex, :tzdata, "0.5.16", "13424d3afc76c68ff607f2df966c0ab4f3258859bbe3c979c9ed1606135e7352", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"},    "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"}, +  "unsafe": {:hex, :unsafe, "1.0.0", "7c21742cd05380c7875546b023481d3a26f52df8e5dfedcb9f958f322baae305", [:mix], [], "hexpm"},  } diff --git a/test/support/factory.ex b/test/support/factory.ex index 8e21e2562..b2e98c8d1 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -95,7 +95,8 @@ defmodule Pleroma.Factory do      }      %Pleroma.Activity{ -      data: data +      data: data, +      actor: follower.ap_id      }    end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs new file mode 100644 index 000000000..b597e6e0a --- /dev/null +++ b/test/web/common_api/common_api_test.exs @@ -0,0 +1,13 @@ +defmodule Pleroma.Web.CommonAPI.UtilsTest do +  use Pleroma.DataCase +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  test "it de-duplicates tags" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "#2hu #2HU"}) + +    assert activity.data["object"]["tag"] == ["2hu"] +  end +end diff --git a/test/web/twitter_api/views/notification_view_test.exs b/test/web/twitter_api/views/notification_view_test.exs index e3b140657..79eafda7d 100644 --- a/test/web/twitter_api/views/notification_view_test.exs +++ b/test/web/twitter_api/views/notification_view_test.exs @@ -24,7 +24,7 @@ defmodule Pleroma.Web.TwitterAPI.NotificationViewTest do      {:ok, follower} = User.follow(follower, user)      {:ok, activity} = ActivityPub.follow(follower, user) -    Cachex.set(:user_cache, "user_info:#{user.id}", User.user_info(Repo.get!(User, user.id))) +    Cachex.put(:user_cache, "user_info:#{user.id}", User.user_info(Repo.get!(User, user.id)))      [follow_notif] = Notification.for_user(user)      represented = %{ diff --git a/test/web/twitter_api/views/user_view_test.exs b/test/web/twitter_api/views/user_view_test.exs index dd55c0b7e..9f8bf4cdc 100644 --- a/test/web/twitter_api/views/user_view_test.exs +++ b/test/web/twitter_api/views/user_view_test.exs @@ -31,7 +31,7 @@ defmodule Pleroma.Web.TwitterAPI.UserViewTest do      User.follow(second_follower, user)      User.follow(user, follower)      {:ok, user} = User.update_follower_count(user) -    Cachex.set(:user_cache, "user_info:#{user.id}", User.user_info(Repo.get!(User, user.id))) +    Cachex.put(:user_cache, "user_info:#{user.id}", User.user_info(Repo.get!(User, user.id)))      image = "http://localhost:4001/images/avi.png"      banner = "http://localhost:4001/images/banner.png" | 
