1 defmodule Pleroma.Web.ActivityPub.ActivityPubController do
2 use Pleroma.Web, :controller
3 alias Pleroma.{User, Repo, Object, Activity}
4 alias Pleroma.Web.ActivityPub.{ObjectView, UserView, Transmogrifier}
5 alias Pleroma.Web.ActivityPub.ActivityPub
9 action_fallback :errors
11 def user(conn, %{"nickname" => nickname}) do
12 with %User{} = user <- User.get_cached_by_nickname(nickname),
13 {:ok, user} <- Pleroma.Web.WebFinger.ensure_keys_present(user) do
14 json(conn, UserView.render("user.json", %{user: user}))
18 def object(conn, %{"uuid" => uuid}) do
19 with ap_id <- o_status_url(conn, :object, uuid),
20 %Object{} = object <- Object.get_cached_by_ap_id(ap_id) do
21 json(conn, ObjectView.render("object.json", %{object: object}))
25 # TODO: Ensure that this inbox is a recipient of the message
26 def inbox(%{assigns: %{valid_signature: true}} = conn, params) do
27 # File.write("/tmp/incoming.json", Poison.encode!(params))
28 # Logger.info(Poison.encode!(params, [pretty: 2]))
29 with {:ok, _user} <- ap_enabled_actor(params["actor"]),
30 nil <- Activity.get_by_ap_id(params["id"]),
31 {:ok, activity} <- Transmogrifier.handle_incoming(params) do
35 Logger.info("Already had #{params["id"]}")
38 # Just drop those for now
39 Logger.info("Unhandled activity")
40 Logger.info(Poison.encode!(params, [pretty: 2]))
45 def inbox(conn, params) do
46 Logger.info("Signature error.")
47 Logger.info(inspect(conn.req_headers))
51 def ap_enabled_actor(id) do
52 user = User.get_by_ap_id(id)
53 if User.ap_enabled?(user) do
56 ActivityPub.make_user_from_ap_id(id)
60 def errors(conn, _e) do