diff --git a/lib/nulla_web/controllers/inbox_controller.ex b/lib/nulla_web/controllers/inbox_controller.ex index 2ca8159..ef3c9a3 100644 --- a/lib/nulla_web/controllers/inbox_controller.ex +++ b/lib/nulla_web/controllers/inbox_controller.ex @@ -2,7 +2,9 @@ defmodule NullaWeb.InboxController do use NullaWeb, :controller alias Nulla.HTTPSignature alias Nulla.ActivityPub + alias Nulla.Snowflake alias Nulla.Utils + alias Nulla.Models.User alias Nulla.Models.Actor alias Nulla.Models.Relation alias Nulla.Models.Activity @@ -11,6 +13,8 @@ defmodule NullaWeb.InboxController do conn, %{"id" => follow_id, "type" => "Follow", "actor" => actor_uri, "object" => target_uri} ) do + accept_id = Snowflake.next_id() + with local_actor <- Actor.get_actor(ap_id: target_uri), {:ok, remote_actor_json} <- Utils.fetch_remote_actor(actor_uri), :ok <- HTTPSignature.verify(conn, remote_actor_json), @@ -22,14 +26,16 @@ defmodule NullaWeb.InboxController do |> Map.put("domain", URI.parse(remote_actor_json["id"]).host) ), follow_activity <- - Activity.activity(%{ + Activity.create_activity(%{ ap_id: follow_id, type: "Follow", actor: remote_actor.id, object: target_uri }), accept_activity <- - Activity.activity(%{ + Activity.create_activity(%{ + id: accept_id, + ap_id: "https://#{local_actor.domain}/activities/accept/#{accept_id}", type: "Accept", actor: local_actor.ap_id, object: follow_activity @@ -40,7 +46,7 @@ defmodule NullaWeb.InboxController do local_actor_id: local_actor.id, remote_actor_id: remote_actor.id }) do - body = Jason.encode!(ActivityPub.follow_accept(accept_activity)) + body = Jason.encode!(ActivityPub.activity(accept_activity)) digest = :crypto.hash(:sha256, body) @@ -66,7 +72,7 @@ defmodule NullaWeb.InboxController do privateKeyPem = user.privateKey["privateKeyPem"] private_key = - :public_key.pem_decode(local_actor.private_key_pem) + :public_key.pem_decode(privateKeyPem) |> hd() |> :public_key.pem_entry_decode()