39 lines
1.1 KiB
Elixir
39 lines
1.1 KiB
Elixir
defmodule VishnyaWeb.AuthController do
|
|
use VishnyaWeb, :controller
|
|
alias Vishnya.Accounts
|
|
|
|
def authenticate_user(conn, %{"username" => username, "password" => password} = params) do
|
|
remember = Map.get(params, "remember") == "on"
|
|
|
|
IO.inspect(remember)
|
|
|
|
case Accounts.authenticate_user(username, password) do
|
|
{:ok, user} ->
|
|
conn
|
|
|> put_flash(:info, "Signed in successfully!")
|
|
|> put_resp_cookie("auth_token", user.token, max_age: if(remember, do: 60 * 60 * 24 * 30, else: nil))
|
|
|> redirect(to: "/dashboard")
|
|
|
|
:error ->
|
|
conn
|
|
|> put_flash(:error, "Invalid username or password.")
|
|
|> redirect(to: "/sign_in")
|
|
end
|
|
end
|
|
|
|
def authenticate_user(conn, %{"token" => token}) do
|
|
case Accounts.authenticate_user(token) do
|
|
nil ->
|
|
conn
|
|
|> put_flash(:error, "Invalid session token.")
|
|
|> redirect(to: "/sign_in")
|
|
|
|
user ->
|
|
conn
|
|
|> put_flash(:info, "Loaded session token.")
|
|
|> put_resp_cookie("auth_token", user.token, max_age: 60 * 60 * 24 * 30)
|
|
|> redirect(to: "/dashboard")
|
|
end
|
|
end
|
|
end
|