diff options
| author | Egor Kislitsyn <egor@kislitsyn.com> | 2019-12-16 22:24:03 +0700 | 
|---|---|---|
| committer | Egor Kislitsyn <egor@kislitsyn.com> | 2019-12-16 22:24:03 +0700 | 
| commit | a12b6454bb0a270732f9b55f8d4366c9add44136 (patch) | |
| tree | a6eae6c80d8c99dab420cd4379f862ed01298290 /test | |
| parent | 8efacfed677ea2f06ac228294faec77a38060976 (diff) | |
| download | pleroma-a12b6454bb0a270732f9b55f8d4366c9add44136.tar.gz pleroma-a12b6454bb0a270732f9b55f8d4366c9add44136.zip | |
Add an option to require fetches to be signed
Diffstat (limited to 'test')
| -rw-r--r-- | test/plugs/http_signature_plug_test.exs | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/test/plugs/http_signature_plug_test.exs b/test/plugs/http_signature_plug_test.exs index d8ace36da..007193dd9 100644 --- a/test/plugs/http_signature_plug_test.exs +++ b/test/plugs/http_signature_plug_test.exs @@ -23,7 +23,65 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlugTest do          |> HTTPSignaturePlug.call(%{})        assert conn.assigns.valid_signature == true +      assert conn.halted == false        assert called(HTTPSignatures.validate_conn(:_))      end    end + +  describe "requries a signature when `authorized_fetch_mode` is enabled" do +    setup do +      Pleroma.Config.put([:activitypub, :authorized_fetch_mode], true) + +      on_exit(fn -> +        Pleroma.Config.put([:activitypub, :authorized_fetch_mode], false) +      end) + +      params = %{"actor" => "http://mastodon.example.org/users/admin"} +      conn = build_conn(:get, "/doesntmattter", params) + +      [conn: conn] +    end + +    test "when signature header is present", %{conn: conn} do +      with_mock HTTPSignatures, validate_conn: fn _ -> false end do +        conn = +          conn +          |> put_req_header( +            "signature", +            "keyId=\"http://mastodon.example.org/users/admin#main-key" +          ) +          |> HTTPSignaturePlug.call(%{}) + +        assert conn.assigns.valid_signature == false +        assert conn.halted == true +        assert conn.status == 401 +        assert conn.state == :sent +        assert conn.resp_body == "Request not signed" +        assert called(HTTPSignatures.validate_conn(:_)) +      end + +      with_mock HTTPSignatures, validate_conn: fn _ -> true end do +        conn = +          conn +          |> put_req_header( +            "signature", +            "keyId=\"http://mastodon.example.org/users/admin#main-key" +          ) +          |> HTTPSignaturePlug.call(%{}) + +        assert conn.assigns.valid_signature == true +        assert conn.halted == false +        assert called(HTTPSignatures.validate_conn(:_)) +      end +    end + +    test "halts the connection when `signature` header is not present", %{conn: conn} do +      conn = HTTPSignaturePlug.call(conn, %{}) +      assert conn.assigns[:valid_signature] == nil +      assert conn.halted == true +      assert conn.status == 401 +      assert conn.state == :sent +      assert conn.resp_body == "Request not signed" +    end +  end  end | 
