diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 76e0f1aff..2965dfd4a 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -57,8 +57,8 @@ defmodule Pleroma.Web.Router do
post "/friendships/create", TwitterAPI.UserController, :follow
post "/friendships/destroy", TwitterAPI.UserController, :unfollow
- post "/statusnet/media/upload", TwitterAPI.Controller, :upload
- post "/media/upload", TwitterAPI.Controller, :upload_json
+ post "/statusnet/media/upload", TwitterAPI.MediaController, :upload
+ post "/media/upload", TwitterAPI.MediaController, :upload_json
post "/favorites/create/:id", TwitterAPI.StatusController, :favorite
post "/favorites/create", TwitterAPI.StatusController, :favorite
diff --git a/lib/pleroma/web/twitter_api/controllers/media_controller.ex b/lib/pleroma/web/twitter_api/controllers/media_controller.ex
new file mode 100644
index 000000000..17d036efd
--- /dev/null
+++ b/lib/pleroma/web/twitter_api/controllers/media_controller.ex
@@ -0,0 +1,36 @@
+defmodule Pleroma.Web.TwitterAPI.MediaController do
+ use Pleroma.Web, :controller
+ alias Pleroma.Object
+ alias Pleroma.Web.ActivityPub.ActivityPub
+
+ def upload(conn, %{"media" => media = %Plug.Upload{}}) do
+ {:ok, %Object{id: id, data: %{"url" => %{"href" => href, "type" => type}}}} =
+ ActivityPub.upload(media)
+ response = """
+
+
+ #{id}
+ #{id}
+ #{id}
+ #{href}
+ #{href}
+
+
+ """
+
+ conn
+ |> put_resp_content_type("application/atom+xml")
+ |> send_resp(200, response)
+ end
+
+ def upload_json(conn, %{"media" => media = %Plug.Upload{}}) do
+ {:ok, %Object{id: id, data: %{"url" => %{"href" => href}}}} = ActivityPub.upload(media)
+
+ json conn, %{
+ media_id: id,
+ media_id_string: "#{id}}",
+ media_url: href,
+ size: 0
+ }
+ end
+end
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index 75eecfac4..0ef40d2f8 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -87,37 +87,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
ActivityPub.create(to, user, context, object, additional, data)
end
- def upload(%Plug.Upload{} = file, format \\ "xml") do
- {:ok, object} = ActivityPub.upload(file)
-
- url = List.first(object.data["url"])
- href = url["href"]
- type = url["mediaType"]
-
- case format do
- "xml" ->
- # Fake this as good as possible...
- """
-
-
- #{object.id}
- #{object.id}
- #{object.id}
- #{href}
- #{href}
-
-
- """
- "json" ->
- %{
- media_id: object.id,
- media_id_string: "#{object.id}}",
- media_url: href,
- size: 0
- } |> Poison.encode!
- end
- end
-
def parse_mentions(text) do
# Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address
regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/
diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex
deleted file mode 100644
index b64a0ad3f..000000000
--- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex
+++ /dev/null
@@ -1,23 +0,0 @@
-defmodule Pleroma.Web.TwitterAPI.Controller do
- use Pleroma.Web, :controller
- alias Pleroma.Web.TwitterAPI.TwitterAPI
-
- def upload(conn, %{"media" => media}) do
- response = TwitterAPI.upload(media)
- conn
- |> put_resp_content_type("application/atom+xml")
- |> send_resp(200, response)
- end
-
- def upload_json(conn, %{"media" => media}) do
- response = TwitterAPI.upload(media, "json")
- conn
- |> json_reply(200, response)
- end
-
- defp json_reply(conn, status, json) do
- conn
- |> put_resp_content_type("application/json")
- |> send_resp(status, json)
- end
-end
diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs
index b2c58eb29..ca6e942f5 100644
--- a/test/web/twitter_api/twitter_api_test.exs
+++ b/test/web/twitter_api/twitter_api_test.exs
@@ -7,7 +7,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
import Pleroma.Factory
test "create a status" do
- user = UserBuilder.build(%{ap_id: "142344"})
+ %User{ap_id: user_ap_id} = user = UserBuilder.build(%{ap_id: "142344"})
_mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
object_data = %{
@@ -22,31 +22,34 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
"uuid" => 1
}
- object = Repo.insert!(%Object{data: object_data})
+ %Object{id: object_id} = Repo.insert!(%Object{data: object_data})
input = %{
"status" => "Hello again, @shp.\nThis is on another line.",
- "media_ids" => [object.id]
+ "media_ids" => [object_id]
}
+ {:ok, %Activity{local: true, data: %{
+ "context" => context, "to" => to, "actor" => actor, "object" => object = %{
+ "id" => ap_id, "content" => content, "type" => "Note", "actor" => obj_actor,
+ "context" => obj_context, "attachment" => attachment
+ }
+ }}} = TwitterAPI.create_status(user, input)
- { :ok, activity = %Activity{} } = TwitterAPI.create_status(user, input)
+ assert content == "Hello again, @shp.
This is on another line.
http://example.org/image.jpg"
- assert get_in(activity.data, ["object", "content"]) == "Hello again, @shp.
This is on another line.
http://example.org/image.jpg"
- assert get_in(activity.data, ["object", "type"]) == "Note"
- assert get_in(activity.data, ["object", "actor"]) == user.ap_id
- assert get_in(activity.data, ["actor"]) == user.ap_id
- assert Enum.member?(get_in(activity.data, ["to"]), User.ap_followers(user))
- assert Enum.member?(get_in(activity.data, ["to"]), "https://www.w3.org/ns/activitystreams#Public")
- assert Enum.member?(get_in(activity.data, ["to"]), "shp")
- assert activity.local == true
+ assert user_ap_id == actor
+ assert user_ap_id == obj_actor
- # Add a context
- assert is_binary(get_in(activity.data, ["context"]))
- assert is_binary(get_in(activity.data, ["object", "context"]))
+ assert is_binary(context)
+ assert is_binary(obj_context)
- assert is_list(activity.data["object"]["attachment"])
+ assert Enum.member?(to, User.ap_followers(user))
+ assert Enum.member?(to, "https://www.w3.org/ns/activitystreams#Public")
+ assert Enum.member?(to, "shp")
- assert activity.data["object"] == Object.get_by_ap_id(activity.data["object"]["id"]).data
+ assert is_list(attachment)
+
+ assert object == Object.get_by_ap_id(ap_id).data
end
test "create a status that is a reply" do
@@ -55,14 +58,14 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
"status" => "Hello again."
}
- { :ok, activity = %Activity{} } = TwitterAPI.create_status(user, input)
+ {:ok, activity = %Activity{id: id}} = TwitterAPI.create_status(user, input)
input = %{
"status" => "Here's your (you).",
- "in_reply_to_status_id" => activity.id
+ "in_reply_to_status_id" => id
}
- { :ok, reply = %Activity{} } = TwitterAPI.create_status(user, input)
+ {:ok, reply = %Activity{}} = TwitterAPI.create_status(user, input)
assert get_in(reply.data, ["context"]) == get_in(activity.data, ["context"])
assert get_in(reply.data, ["object", "context"]) == get_in(activity.data, ["object", "context"])
@@ -71,14 +74,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
assert Enum.member?(get_in(reply.data, ["to"]), "some_cool_id")
end
- test "upload a file" do
- file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"}
-
- response = TwitterAPI.upload(file)
-
- assert is_binary(response)
- end
-
test "it can parse mentions and return the relevant users" do
text = "@gsimg According to @archaeme , that is @daggsy."