Changeset View
Changeset View
Standalone View
Standalone View
web/controllers/auth_controller.ex
defmodule KolabChat.AuthController do | defmodule KolabChat.AuthController do | ||||
use KolabChat.Web, :controller | use KolabChat.Web, :controller | ||||
alias KolabChat.User | |||||
@doc """ | @doc """ | ||||
Handler for the default logon form | Handler for the default logon form | ||||
""" | """ | ||||
def default_callback(conn, params) do | def default_callback(conn, params) do | ||||
%{"logon" => %{"password" => _pass, "username" => user}} = params | %{"logon" => %{"password" => _pass, "username" => user}} = params | ||||
cond do | cond do | ||||
is_nil(user) or user == "" -> | is_nil(user) or user == "" -> | ||||
conn | conn | ||||
|> put_flash(:error, gettext("Invalid username")) | |> put_flash(:error, gettext("Invalid username!")) | ||||
|> redirect(to: "/") | |> redirect(to: "/") | ||||
true -> | true -> | ||||
changeset = User.changeset(%User{}, %{username: user}) | |||||
signin(conn, changeset) | |||||
end | |||||
end | |||||
defp signin(conn, changeset) do | |||||
case insert_or_update_user(changeset) do | |||||
{:ok, user} -> | |||||
conn | conn | ||||
|> put_flash(:info, gettext("Successfully authenticated")) | |> put_flash(:info, gettext("Signed in!")) | ||||
|> put_session(:user, user) | |> put_session(:user_id, user.id) | ||||
|> redirect(to: "/") | |> redirect(to: "/") | ||||
{:error, _reason} -> | |||||
conn | |||||
|> put_flash(:error, gettext("Error signing in")) | |||||
|> redirect(to: "/") | |||||
end | |||||
end | |||||
defp insert_or_update_user(changeset) do | |||||
case Repo.get_by(User, username: changeset.changes.username) do | |||||
nil -> | |||||
Repo.insert(changeset) | |||||
user -> | |||||
{:ok, user} | |||||
end | end | ||||
end | end | ||||
@doc """ | @doc """ | ||||
Handler for logout action | Handler for logout action | ||||
""" | """ | ||||
def logout(conn, _params) do | def logout(conn, _params) do | ||||
conn | conn | ||||
|> configure_session(drop: true) | |> configure_session(drop: true) | ||||
|> redirect(to: "/") | |> redirect(to: "/") | ||||
end | end | ||||
end | end |