This repository has been archived on 2018-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
forum/lib/forum_web/controllers/login_controller.ex

70 lines
1.9 KiB
Elixir

defmodule ForumWeb.LoginController do
use ForumWeb, :controller
alias Forum.Auth
alias Forum.Repo
alias Forum.User
def index(conn, _params) do
render(conn, :index, page_title: "log in")
end
def authenticate(conn, %{"username" => username, "password" => pw}) do
resp = Auth.authenticate(username, pw)
case resp["authenticated"] do
false ->
conn
|> put_session(:loggedin, false)
|> put_flash(:error, "log in failed")
|> redirect(to: login_path(conn, :index))
|> halt()
true ->
user = Repo.get_by(User, name: username)
case user do
nil ->
case Forum.create_user(%{
name: username,
bio:
"hey hi i haven't bothered to change this yet.\r\n\r\nmaybe i should update it (and put a new profile pic up? - just replace ~/public_html/avatar.png with your own img:)",
sudoer: resp["sudoer"]
}) do
{:ok, _newuser} ->
{:ok}
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
|> halt()
end
_ ->
unless user.sudoer == resp["sudoer"] do
User.changeset(user, sudoer: resp["sudoer"]) |> Repo.update()
end
end
conn
|> put_session(:loggedin, true)
|> put_session(:current_user, username)
|> put_session(:sudoer, resp["sudoer"])
|> put_flash(:info, "logged in as ~#{username}")
|> redirect(to: get_session(conn, :redirect_url))
|> halt()
_ ->
conn
end
end
def logout(conn, _params) do
conn
|> put_session(:loggedin, false)
|> put_session(:current_user, "")
|> put_session(:sudoer, false)
|> put_flash(:info, "logged out successfully")
|> redirect(to: login_path(conn, :index))
end
end