diff options
author | lain <lain@soykaf.club> | 2018-09-05 17:30:05 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-09-05 17:30:05 +0200 |
commit | 42bd985e6654a4af55df622753c3f0664e5c6bae (patch) | |
tree | 471f5f1ca727faae4541ddc1f39ecf5f8ed7237b | |
parent | 75bc68dbc1f1064fe7f6e160f878487ed07b2023 (diff) | |
download | pleroma-42bd985e6654a4af55df622753c3f0664e5c6bae.tar.gz |
Add BasicAuthDecoderPlug
-rw-r--r-- | lib/pleroma/plugs/basic_auth_decoder_plug.ex | 21 | ||||
-rw-r--r-- | test/plugs/basic_auth_decoder_plug_test.exs | 31 |
2 files changed, 52 insertions, 0 deletions
diff --git a/lib/pleroma/plugs/basic_auth_decoder_plug.ex b/lib/pleroma/plugs/basic_auth_decoder_plug.ex new file mode 100644 index 000000000..fc8fcee98 --- /dev/null +++ b/lib/pleroma/plugs/basic_auth_decoder_plug.ex @@ -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 diff --git a/test/plugs/basic_auth_decoder_plug_test.exs b/test/plugs/basic_auth_decoder_plug_test.exs new file mode 100644 index 000000000..317f7d167 --- /dev/null +++ b/test/plugs/basic_auth_decoder_plug_test.exs @@ -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 |