Current section
Files
Jump to
Current section
Files
lib/materia_web/controllers/authenticator_controller.ex
defmodule MateriaWeb.AuthenticatorController do
@moduledoc """
"""
use MateriaWeb, :controller
#import Comeonin.Bcrypt, only: [ checkpw: 2]
#alias Materia.Accounts
#alias Materia.Accounts.User
require Logger
#def sign_in(conn, _params = %{ "email" => email, "password" => password }) do
# claims = %{"email" => email}
# with {:ok, nil} <- Materia.Authenticator.resource_from_claims(claims) do
# handle_unauthenticated(conn, "email or password is invalid")
# else
# {:ok, resource} ->
# _conn =
# if Comeonin.Bcrypt.checkpw(password, resource.hashed_password) do
# Logger.debug("#{__MODULE__} --- sign_in Comeonin.Bcrypt.checkpw == true")
# with {:ok, token, _claims} <- Materia.Authenticator.encode_and_sign(resource) do
# Logger.debug("#{__MODULE__} --- sign_in Materia.Authenticator.encode_and_sign ok")
# Logger.debug("#{__MODULE__} --- sign_in token:#{token}")
# Logger.debug("#{__MODULE__} --- sign_in claims:#{inspect(claims)}")
# conn
# |> put_status(:created)
# |> render("show.json", authenticator: %{id: resource.id ,token: token})
# else
# _ -> handle_unauthenticated(conn, "email or password is invalid")
# end
# else
# handle_unauthenticated(conn, "email or password is invalid")
# end
# _ ->
# handle_unauthenticated(conn, "email or password is invalid")
# end
#
#end
def sign_in(conn, _params = %{ "email" => email, "password" => password }) do
Logger.debug("--- MateriaWeb.AuthenticateController sign_in_with_refresh-----------------")
with {:ok, result} <- Materia.Authenticator.sign_in(email, password) do
authenticator =
if Map.has_key?(result, :refresh_token) do
%{id: result.id ,access_token: result.access_token, refresh_token: result.refresh_token}
else
%{id: result.id ,access_token: result.access_token}
end
conn
|> put_status(:created)
|> render("show.json", authenticator: authenticator)
else
{:error, message} ->
handle_unauthenticated(conn, message)
end
end
def refresh(conn, _params = %{ "refresh_token" => refresh_token}) do
with {:ok, access, _refresh } <- Materia.Authenticator.refresh_tokens(refresh_token) do
{access_token, _access_claims} = access
{refresh_token, refresh_claims} = access
conn
|> put_status(:created)
|> render("show.json", authenticator: %{id: refresh_claims["sub"] ,access_token: access_token, refresh_token: refresh_token})
else
{:error, message} ->
handle_unauthenticated(conn, message)
end
end
def sign_out(conn, _params) do
Logger.debug("--- MateriaWeb.AuthenticateController sign_out-----------------")
token = conn.private[:guardian_default_token]
with {:ok, _claims} = Materia.Authenticator.revoke(token) do
conn
|> put_status(200)
|> render("delete.json", [])
end
end
def is_authenticated(conn, _params) do
Logger.debug("--- MateriaWeb.AuthenticateController is_authenticated-----------------")
send_resp(conn, 200, "{\"message\":\"authenticated\"}")
end
def is_varid_token(conn, _params) do
Logger.debug("--- MateriaWeb.AuthenticateController is_varid_token-----------------")
send_resp(conn, 200, "{\"message\":\"authenticated\"}")
end
defp handle_unauthenticated(conn, reason) do
conn
|> put_status(:unauthorized)
|> render("401.json", message: reason)
end
end