This commit is contained in:
Mirai Kumiko 2025-06-21 15:34:31 +02:00
parent 987d32398b
commit 9a7d7af693
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278
5 changed files with 78 additions and 34 deletions

View file

@ -0,0 +1,3 @@
<main>
<.flash_group flash={@flash} />
</main>

View file

@ -1,4 +1,6 @@
<main class="flex min-h-screen items-center justify-center">
<.flash_group flash={@flash} />
<form class="flex flex-col gap-2" action="/auth/sign_in" method="post">
<input type="hidden" name="_csrf_token" value={get_csrf_token()} />
<label for="email">E-mail address *</label>

View file

@ -1,4 +1,6 @@
<main class="flex min-h-screen items-center justify-center">
<.flash_group flash={@flash} />
<form class="flex flex-col gap-2" action="/auth" method="post">
<input type="hidden" name="_csrf_token" value={get_csrf_token()} />
<label for="username">Username *</label>

View file

@ -11,7 +11,7 @@ defmodule NullaWeb.AuthController do
if Argon2.verify_pass(password, user.password) do
conn
|> put_session(:user_id, user.id)
|> redirect(to: "/")
|> redirect(to: ~p"/")
else
conn
|> put_flash(:error, "Invalid login or password.")
@ -28,37 +28,39 @@ defmodule NullaWeb.AuthController do
conn
|> configure_session(drop: true)
|> put_flash(:info, "You have been logged out.")
|> redirect(to: "/")
|> 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
redirect(conn, to: "/")
end
domain = instance_settings.domain
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: "/")
|> put_flash(:error, "Registration is disabled.")
|> redirect(to: ~p"/")
else
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "sign_up.html", changeset: changeset)
domain = instance_settings.domain
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