aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-04-21 03:59:11 +0200
committerRoger Braun <roger@rogerbraun.net>2017-04-21 03:59:11 +0200
commit424e0e77792361d8f43a085c7cd3b2e9d566a22d (patch)
treec007aa0d4f44b7d1aee3d3afd5ab2fe20f983959 /lib
parent1b9cc721a0d49d786b4864c2b8aceaf49b9ff088 (diff)
downloadpleroma-424e0e77792361d8f43a085c7cd3b2e9d566a22d.tar.gz
Add Websub verification.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/websub/websub.ex23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/pleroma/web/websub/websub.ex b/lib/pleroma/web/websub/websub.ex
new file mode 100644
index 000000000..c7752487c
--- /dev/null
+++ b/lib/pleroma/web/websub/websub.ex
@@ -0,0 +1,23 @@
+defmodule Pleroma.Web.Websub do
+ alias Pleroma.Repo
+
+ def verify(subscription, getter \\ &HTTPoison.get/3 ) do
+ challenge = Base.encode16(:crypto.strong_rand_bytes(8))
+ lease_seconds = NaiveDateTime.diff(subscription.inserted_at, subscription.valid_until)
+ with {:ok, response} <- getter.(subscription.callback, [], [params: %{
+ "hub.challenge": challenge,
+ "hub.lease_seconds": lease_seconds,
+ "hub.topic": subscription.topic,
+ "hub.mode": "subscribe"
+ }]),
+ ^challenge <- response.body
+ do
+ changeset = Ecto.Changeset.change(subscription, %{state: "active"})
+ Repo.update(changeset)
+ else _e ->
+ changeset = Ecto.Changeset.change(subscription, %{state: "rejected"})
+ {:ok, subscription } = Repo.update(changeset)
+ {:error, subscription}
+ end
+ end
+end