Add BasicAuthDecoderPlug
This commit is contained in:
parent
75bc68dbc1
commit
42bd985e66
|
@ -0,0 +1,21 @@
|
||||||
|
defmodule Pleroma.Plugs.BasicAuthDecoderPlug do
|
||||||
|
import Plug.Conn
|
||||||
|
|
||||||
|
def init(options) do
|
||||||
|
options
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(conn, opts) do
|
||||||
|
with ["Basic " <> header] <- get_req_header(conn, "authorization"),
|
||||||
|
{:ok, userinfo} <- Base.decode64(header),
|
||||||
|
[username, password] <- String.split(userinfo, ":", parts: 2) do
|
||||||
|
conn
|
||||||
|
|> assign(:auth_credentials, %{
|
||||||
|
username: username,
|
||||||
|
password: password
|
||||||
|
})
|
||||||
|
else
|
||||||
|
_ -> conn
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,31 @@
|
||||||
|
defmodule Pleroma.Plugs.AuthenticationPlugTest do
|
||||||
|
use Pleroma.Web.ConnCase, async: true
|
||||||
|
|
||||||
|
alias Pleroma.Plugs.BasicAuthDecoderPlug
|
||||||
|
|
||||||
|
defp basic_auth_enc(username, password) do
|
||||||
|
"Basic " <> Base.encode64("#{username}:#{password}")
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it puts the decoded credentials into the assigns", %{conn: conn} do
|
||||||
|
header = basic_auth_enc("moonman", "iloverobek")
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("authorization", header)
|
||||||
|
|> BasicAuthDecoderPlug.call(%{})
|
||||||
|
|
||||||
|
assert conn.assigns[:auth_credentials] == %{
|
||||||
|
username: "moonman",
|
||||||
|
password: "iloverobek"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "without a authorization header it doesn't do anything", %{conn: conn} do
|
||||||
|
ret_conn =
|
||||||
|
conn
|
||||||
|
|> BasicAuthDecoderPlug.call(%{})
|
||||||
|
|
||||||
|
assert conn == ret_conn
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue