diff --git a/lib/nulla/uploader.ex b/lib/nulla/uploader.ex index bb18bf2..a517600 100644 --- a/lib/nulla/uploader.ex +++ b/lib/nulla/uploader.ex @@ -5,12 +5,7 @@ defmodule Nulla.Uploader do @upload_base "priv/static" @upload_prefix "system" - def upload( - %Plug.Upload{path: temp_path, filename: original_name}, - dir, - description, - domain - ) do + def upload(%Plug.Upload{path: temp_path, filename: original_name}, uploadType, name, domain) do {:ok, binary} = File.read(temp_path) ext = Path.extname(original_name) mimetype = MIME.type(ext) @@ -23,14 +18,54 @@ defmodule Nulla.Uploader do true -> "Document" end + {width, height} = + cond do + mimetype =~ "image" or "video" -> + {output, 0} = + System.cmd("ffprobe", [ + "-v", + "error", + "-select_streams", + "v:0", + "-show_entries", + "stream=width,height", + "-of", + "default=noprint_wrappers=1", + temp_path + ]) + + parsed_width = + Regex.run(~r/width=(\d+)/, output) + |> List.last() + |> String.to_integer() + + parsed_height = + Regex.run(~r/height=(\d+)/, output) + |> List.last() + |> String.to_integer() + + {parsed_width, parsed_height} + + true -> + {nil, nil} + end + filename = Base.encode16(:crypto.strong_rand_bytes(8), case: :lower) <> ext media_attachment_id = Snowflake.next_id() + dirs = + cond do + uploadType == :avatar -> "accounts/avatars" + uploadType == :header -> "accounts/headers" + uploadType == :attachment -> "media_attachments/files" + uploadType == :emoji -> "custom_emojis/images" + end + relative_path = Path.join([ @upload_prefix, - dir, + dirs, partition_id(media_attachment_id), "original", filename @@ -47,9 +82,9 @@ defmodule Nulla.Uploader do type: type, mediaType: mimetype, url: "https://#{domain}/#{relative_path}", - name: description, - width: 1, - height: 1 + name: name, + width: width, + height: height }) end diff --git a/lib/nulla_web/components/templates/page/home.html.heex b/lib/nulla_web/components/templates/page/home.html.heex index e69de29..2d928c6 100644 --- a/lib/nulla_web/components/templates/page/home.html.heex +++ b/lib/nulla_web/components/templates/page/home.html.heex @@ -0,0 +1,3 @@ +
+ <.flash_group flash={@flash} /> +
diff --git a/lib/nulla_web/components/templates/page/sign_in.html.heex b/lib/nulla_web/components/templates/page/sign_in.html.heex index 225a331..33ee7da 100644 --- a/lib/nulla_web/components/templates/page/sign_in.html.heex +++ b/lib/nulla_web/components/templates/page/sign_in.html.heex @@ -1,4 +1,6 @@
+ <.flash_group flash={@flash} /> +
diff --git a/lib/nulla_web/components/templates/page/sign_up.html.heex b/lib/nulla_web/components/templates/page/sign_up.html.heex index 5541d0e..58b7e26 100644 --- a/lib/nulla_web/components/templates/page/sign_up.html.heex +++ b/lib/nulla_web/components/templates/page/sign_up.html.heex @@ -1,4 +1,6 @@
+ <.flash_group flash={@flash} /> + diff --git a/lib/nulla_web/controllers/auth_controller.ex b/lib/nulla_web/controllers/auth_controller.ex index 52748e4..e766e56 100644 --- a/lib/nulla_web/controllers/auth_controller.ex +++ b/lib/nulla_web/controllers/auth_controller.ex @@ -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