diff options
author | feld <feld@feld.me> | 2023-12-19 16:19:35 +0000 |
---|---|---|
committer | feld <feld@feld.me> | 2023-12-19 16:19:35 +0000 |
commit | 99b07c817e65d8855069a996777d41a9984f93bf (patch) | |
tree | 93094e7c900f0b316b9ac3a71223b388844d1845 | |
parent | 8893a044b3af5be607512a6b19747dc447d02262 (diff) | |
parent | e2066994b1e64481e0e74350688d91c71d03e230 (diff) | |
download | pleroma-99b07c817e65d8855069a996777d41a9984f93bf.tar.gz pleroma-99b07c817e65d8855069a996777d41a9984f93bf.zip |
Merge branch 'web_push' into 'develop'
Fix Web Push notification delivery
See merge request pleroma/pleroma!4008
-rw-r--r-- | changelog.d/web_push.fix | 1 | ||||
-rw-r--r-- | lib/pleroma/http/web_push.ex | 6 | ||||
-rw-r--r-- | test/pleroma/http/web_push_test.exs | 45 |
3 files changed, 51 insertions, 1 deletions
diff --git a/changelog.d/web_push.fix b/changelog.d/web_push.fix new file mode 100644 index 000000000..cf933e2d4 --- /dev/null +++ b/changelog.d/web_push.fix @@ -0,0 +1 @@ +Fix web push notifications not successfully delivering diff --git a/lib/pleroma/http/web_push.ex b/lib/pleroma/http/web_push.ex index ca399b6c8..888079c1e 100644 --- a/lib/pleroma/http/web_push.ex +++ b/lib/pleroma/http/web_push.ex @@ -6,7 +6,11 @@ defmodule Pleroma.HTTP.WebPush do @moduledoc false def post(url, payload, headers, options \\ []) do - list_headers = Map.to_list(headers) + list_headers = + headers + |> Map.to_list() + |> Kernel.++([{"content-type", "octet-stream"}]) + Pleroma.HTTP.post(url, payload, list_headers, options) end end diff --git a/test/pleroma/http/web_push_test.exs b/test/pleroma/http/web_push_test.exs new file mode 100644 index 000000000..dd8e45e6a --- /dev/null +++ b/test/pleroma/http/web_push_test.exs @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.HTTP.WebPushTest do + use ExUnit.Case + + import Tesla.Mock + alias Pleroma.HTTP + + @push_url "https://some-push-server/" + + setup do + mock(fn + %{ + method: :post, + url: @push_url, + headers: headers + } -> + if {"content-type", "octet-stream"} in headers do + %Tesla.Env{ + status: 200 + } + else + %Tesla.Env{ + status: 403 + } + end + end) + + :ok + end + + test "post" do + response = + HTTP.WebPush.post( + @push_url, + "encrypted payload", + %{"authorization" => "WebPush"}, + [] + ) + + assert {:ok, %{status: 200}} = response + end +end |