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)
|
Repo.get_by(__MODULE__, by)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_or_create_actor(actor_json) do
|
def get_or_create_actor(%{"id" => ap_id} = actor_json) when is_binary(ap_id) do
|
||||||
ap_id = actor_json["id"]
|
case get_actor(ap_id: ap_id) do
|
||||||
|
|
||||||
case __MODULE__.get_actor(ap_id: ap_id) do
|
|
||||||
nil ->
|
nil ->
|
||||||
params =
|
params =
|
||||||
actor_json
|
actor_json
|
||||||
|
@ -146,13 +144,21 @@ defmodule Nulla.Models.Actor do
|
||||||
|> Map.delete("id")
|
|> Map.delete("id")
|
||||||
|> Map.put("domain", URI.parse(ap_id).host)
|
|> Map.put("domain", URI.parse(ap_id).host)
|
||||||
|
|
||||||
case __MODULE__.create_actor(params) do
|
case create_actor(params) do
|
||||||
{:ok, actor} -> {:ok, actor}
|
{:ok, actor} -> {:ok, actor}
|
||||||
{:error, changeset} -> {:error, {:actor_creation_failed, changeset}}
|
{:error, changeset} -> {:error, {:actor_creation_failed, changeset}}
|
||||||
end
|
end
|
||||||
|
|
||||||
actor ->
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -65,20 +65,24 @@ defmodule Nulla.Models.Relation do
|
||||||
Repo.get_by(__MODULE__, by)
|
Repo.get_by(__MODULE__, by)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_or_create_relation(local_actor_id, remote_actor_id) do
|
def get_or_create_relation(local_actor_id, remote_actor_id, opts \\ []) do
|
||||||
case __MODULE__.get_relation(local_actor_id: local_actor_id, remote_actor_id: remote_actor_id) do
|
case get_relation(local_actor_id: local_actor_id, remote_actor_id: remote_actor_id) do
|
||||||
nil ->
|
nil ->
|
||||||
case __MODULE__.create_relation(%{
|
attrs =
|
||||||
followed_by: true,
|
Keyword.merge([local_actor_id: local_actor_id, remote_actor_id: remote_actor_id], opts)
|
||||||
local_actor_id: local_actor_id,
|
|
||||||
remote_actor_id: remote_actor_id
|
case create_relation(attrs) do
|
||||||
}) do
|
|
||||||
{:ok, relation} -> {:ok, relation}
|
{:ok, relation} -> {:ok, relation}
|
||||||
{:error, changeset} -> {:error, {:actor_creation_failed, changeset}}
|
{:error, changeset} -> {:error, {:relation_creation_failed, changeset}}
|
||||||
end
|
end
|
||||||
|
|
||||||
relation ->
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,8 @@ defmodule NullaWeb.InboxController do
|
||||||
actor: local_actor.ap_id,
|
actor: local_actor.ap_id,
|
||||||
object: Jason.encode!(follow_activity)
|
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)}
|
activity = %Activity{accept_activity | object: Jason.decode!(accept_activity.object)}
|
||||||
body = Jason.encode!(ActivityPub.activity(activity))
|
body = Jason.encode!(ActivityPub.activity(activity))
|
||||||
headers = HTTPSignature.make_headers(body, remote_actor_json["inbox"], local_actor)
|
headers = HTTPSignature.make_headers(body, remote_actor_json["inbox"], local_actor)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue