forked from AkkomaGang/akkoma
upload: add new optional argument designating an upload size limit
This commit is contained in:
parent
fbbc5fc919
commit
fa483cd7c2
1 changed files with 61 additions and 46 deletions
|
@ -4,61 +4,76 @@ defmodule Pleroma.Upload do
|
||||||
@storage_backend Application.get_env(:pleroma, Pleroma.Upload)
|
@storage_backend Application.get_env(:pleroma, Pleroma.Upload)
|
||||||
|> Keyword.fetch!(:uploader)
|
|> Keyword.fetch!(:uploader)
|
||||||
|
|
||||||
def store(%Plug.Upload{} = file, should_dedupe) do
|
def check_file_size(path, nil), do: true
|
||||||
content_type = get_content_type(file.path)
|
|
||||||
|
|
||||||
uuid = get_uuid(file, should_dedupe)
|
def check_file_size(path, size_limit) do
|
||||||
name = get_name(file, uuid, content_type, should_dedupe)
|
{:ok, %{size: size}} = File.stat(path)
|
||||||
|
size <= size_limit
|
||||||
strip_exif_data(content_type, file.path)
|
|
||||||
|
|
||||||
{:ok, url_path} =
|
|
||||||
@storage_backend.put_file(name, uuid, file.path, content_type, should_dedupe)
|
|
||||||
|
|
||||||
%{
|
|
||||||
"type" => "Document",
|
|
||||||
"url" => [
|
|
||||||
%{
|
|
||||||
"type" => "Link",
|
|
||||||
"mediaType" => content_type,
|
|
||||||
"href" => url_path
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name" => name
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def store(%{"img" => "data:image/" <> image_data}, should_dedupe) do
|
def store(file, should_dedupe, size_limit \\ nil)
|
||||||
|
|
||||||
|
def store(%Plug.Upload{} = file, should_dedupe, size_limit) do
|
||||||
|
content_type = get_content_type(file.path)
|
||||||
|
|
||||||
|
with uuid <- get_uuid(file, should_dedupe),
|
||||||
|
name <- get_name(file, uuid, content_type, should_dedupe),
|
||||||
|
true <- check_file_size(file.path, size_limit) do
|
||||||
|
strip_exif_data(content_type, file.path)
|
||||||
|
|
||||||
|
{:ok, url_path} =
|
||||||
|
@storage_backend.put_file(name, uuid, file.path, content_type, should_dedupe)
|
||||||
|
|
||||||
|
%{
|
||||||
|
"type" => "Document",
|
||||||
|
"url" => [
|
||||||
|
%{
|
||||||
|
"type" => "Link",
|
||||||
|
"mediaType" => content_type,
|
||||||
|
"href" => url_path
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name" => name
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_e -> nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def store(%{"img" => "data:image/" <> image_data}, should_dedupe, size_limit) do
|
||||||
parsed = Regex.named_captures(~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/, image_data)
|
parsed = Regex.named_captures(~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/, image_data)
|
||||||
data = Base.decode64!(parsed["data"], ignore: :whitespace)
|
data = Base.decode64!(parsed["data"], ignore: :whitespace)
|
||||||
|
|
||||||
tmp_path = tempfile_for_image(data)
|
with tmp_path <- tempfile_for_image(data),
|
||||||
|
uuid <- UUID.generate(),
|
||||||
|
true <- check_file_size(tmp_path, size_limit) do
|
||||||
|
content_type = get_content_type(tmp_path)
|
||||||
|
strip_exif_data(content_type, tmp_path)
|
||||||
|
|
||||||
uuid = UUID.generate()
|
name =
|
||||||
|
create_name(
|
||||||
|
String.downcase(Base.encode16(:crypto.hash(:sha256, data))),
|
||||||
|
parsed["filetype"],
|
||||||
|
content_type
|
||||||
|
)
|
||||||
|
|
||||||
content_type = get_content_type(tmp_path)
|
{:ok, url_path} =
|
||||||
strip_exif_data(content_type, tmp_path)
|
@storage_backend.put_file(name, uuid, tmp_path, content_type, should_dedupe)
|
||||||
|
|
||||||
name =
|
%{
|
||||||
create_name(
|
"type" => "Image",
|
||||||
String.downcase(Base.encode16(:crypto.hash(:sha256, data))),
|
"url" => [
|
||||||
parsed["filetype"],
|
%{
|
||||||
content_type
|
"type" => "Link",
|
||||||
)
|
"mediaType" => content_type,
|
||||||
|
"href" => url_path
|
||||||
{:ok, url_path} = @storage_backend.put_file(name, uuid, tmp_path, content_type, should_dedupe)
|
}
|
||||||
|
],
|
||||||
%{
|
"name" => name
|
||||||
"type" => "Image",
|
}
|
||||||
"url" => [
|
else
|
||||||
%{
|
_e -> nil
|
||||||
"type" => "Link",
|
end
|
||||||
"mediaType" => content_type,
|
|
||||||
"href" => url_path
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name" => name
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
Loading…
Reference in a new issue