This commit is contained in:
Mirai Kumiko 2025-07-05 18:47:36 +00:00
parent 2729f0e25d
commit 198f8e7e83
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278
4 changed files with 18 additions and 23 deletions

View file

@ -91,10 +91,20 @@ defmodule NullaWeb.ActivityPub.InboxController do
with local_actor <- Actors.get_actor_by(ap_id: target_uri),
{:ok, remote_actor_json} <- Utils.fetch_remote_actor(actor_uri),
:ok <- HTTPSignature.verify(conn, remote_actor_json["publicKey"]["publicKeyPem"]) do
ap_id = remote_actor_json["id"]
username = remote_actor_json["preferredUsername"]
domain = URI.parse(remote_actor_json["id"]).host
remote_actor =
case Actors.get_actor_by(ap_id: remote_actor_json["id"]) do
case Actors.get_actor_by(ap_id: ap_id) do
nil ->
case Actors.create_actor(remote_actor_json) do
params =
remote_actor_json
|> Map.put("ap_id", ap_id)
|> Map.delete("id")
|> Map.put("acct", "#{username}@#{domain}")
case Actors.create_actor(params) do
{:ok, actor} -> actor
{:error, error} -> {:error, error}
end
@ -103,6 +113,8 @@ defmodule NullaWeb.ActivityPub.InboxController do
actor
end
domain = NullaWeb.Endpoint.host()
with {:ok, follow_activity} <-
Activities.create_activity(%{
ap_id: follow_id,
@ -113,7 +125,7 @@ defmodule NullaWeb.ActivityPub.InboxController do
{:ok, accept_activity} <-
Activities.create_activity(%{
id: accept_id,
ap_id: "https://#{local_actor.domain}/activities/accept/#{accept_id}",
ap_id: "https://#{domain}/activities/accept/#{accept_id}",
type: "Accept",
actor: local_actor.ap_id,
object: Jason.encode!(follow_activity)
@ -134,7 +146,7 @@ defmodule NullaWeb.ActivityPub.InboxController do
end
relation ->
Relations.update_relation(relation, %{followed_by: true})
{:ok, Relations.update_relation(relation, %{followed_by: true})}
end
Sender.send_activity(