aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-03-29 02:05:51 +0200
committerRoger Braun <roger@rogerbraun.net>2017-03-29 02:07:56 +0200
commite7dc39e40cde5599f2e1e0dd1715670fd1e76720 (patch)
tree35bf6459fc195924edd5882d40544bfe483bd997 /lib
parent08fdbd6f3ab15ac8312073d832324516b723b81a (diff)
downloadpleroma-e7dc39e40cde5599f2e1e0dd1715670fd1e76720.tar.gz
Basic file uploading via TwAPI.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/upload.ex4
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex11
-rw-r--r--lib/pleroma/web/endpoint.ex3
-rw-r--r--lib/pleroma/web/router.ex1
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api.ex17
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api_controller.ex6
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