Handle empty shortcode/filename/new_shortcode/new_filename

This commit is contained in:
Ekaterina Vaartis 2019-08-19 19:26:15 +03:00
parent 9afe7258dd
commit 16edfef12e

View file

@ -298,19 +298,27 @@ keeping it in cache for #{div(cache_ms, 1000)}s")
filename filename
end end
file_path = Path.join(pack_dir, filename) unless String.trim(shortcode) |> String.length() == 0 or
String.trim(filename) |> String.length() == 0 do
file_path = Path.join(pack_dir, filename)
# If the name contains directories, create them # If the name contains directories, create them
if String.contains?(file_path, "/") do if String.contains?(file_path, "/") do
File.mkdir_p!(Path.dirname(file_path)) File.mkdir_p!(Path.dirname(file_path))
end
# Copy the uploaded file from the temporary directory
File.copy!(upload_path, file_path)
updated_full_pack = put_in(full_pack, ["files", shortcode], filename)
{:ok, updated_full_pack}
else
{:error,
conn
|> put_status(:bad_request)
|> text("shortcode or filename cannot be empty")}
end end
# Copy the uploaded file from the temporary directory
File.copy!(upload_path, file_path)
updated_full_pack = put_in(full_pack, ["files", shortcode], filename)
{:ok, updated_full_pack}
else else
_ -> {:error, conn |> put_status(:bad_request) |> text("\"file\" not provided")} _ -> {:error, conn |> put_status(:bad_request) |> text("\"file\" not provided")}
end end
@ -348,34 +356,42 @@ keeping it in cache for #{div(cache_ms, 1000)}s")
"update" -> "update" ->
if Map.has_key?(full_pack["files"], shortcode) do if Map.has_key?(full_pack["files"], shortcode) do
with %{"new_shortcode" => new_shortcode, "new_filename" => new_filename} <- params do with %{"new_shortcode" => new_shortcode, "new_filename" => new_filename} <- params do
# First, remove the old shortcode, saving the old path unless String.trim(new_shortcode) |> String.length() == 0 or
{old_emoji_file_path, updated_full_pack} = pop_in(full_pack, ["files", shortcode]) String.trim(new_filename) |> String.length() == 0 do
old_emoji_file_path = Path.join(pack_dir, old_emoji_file_path) # First, remove the old shortcode, saving the old path
new_emoji_file_path = Path.join(pack_dir, new_filename) {old_emoji_file_path, updated_full_pack} = pop_in(full_pack, ["files", shortcode])
old_emoji_file_path = Path.join(pack_dir, old_emoji_file_path)
new_emoji_file_path = Path.join(pack_dir, new_filename)
# If the name contains directories, create them # If the name contains directories, create them
if String.contains?(new_emoji_file_path, "/") do if String.contains?(new_emoji_file_path, "/") do
File.mkdir_p!(Path.dirname(new_emoji_file_path)) File.mkdir_p!(Path.dirname(new_emoji_file_path))
end
# Move/Rename the old filename to a new filename
# These are probably on the same filesystem, so just rename should work
:ok = File.rename(old_emoji_file_path, new_emoji_file_path)
# If the old directory has no more files, remove it
if String.contains?(old_emoji_file_path, "/") do
dir = Path.dirname(old_emoji_file_path)
if Enum.empty?(File.ls!(dir)) do
File.rmdir!(dir)
end end
# Move/Rename the old filename to a new filename
# These are probably on the same filesystem, so just rename should work
:ok = File.rename(old_emoji_file_path, new_emoji_file_path)
# If the old directory has no more files, remove it
if String.contains?(old_emoji_file_path, "/") do
dir = Path.dirname(old_emoji_file_path)
if Enum.empty?(File.ls!(dir)) do
File.rmdir!(dir)
end
end
# Then, put in the new shortcode with the new path
updated_full_pack =
put_in(updated_full_pack, ["files", new_shortcode], new_filename)
{:ok, updated_full_pack}
else
{:error,
conn
|> put_status(:bad_request)
|> text("new_shortcode or new_filename cannot be empty")}
end end
# Then, put in the new shortcode with the new path
updated_full_pack =
put_in(updated_full_pack, ["files", new_shortcode], new_filename)
{:ok, updated_full_pack}
else else
_ -> _ ->
{:error, {:error,