aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-05-04 20:30:29 +0200
committerlain <lain@soykaf.club>2018-05-04 20:30:29 +0200
commitfcd3eca167508c1dde290f431353ace9d513de86 (patch)
treee1dc90db21e854b94544c8407c1cef5ad538dc9d /lib
parent5b6d6d7f2d9363c494642bfda4d6e4d12daa53c7 (diff)
downloadpleroma-fcd3eca167508c1dde290f431353ace9d513de86.tar.gz
MastodonAPI: Support idempotency key.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex14
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