diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-04-21 03:59:11 +0200 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-04-21 03:59:11 +0200 |
commit | 424e0e77792361d8f43a085c7cd3b2e9d566a22d (patch) | |
tree | c007aa0d4f44b7d1aee3d3afd5ab2fe20f983959 /lib | |
parent | 1b9cc721a0d49d786b4864c2b8aceaf49b9ff088 (diff) | |
download | pleroma-424e0e77792361d8f43a085c7cd3b2e9d566a22d.tar.gz |
Add Websub verification.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/websub/websub.ex | 23 |
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 |