Packages

A Fair Source multi-agent runtime with deterministic agent scoring and replayable run history.

Retired package: Deprecated - superseded — operator console moved to the Syntropy app

Current section

Files

Jump to
syntropy lib syntropy_web controllers session_controller.ex
Raw

lib/syntropy_web/controllers/session_controller.ex

defmodule SyntropyWeb.SessionController do
use SyntropyWeb, :controller
alias SyntropyWeb.OperatorAuth
plug :put_layout, false
@spec new(Plug.Conn.t(), map()) :: Plug.Conn.t()
def new(conn, _params) do
cond do
not OperatorAuth.required?() ->
redirect(conn, to: "/")
OperatorAuth.authenticated?(conn) ->
redirect(conn, to: "/")
true ->
render_login(conn, nil)
end
end
@spec create(Plug.Conn.t(), map()) :: Plug.Conn.t()
def create(conn, params) do
username = params["username"]
password = params["password"]
case OperatorAuth.validate_credentials(username, password) do
:ok ->
conn
|> OperatorAuth.sign_in()
|> redirect(to: "/")
{:error, :invalid} ->
conn
|> put_status(:unauthorized)
|> render_login("Invalid operator credentials.")
end
end
@spec delete(Plug.Conn.t(), map()) :: Plug.Conn.t()
def delete(conn, _params) do
conn
|> OperatorAuth.sign_out()
|> redirect(to: "/login")
end
defp render_login(conn, error) do
conn
|> put_view(html: SyntropyWeb.SessionHTML)
|> render(:new, error: error, username: OperatorAuth.username())
end
end