c7752487c296bde7e32571d21fbdc849d0a08d61
[akkoma] / lib / pleroma / web / websub / websub.ex
1 defmodule Pleroma.Web.Websub do
2 alias Pleroma.Repo
3
4 def verify(subscription, getter \\ &HTTPoison.get/3 ) do
5 challenge = Base.encode16(:crypto.strong_rand_bytes(8))
6 lease_seconds = NaiveDateTime.diff(subscription.inserted_at, subscription.valid_until)
7 with {:ok, response} <- getter.(subscription.callback, [], [params: %{
8 "hub.challenge": challenge,
9 "hub.lease_seconds": lease_seconds,
10 "hub.topic": subscription.topic,
11 "hub.mode": "subscribe"
12 }]),
13 ^challenge <- response.body
14 do
15 changeset = Ecto.Changeset.change(subscription, %{state: "active"})
16 Repo.update(changeset)
17 else _e ->
18 changeset = Ecto.Changeset.change(subscription, %{state: "rejected"})
19 {:ok, subscription } = Repo.update(changeset)
20 {:error, subscription}
21 end
22 end
23 end