Update
This commit is contained in:
parent
1faafeee26
commit
ecc3953bf1
3 changed files with 27 additions and 16 deletions
|
@ -135,10 +135,8 @@ defmodule Nulla.Models.Actor do
|
|||
Repo.get_by(__MODULE__, by)
|
||||
end
|
||||
|
||||
def get_or_create_actor(actor_json) do
|
||||
ap_id = actor_json["id"]
|
||||
|
||||
case __MODULE__.get_actor(ap_id: ap_id) do
|
||||
def get_or_create_actor(%{"id" => ap_id} = actor_json) when is_binary(ap_id) do
|
||||
case get_actor(ap_id: ap_id) do
|
||||
nil ->
|
||||
params =
|
||||
actor_json
|
||||
|
@ -146,13 +144,21 @@ defmodule Nulla.Models.Actor do
|
|||
|> Map.delete("id")
|
||||
|> Map.put("domain", URI.parse(ap_id).host)
|
||||
|
||||
case __MODULE__.create_actor(params) do
|
||||
case create_actor(params) do
|
||||
{:ok, actor} -> {:ok, actor}
|
||||
{:error, changeset} -> {:error, {:actor_creation_failed, changeset}}
|
||||
end
|
||||
|
||||
actor ->
|
||||
{:ok, actor}
|
||||
updates =
|
||||
actor_json
|
||||
|> Map.delete("id")
|
||||
|> Map.put("domain", URI.parse(ap_id).host)
|
||||
|
||||
case changeset(actor, updates) |> Repo.update() do
|
||||
{:ok, updated_actor} -> {:ok, updated_actor}
|
||||
{:error, changeset} -> {:error, {:actor_update_failed, changeset}}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -65,20 +65,24 @@ defmodule Nulla.Models.Relation do
|
|||
Repo.get_by(__MODULE__, by)
|
||||
end
|
||||
|
||||
def get_or_create_relation(local_actor_id, remote_actor_id) do
|
||||
case __MODULE__.get_relation(local_actor_id: local_actor_id, remote_actor_id: remote_actor_id) do
|
||||
def get_or_create_relation(local_actor_id, remote_actor_id, opts \\ []) do
|
||||
case get_relation(local_actor_id: local_actor_id, remote_actor_id: remote_actor_id) do
|
||||
nil ->
|
||||
case __MODULE__.create_relation(%{
|
||||
followed_by: true,
|
||||
local_actor_id: local_actor_id,
|
||||
remote_actor_id: remote_actor_id
|
||||
}) do
|
||||
attrs =
|
||||
Keyword.merge([local_actor_id: local_actor_id, remote_actor_id: remote_actor_id], opts)
|
||||
|
||||
case create_relation(attrs) do
|
||||
{:ok, relation} -> {:ok, relation}
|
||||
{:error, changeset} -> {:error, {:actor_creation_failed, changeset}}
|
||||
{:error, changeset} -> {:error, {:relation_creation_failed, changeset}}
|
||||
end
|
||||
|
||||
relation ->
|
||||
{:ok, relation}
|
||||
updates = Enum.into(opts, %{})
|
||||
|
||||
case changeset(relation, updates) |> Repo.update() do
|
||||
{:ok, updated_relation} -> {:ok, updated_relation}
|
||||
{:error, changeset} -> {:error, {:relation_update_failed, changeset}}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -107,7 +107,8 @@ defmodule NullaWeb.InboxController do
|
|||
actor: local_actor.ap_id,
|
||||
object: Jason.encode!(follow_activity)
|
||||
}),
|
||||
{:ok, _relation} <- Relation.get_or_create_relation(local_actor.id, remote_actor.id) do
|
||||
{:ok, _relation} <-
|
||||
Relation.get_or_create_relation(local_actor.id, remote_actor.id, followed_by: true) do
|
||||
activity = %Activity{accept_activity | object: Jason.decode!(accept_activity.object)}
|
||||
body = Jason.encode!(ActivityPub.activity(activity))
|
||||
headers = HTTPSignature.make_headers(body, remote_actor_json["inbox"], local_actor)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue