diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-03-29 02:05:51 +0200 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-03-29 02:07:56 +0200 |
commit | e7dc39e40cde5599f2e1e0dd1715670fd1e76720 (patch) | |
tree | 35bf6459fc195924edd5882d40544bfe483bd997 /lib | |
parent | 08fdbd6f3ab15ac8312073d832324516b723b81a (diff) | |
download | pleroma-e7dc39e40cde5599f2e1e0dd1715670fd1e76720.tar.gz |
Basic file uploading via TwAPI.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/upload.ex | 4 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 11 | ||||
-rw-r--r-- | lib/pleroma/web/endpoint.ex | 3 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 17 | ||||
-rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 6 |
6 files changed, 37 insertions, 5 deletions
diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 43ebe98e3..fdda2634e 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -25,6 +25,8 @@ defmodule Pleroma.Upload do |> Keyword.fetch!(:url) |> Keyword.fetch!(:host) - "https://#{host}/media/#{file}" + protocol = Application.get_env(:pleroma, Pleroma.Web.Endpoint) |> Keyword.fetch!(:protocol) + + "#{protocol}://#{host}/media/#{file}" end end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 043e33042..f7ba1bb37 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1,6 +1,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do alias Pleroma.Repo - alias Pleroma.Activity + alias Pleroma.{Activity, Object, Upload} import Ecto.Query def insert(map) when is_map(map) do @@ -33,7 +33,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do Application.get_env(:pleroma, Pleroma.Web.Endpoint) |> Keyword.fetch!(:url) |> Keyword.fetch!(:host) - "https://#{host}/#{type}/#{Ecto.UUID.generate}" + + protocol = Application.get_env(:pleroma, Pleroma.Web.Endpoint) |> Keyword.fetch!(:protocol) + "#{protocol}://#{host}/#{type}/#{Ecto.UUID.generate}" end def fetch_public_activities(opts \\ %{}) do @@ -66,4 +68,9 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do where: fragment("? @> ?", activity.data, ^%{ context: context }) Repo.all(query) end + + def upload(%Plug.Upload{} = file) do + data = Upload.store(file) + Repo.insert(%Object{data: data}) + end end diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index e35a94c84..6af42a685 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -8,8 +8,7 @@ defmodule Pleroma.Web.Endpoint do # You should set gzip to true if you are running phoenix.digest # when deploying your static files in production. plug Plug.Static, - at: "/", from: :pleroma, gzip: false, - only: ~w(css fonts images js favicon.ico robots.txt) + at: "/media", from: "uploads", gzip: false # Code reloading can be explicitly enabled under the # :code_reloader configuration of your endpoint. diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index c60107072..52030d684 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -35,5 +35,6 @@ defmodule Pleroma.Web.Router do get "/statuses/friends_timeline", TwitterAPI.Controller, :friends_timeline post "/friendships/create", TwitterAPI.Controller, :follow post "/friendships/destroy", TwitterAPI.Controller, :unfollow + post "/statusnet/media/upload", TwitterAPI.Controller, :upload end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index e240dc2ea..b6e7d5cc6 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -96,6 +96,23 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end end + def upload(%Plug.Upload{} = file) do + {:ok, object} = ActivityPub.upload(file) + + # Fake this as good as possible... + """ + <?xml version="1.0" encoding="UTF-8"?> + <rsp stat="ok" xmlns:atom="http://www.w3.org/2005/Atom"> + <mediaid>#{object.id}</mediaid> + <media_id>#{object.id}</media_id> + <media_id_string>#{object.id}</media_id_string> + <media_url>#{object.data["href"]}</media_url> + <mediaurl>#{object.data["href"]}</mediaurl> + <atom:link rel="enclosure" href="#{object.data["href"]}" type="image"></atom:link> + </rsp> + """ + end + defp add_conversation_id(activity) do if is_integer(activity.data["statusnetConversationId"]) do {:ok, activity} diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index f42cee0b0..a26885bf1 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -65,6 +65,12 @@ defmodule Pleroma.Web.TwitterAPI.Controller do |> json_reply(200, response) end + def upload(conn, %{"media" => media}) do + response = TwitterAPI.upload(media) + conn + |> put_resp_content_type("application/atom+xml") + |> send_resp(200, response) + end defp json_reply(conn, status, json) do conn |