forked from AkkomaGang/akkoma
Add BasicAuthDecoderPlug
This commit is contained in:
parent
75bc68dbc1
commit
42bd985e66
2 changed files with 52 additions and 0 deletions
21
lib/pleroma/plugs/basic_auth_decoder_plug.ex
Normal file
21
lib/pleroma/plugs/basic_auth_decoder_plug.ex
Normal 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
|
31
test/plugs/basic_auth_decoder_plug_test.exs
Normal file
31
test/plugs/basic_auth_decoder_plug_test.exs
Normal 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
|
Loading…
Reference in a new issue