forked from AkkomaGang/akkoma
Add URI matchers
This commit is contained in:
parent
368b22fd2f
commit
9723264fe5
3 changed files with 46 additions and 4 deletions
|
@ -34,7 +34,9 @@ def perform(%Plug.Conn{assigns: assigns} = conn, %{scopes: scopes} = options) do
|
||||||
permissions = Enum.join(missing_scopes, " #{op} ")
|
permissions = Enum.join(missing_scopes, " #{op} ")
|
||||||
|
|
||||||
error_message =
|
error_message =
|
||||||
dgettext("errors", "Insufficient permissions: %{permissions}.", permissions: permissions)
|
dgettext("errors", "Insufficient permissions: %{permissions}.",
|
||||||
|
permissions: permissions
|
||||||
|
)
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_resp_content_type("application/json")
|
|> put_resp_content_type("application/json")
|
||||||
|
|
|
@ -6,16 +6,19 @@ defmodule Pleroma.MFA.TOTPTest do
|
||||||
use Pleroma.DataCase, async: true
|
use Pleroma.DataCase, async: true
|
||||||
|
|
||||||
alias Pleroma.MFA.TOTP
|
alias Pleroma.MFA.TOTP
|
||||||
|
import Pleroma.Test.URIHelpers
|
||||||
|
|
||||||
test "create provisioning_uri to generate qrcode" do
|
test "create provisioning_uri to generate qrcode" do
|
||||||
uri =
|
uri =
|
||||||
TOTP.provisioning_uri("test-secrcet", "test@example.com",
|
TOTP.provisioning_uri("test-secret", "test@example.com",
|
||||||
issuer: "Plerome-42",
|
issuer: "Plerome-42",
|
||||||
digits: 8,
|
digits: 8,
|
||||||
period: 60
|
period: 60
|
||||||
)
|
)
|
||||||
|
|
||||||
assert uri ==
|
assert_uri_equals(
|
||||||
"otpauth://totp/test@example.com?digits=8&issuer=Plerome-42&period=60&secret=test-secrcet"
|
uri,
|
||||||
|
"otpauth://totp/test@example.com?digits=8&issuer=Plerome-42&period=60&secret=test-secret"
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
37
test/support/uri_helpers.ex
Normal file
37
test/support/uri_helpers.ex
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
defmodule Pleroma.Test.URIHelpers do
|
||||||
|
import ExUnit.Assertions
|
||||||
|
|
||||||
|
def assert_uri_equals(%URI{} = uri_a, %URI{} = uri_b) do
|
||||||
|
[:scheme, :authority, :userinfo, :host, :port, :path, :fragment]
|
||||||
|
|> Enum.each(fn attribute ->
|
||||||
|
if Map.get(uri_a, attribute) == Map.get(uri_b, attribute) do
|
||||||
|
:ok
|
||||||
|
else
|
||||||
|
flunk("Expected #{uri_a} to match #{uri_b} - #{attribute} does not match")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
# And the query string
|
||||||
|
query_a = URI.decode_query(uri_a.query)
|
||||||
|
query_b = URI.decode_query(uri_b.query)
|
||||||
|
|
||||||
|
if query_a == query_b do
|
||||||
|
:ok
|
||||||
|
else
|
||||||
|
flunk(
|
||||||
|
"Expected #{uri_a} to match #{uri_b} - query parameters #{inspect(query_a)} do not match #{inspect(query_b)}"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_uri_equals(uri_a, uri_b) when is_binary(uri_a) do
|
||||||
|
uri_a
|
||||||
|
|> URI.parse()
|
||||||
|
|> assert_uri_equals(uri_b)
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_uri_equals(%URI{} = uri_a, uri_b) when is_binary(uri_b) do
|
||||||
|
uri_b = URI.parse(uri_b)
|
||||||
|
assert_uri_equals(uri_a, uri_b)
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue