architex/lib/matrix_server_web/plug/authenticate_client.ex

36 lines
843 B
Elixir
Raw Normal View History

defmodule MatrixServerWeb.Plug.AuthenticateClient do
2021-06-25 23:14:09 +00:00
import MatrixServerWeb.Plug.Error
import Plug.Conn
alias MatrixServer.Account
alias Plug.Conn
2021-06-25 23:14:09 +00:00
def init(opts), do: opts
def call(%Conn{params: %{"access_token" => access_token}} = conn, _opts) do
authenticate(conn, access_token)
end
def call(%Conn{req_headers: headers} = conn, _opts) do
case List.keyfind(headers, "authorization", 0) do
{_, "Bearer " <> access_token} ->
authenticate(conn, access_token)
_ ->
2021-06-25 23:14:09 +00:00
put_error(conn, :missing_token)
end
end
defp authenticate(conn, access_token) do
case Account.by_access_token(access_token) do
{account, device} ->
conn
|> assign(:account, account)
|> assign(:device, device)
nil ->
2021-06-25 23:14:09 +00:00
put_error(conn, :unknown_token)
end
end
end