aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/websub/websub.ex
blob: c7752487c296bde7e32571d21fbdc849d0a08d61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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