Add some tests
Also add a unicity constraint on the followers table Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -197,6 +197,11 @@ defmodule Eventos.Actors.Actor do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Get followers from an actor
|
||||
|
||||
If actor A and C both follow actor B, actor B's followers are A and C
|
||||
"""
|
||||
def get_followers(%Actor{id: actor_id} = _actor) do
|
||||
Repo.all(
|
||||
from(
|
||||
@@ -208,6 +213,11 @@ defmodule Eventos.Actors.Actor do
|
||||
)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Get followings from an actor
|
||||
|
||||
If actor A follows actor B and C, actor A's followings are B and B
|
||||
"""
|
||||
def get_followings(%Actor{id: actor_id} = _actor) do
|
||||
Repo.all(
|
||||
from(
|
||||
|
||||
@@ -19,5 +19,6 @@ defmodule Eventos.Actors.Follower do
|
||||
member
|
||||
|> cast(attrs, [:score, :approved, :target_actor_id, :actor_id])
|
||||
|> validate_required([:score, :approved, :target_actor_id, :actor_id])
|
||||
|> unique_constraint(:target_actor_id, name: :followers_actor_target_actor_unique_index)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -32,14 +32,18 @@ defmodule EventosWeb.GroupController do
|
||||
end
|
||||
|
||||
def join(conn, %{"name" => group_name, "actor_name" => actor_name}) do
|
||||
with group <- Actors.get_group_by_name(group_name),
|
||||
actor <- Actors.get_local_actor_by_name(actor_name),
|
||||
with %Actor{} = group <- Actors.get_group_by_name(group_name),
|
||||
%Actor{} = actor <- Actors.get_local_actor_by_name(actor_name),
|
||||
%Member{} = member <-
|
||||
Actors.create_member(%{"parent_id" => group.id, "actor_id" => actor.id}) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> render(EventosWeb.MemberView, "member.json", member: member)
|
||||
else
|
||||
nil ->
|
||||
conn
|
||||
|> put_status(:not_found)
|
||||
|> render(EventosWeb.ErrorView, "not_found.json", details: "group or actor doesn't exist")
|
||||
err ->
|
||||
require Logger
|
||||
Logger.debug(inspect(err))
|
||||
|
||||
@@ -12,6 +12,13 @@ defmodule EventosWeb.ErrorView do
|
||||
%{errors: "Invalid request"}
|
||||
end
|
||||
|
||||
def render("not_found.json", %{details: details}) do
|
||||
%{
|
||||
msg: "Resource not found",
|
||||
details: details,
|
||||
}
|
||||
end
|
||||
|
||||
def render("500.html", _assigns) do
|
||||
"Internal server error"
|
||||
end
|
||||
|
||||
@@ -322,10 +322,13 @@ defmodule Eventos.Service.ActivityPub.Utils do
|
||||
Converts PEM encoded keys to a public key representation
|
||||
"""
|
||||
def pem_to_public_key(pem) do
|
||||
[private_key_code] = :public_key.pem_decode(pem)
|
||||
private_key = :public_key.pem_entry_decode(private_key_code)
|
||||
{:RSAPrivateKey, _, modulus, exponent, _, _, _, _, _, _, _} = private_key
|
||||
{:RSAPublicKey, modulus, exponent}
|
||||
[key_code] = :public_key.pem_decode(pem)
|
||||
key = :public_key.pem_entry_decode(key_code)
|
||||
case key do
|
||||
{:RSAPrivateKey, _, modulus, exponent, _, _, _, _, _, _, _} ->
|
||||
{:RSAPublicKey, modulus, exponent}
|
||||
{:RSAPublicKey, modulus, exponent} -> {:RSAPublicKey, modulus, exponent}
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
|
||||
Reference in New Issue
Block a user