66 lines
1.9 KiB
Elixir
66 lines
1.9 KiB
Elixir
defmodule NullaWeb.Web.AuthController do
|
|
use NullaWeb, :controller
|
|
alias Nulla.Models.User
|
|
alias Nulla.Models.Actor
|
|
alias Nulla.Models.InstanceSettings
|
|
|
|
def sign_in(conn, %{"email" => email, "password" => password}) do
|
|
user = User.get_user(email: email)
|
|
|
|
if user do
|
|
if Argon2.verify_pass(password, user.password) do
|
|
conn
|
|
|> put_session(:user_id, user.id)
|
|
|> redirect(to: ~p"/")
|
|
else
|
|
conn
|
|
|> put_flash(:error, "Invalid login or password.")
|
|
|> redirect(to: ~p"/auth/sign_in")
|
|
end
|
|
else
|
|
conn
|
|
|> put_flash(:error, "User not exist.")
|
|
|> redirect(to: ~p"/auth/sign_in")
|
|
end
|
|
end
|
|
|
|
def sign_out(conn, _params) do
|
|
conn
|
|
|> configure_session(drop: true)
|
|
|> put_flash(:info, "You have been logged out.")
|
|
|> redirect(to: ~p"/")
|
|
end
|
|
|
|
def sign_up(conn, %{"username" => username, "email" => email, "password" => password}) do
|
|
instance_settings = InstanceSettings.get_instance_settings!()
|
|
|
|
if not instance_settings.registration do
|
|
conn
|
|
|> put_flash(:error, "Registration is disabled.")
|
|
|> redirect(to: ~p"/")
|
|
else
|
|
domain = NullaWeb.Endpoint.host()
|
|
hashed_password = Argon2.hash_pwd_salt(password)
|
|
|
|
{publicKeyPem, privateKeyPem} = Nulla.KeyGen.gen()
|
|
|
|
with {:ok, actor} <- Actor.create_actor_minimal(username, domain, publicKeyPem),
|
|
{:ok, user} <-
|
|
User.create_user(%{
|
|
id: actor.id,
|
|
email: email,
|
|
password: hashed_password,
|
|
privateKeyPem: privateKeyPem,
|
|
last_active_at: DateTime.utc_now()
|
|
}) do
|
|
conn
|
|
|> put_session(:user_id, user.id)
|
|
|> put_flash(:info, "You're registred!")
|
|
|> redirect(to: ~p"/")
|
|
else
|
|
{:error, %Ecto.Changeset{} = changeset} ->
|
|
render(conn, "sign_up.html", changeset: changeset)
|
|
end
|
|
end
|
|
end
|
|
end
|