logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: de20c8d6208563f50c1f8af9a2ee8b14c7663dad
parent: 1c676b75738ec8448132b2cbcfbb71e075bf07b2
Author: lambda <pleromagit@rogerbraun.net>
Date:   Thu, 14 Jun 2018 19:11:30 +0000

Merge branch 'fix/missing-file-extension' into 'develop'

Add missing file extension if file does not have one

See merge request pleroma/pleroma!222

Diffstat:

Mlib/pleroma/upload.ex29++++++++++++++++++++++++-----
Mtest/upload_test.exs13+++++++++++++
2 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex @@ -86,10 +86,15 @@ defmodule Pleroma.Upload do end defp create_name(uuid, ext, type) do - if type == "application/octet-stream" do - String.downcase(Enum.join([uuid, ext], ".")) - else - String.downcase(Enum.join([uuid, List.last(String.split(type, "/"))], ".")) + case type do + "application/octet-stream" -> + String.downcase(Enum.join([uuid, ext], ".")) + + "audio/mpeg" -> + String.downcase(Enum.join([uuid, "mp3"], ".")) + + _ -> + String.downcase(Enum.join([uuid, List.last(String.split(type, "/"))], ".")) end end @@ -105,7 +110,21 @@ defmodule Pleroma.Upload do if should_dedupe do create_name(uuid, List.last(String.split(file.filename, ".")), type) else - file.filename + unless String.contains?(file.filename, ".") do + case type do + "image/png" -> file.filename <> ".png" + "image/jpeg" -> file.filename <> ".jpg" + "image/gif" -> file.filename <> ".gif" + "video/webm" -> file.filename <> ".webm" + "video/mp4" -> file.filename <> ".mp4" + "audio/mpeg" -> file.filename <> ".mp3" + "audio/ogg" -> file.filename <> ".ogg" + "audio/wav" -> file.filename <> ".wav" + _ -> file.filename + end + else + file.filename + end end end diff --git a/test/upload_test.exs b/test/upload_test.exs @@ -43,5 +43,18 @@ defmodule Pleroma.UploadTest do data = Upload.store(file, true) assert hd(data["url"])["mediaType"] == "image/jpeg" end + + test "adds missing extension" do + File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg") + + file = %Plug.Upload{ + content_type: "image/jpg", + path: Path.absname("test/fixtures/image_tmp.jpg"), + filename: "an [image" + } + + data = Upload.store(file, false) + assert data["name"] == "an [image.jpg" + end end end