2021-08-17 22:50:15 +02:00
|
|
|
defmodule MatrixServerWeb.Client.Plug.AuthenticateClient do
|
2021-08-14 15:20:42 +02:00
|
|
|
import MatrixServerWeb.Error
|
2021-06-26 00:29:33 +02:00
|
|
|
import Plug.Conn
|
|
|
|
|
|
|
|
alias MatrixServer.Account
|
|
|
|
alias Plug.Conn
|
|
|
|
|
2021-06-26 01:14:09 +02:00
|
|
|
def init(opts), do: opts
|
2021-06-26 00:29:33 +02:00
|
|
|
|
|
|
|
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-26 01:14:09 +02:00
|
|
|
put_error(conn, :missing_token)
|
2021-06-26 00:29:33 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
defp authenticate(conn, access_token) do
|
2021-06-27 22:24:54 +02:00
|
|
|
case Account.by_access_token(access_token) do
|
|
|
|
{account, device} ->
|
2021-06-26 00:29:33 +02:00
|
|
|
conn
|
|
|
|
|> assign(:account, account)
|
|
|
|
|> assign(:device, device)
|
|
|
|
|
|
|
|
nil ->
|
2021-06-26 01:14:09 +02:00
|
|
|
put_error(conn, :unknown_token)
|
2021-06-26 00:29:33 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|