Add BasicAuthDecoderPlug

This commit is contained in:
lain 2018-09-05 17:30:05 +02:00
parent 75bc68dbc1
commit 42bd985e66
2 changed files with 52 additions and 0 deletions

View file

@ -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

View file

@ -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