logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 08fdbd6f3ab15ac8312073d832324516b723b81a
parent: d2cdcc097b171461687df1613371c4b04da60186
Author: Roger Braun <roger@rogerbraun.net>
Date:   Wed, 29 Mar 2017 01:39:01 +0200

Add Uploads.

Diffstat:

Mconfig/config.exs3+++
Mconfig/test.exs3+++
Alib/pleroma/upload.ex30++++++++++++++++++++++++++++++
Atest/fixtures/image.jpg0
Atest/upload_test.exs12++++++++++++
5 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/config/config.exs b/config/config.exs @@ -9,6 +9,9 @@ use Mix.Config config :pleroma, ecto_repos: [Pleroma.Repo] +config :pleroma, Pleroma.Upload, + uploads: "uploads" + # Configures the endpoint config :pleroma, Pleroma.Web.Endpoint, url: [host: "localhost"], diff --git a/config/test.exs b/config/test.exs @@ -9,6 +9,9 @@ config :pleroma, Pleroma.Web.Endpoint, # Print only warnings and errors during test config :logger, level: :warn +config :pleroma, Pleroma.Upload, + uploads: "test/uploads" + # Configure your database config :pleroma, Pleroma.Repo, adapter: Ecto.Adapters.Postgres, diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex @@ -0,0 +1,30 @@ +defmodule Pleroma.Upload do + def store(%Plug.Upload{} = file) do + uuid = Ecto.UUID.generate + upload_folder = Path.join(upload_path(), uuid) + File.mkdir_p!(upload_folder) + result_file = Path.join(upload_folder, file.filename) + File.cp!(file.path, result_file) + + %{ + "type" => "Image", + "href" => url_for(Path.join(uuid, file.filename)), + "name" => file.filename, + "uuid" => uuid + } + end + + defp upload_path do + Application.get_env(:pleroma, Pleroma.Upload) + |> Keyword.fetch!(:uploads) + end + + defp url_for(file) do + host = + Application.get_env(:pleroma, Pleroma.Web.Endpoint) + |> Keyword.fetch!(:url) + |> Keyword.fetch!(:host) + + "https://#{host}/media/#{file}" + end +end diff --git a/test/fixtures/image.jpg b/test/fixtures/image.jpg Binary files differ. diff --git a/test/upload_test.exs b/test/upload_test.exs @@ -0,0 +1,12 @@ +defmodule Pleroma.UploadTest do + alias Pleroma.Upload + use Pleroma.DataCase + + describe "Storing a file" do + test "copies the file to the configured folder" do + file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"} + data = Upload.store(file) + assert data["name"] == "an_image.jpg" + end + end +end