diff options
author | lain <lain@soykaf.club> | 2018-05-04 20:30:29 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-05-04 20:30:29 +0200 |
commit | fcd3eca167508c1dde290f431353ace9d513de86 (patch) | |
tree | e1dc90db21e854b94544c8407c1cef5ad538dc9d /lib | |
parent | 5b6d6d7f2d9363c494642bfda4d6e4d12daa53c7 (diff) | |
download | pleroma-fcd3eca167508c1dde290f431353ace9d513de86.tar.gz |
MastodonAPI: Support idempotency key.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/mastodon_api/mastodon_api_controller.ex | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index c84c226e8..e2243538a 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -275,7 +275,19 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do |> Map.put("in_reply_to_status_id", params["in_reply_to_id"]) |> Map.put("no_attachment_links", true) - {:ok, activity} = CommonAPI.post(user, params) + idempotency_key = + case get_req_header(conn, "idempotency-key") do + [key] -> key + _ -> Ecto.UUID.generate() + end + + {:ok, activity} = + Cachex.get!( + :user_cache, + "idem:#{idempotency_key}", + fallback: fn _ -> CommonAPI.post(user, params) end + ) + render(conn, StatusView, "status.json", %{activity: activity, for: user, as: :activity}) end |