Fix inbox_controller.ex

This commit is contained in:
Mirai Kumiko 2025-06-22 07:46:59 +02:00
parent 11618a6621
commit aac9bcb6e4
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278

View file

@ -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()