Merge branch 'develop' into dtluna/pleroma-refactor/1
[akkoma] / lib / pleroma / web / ostatus / ostatus_controller.ex
1 defmodule Pleroma.Web.OStatus.OStatusController do
2 use Pleroma.Web, :controller
3
4 alias Pleroma.{User, Activity}
5 alias Pleroma.Web.OStatus.{FeedRepresenter, ActivityRepresenter}
6 alias Pleroma.Repo
7 alias Pleroma.Web.OStatus
8 import Ecto.Query
9
10 def feed_redirect(conn, %{"nickname" => nickname}) do
11 user = User.get_cached_by_nickname(nickname)
12 redirect conn, external: OStatus.feed_path(user)
13 end
14
15 def feed(conn, %{"nickname" => nickname}) do
16 user = User.get_cached_by_nickname(nickname)
17 query = from activity in Activity,
18 where: fragment("? @> ?", activity.data, ^%{actor: user.ap_id}),
19 limit: 20,
20 order_by: [desc: :inserted_at]
21
22 activities = query
23 |> Repo.all
24
25 response = user
26 |> FeedRepresenter.to_simple_form(activities, [user])
27 |> :xmerl.export_simple(:xmerl_xml)
28 |> to_string
29
30 conn
31 |> put_resp_content_type("application/atom+xml")
32 |> send_resp(200, response)
33 end
34
35 def salmon_incoming(conn, params) do
36 {:ok, body, _conn} = read_body(conn)
37 {:ok, magic_key} = Pleroma.Web.Salmon.fetch_magic_key(body)
38 {:ok, doc} = Pleroma.Web.Salmon.decode_and_validate(magic_key, body)
39
40 Pleroma.Web.OStatus.handle_incoming(doc)
41
42 conn
43 |> send_resp(200, "")
44 end
45
46 def object(conn, %{"uuid" => uuid}) do
47 id = o_status_url(conn, :object, uuid)
48 activity = Activity.get_create_activity_by_object_ap_id(id)
49 user = User.get_cached_by_ap_id(activity.data["actor"])
50
51 response = ActivityRepresenter.to_simple_form(activity, user, true)
52 |> ActivityRepresenter.wrap_with_entry
53 |> :xmerl.export_simple(:xmerl_xml)
54 |> to_string
55
56 conn
57 |> put_resp_content_type("application/atom+xml")
58 |> send_resp(200, response)
59 end
60 end