diff --git a/lib/nulla/actors/actor.ex b/lib/nulla/actors/actor.ex index 26a87a4..d11363e 100644 --- a/lib/nulla/actors/actor.ex +++ b/lib/nulla/actors/actor.ex @@ -77,8 +77,6 @@ defmodule Nulla.Actors.Actor do :followers, :inbox, :outbox, - :featured, - :featuredTags, :preferredUsername, :url, :publicKey, diff --git a/lib/nulla/relations/relation.ex b/lib/nulla/relations/relation.ex index 4dc86d1..9ae1eaa 100644 --- a/lib/nulla/relations/relation.ex +++ b/lib/nulla/relations/relation.ex @@ -45,22 +45,7 @@ defmodule Nulla.Relations.Relation do :remote_actor_id ]) |> maybe_put_id() - |> validate_required([ - :following, - :followed_by, - :showing_replies, - :showings_reblogs, - :notifying, - :muting, - :muting_notifications, - :blocking, - :blocked_by, - :domain_blocking, - :requested, - :note, - :local_actor_id, - :remote_actor_id - ]) + |> validate_required([:local_actor_id, :remote_actor_id]) |> unique_constraint([:local_actor_id, :remote_actor_id]) end diff --git a/lib/nulla_web/controllers/activitypub/inbox_controller.ex b/lib/nulla_web/controllers/activitypub/inbox_controller.ex index 4d05bb7..04ec532 100644 --- a/lib/nulla_web/controllers/activitypub/inbox_controller.ex +++ b/lib/nulla_web/controllers/activitypub/inbox_controller.ex @@ -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( diff --git a/priv/repo/migrations/20250701133126_create_actors.exs b/priv/repo/migrations/20250701133126_create_actors.exs index 4dfe0ea..261fdd5 100644 --- a/priv/repo/migrations/20250701133126_create_actors.exs +++ b/priv/repo/migrations/20250701133126_create_actors.exs @@ -15,7 +15,7 @@ defmodule Nulla.Repo.Migrations.CreateActors do add :featuredTags, :string add :preferredUsername, :string add :name, :string - add :summary, :string + add :summary, :text add :url, :string add :manuallyApprovesFollowers, :boolean, default: false, null: false add :discoverable, :boolean, default: true, null: false