@@ -64,6 +64,8 @@ defmodule Eventos.Actors.Actor do
|
||||
field :private_key, :string
|
||||
field :manually_approves_followers, :boolean, default: false
|
||||
field :suspended, :boolean, default: false
|
||||
field :avatar_url, :string
|
||||
field :banner_url, :string
|
||||
many_to_many :followers, Actor, join_through: Follower
|
||||
has_many :organized_events, Event, [foreign_key: :organizer_actor_id]
|
||||
many_to_many :memberships, Actor, join_through: Member
|
||||
@@ -75,7 +77,7 @@ defmodule Eventos.Actors.Actor do
|
||||
@doc false
|
||||
def changeset(%Actor{} = actor, attrs) do
|
||||
actor
|
||||
|> Ecto.Changeset.cast(attrs, [:url, :outbox_url, :inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :private_key, :manually_approves_followers, :suspended])
|
||||
|> Ecto.Changeset.cast(attrs, [:url, :outbox_url, :inbox_url, :shared_inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :private_key, :manually_approves_followers, :suspended, :avatar_url, :banner_url])
|
||||
|> validate_required([:preferred_username, :public_key, :suspended, :url])
|
||||
|> unique_constraint(:prefered_username, name: :actors_preferred_username_domain_index)
|
||||
end
|
||||
@@ -91,8 +93,8 @@ defmodule Eventos.Actors.Actor do
|
||||
def remote_actor_creation(params) do
|
||||
changes =
|
||||
%Actor{}
|
||||
|> Ecto.Changeset.cast(params, [:url, :outbox_url, :inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :manually_approves_followers])
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :type, :name, :domain, :summary, :preferred_username, :public_key])
|
||||
|> Ecto.Changeset.cast(params, [:url, :outbox_url, :inbox_url, :shared_inbox_url, :following_url, :followers_url, :type, :name, :domain, :summary, :preferred_username, :public_key, :manually_approves_followers, :avatar_url, :banner_url])
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :type, :name, :domain, :preferred_username, :public_key])
|
||||
|> unique_constraint(:preferred_username, name: :actors_preferred_username_domain_index)
|
||||
|> validate_length(:summary, max: 5000)
|
||||
|> validate_length(:preferred_username, max: 100)
|
||||
@@ -103,6 +105,21 @@ defmodule Eventos.Actors.Actor do
|
||||
changes
|
||||
end
|
||||
|
||||
def group_creation(%Actor{} = actor, params) do
|
||||
actor
|
||||
|> Ecto.Changeset.cast(params, [:url, :outbox_url, :inbox_url, :shared_inbox_url, :type, :name, :domain, :summary, :preferred_username, :avatar_url, :banner_url])
|
||||
|> put_change(:outbox_url, "#{EventosWeb.Endpoint.url()}/@#{params["prefered_username"]}/outbox")
|
||||
|> put_change(:inbox_url, "#{EventosWeb.Endpoint.url()}/@#{params["prefered_username"]}/inbox")
|
||||
|> put_change(:shared_inbox_url, "#{EventosWeb.Endpoint.url()}/inbox")
|
||||
|> put_change(:url, "#{EventosWeb.Endpoint.url()}/@#{params["prefered_username"]}")
|
||||
|> put_change(:domain, nil)
|
||||
|> put_change(:type, "Group")
|
||||
|> validate_required([:url, :outbox_url, :inbox_url, :type, :name, :preferred_username])
|
||||
|> validate_length(:summary, max: 5000)
|
||||
|> validate_length(:preferred_username, max: 100)
|
||||
|> put_change(:local, true)
|
||||
end
|
||||
|
||||
def get_or_fetch_by_url(url) do
|
||||
if user = Actors.get_actor_by_url(url) do
|
||||
user
|
||||
|
||||
@@ -126,6 +126,31 @@ defmodule Eventos.Actors do
|
||||
"acct:#{actor_to_local_name_and_domain(actor)}"
|
||||
end
|
||||
|
||||
@doc """
|
||||
List the groups
|
||||
"""
|
||||
def list_groups do
|
||||
Repo.all(from a in Actor, where: a.type == "Group")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a group.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_group(%{field: value})
|
||||
{:ok, %Actor{}}
|
||||
|
||||
iex> create_group(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_group(attrs \\ %{}) do
|
||||
%Actor{}
|
||||
|> Actor.group_creation(attrs)
|
||||
|> Repo.insert()
|
||||
end
|
||||
|
||||
alias Eventos.Actors.User
|
||||
|
||||
@doc """
|
||||
@@ -151,7 +176,7 @@ defmodule Eventos.Actors do
|
||||
|
||||
def insert_or_update_actor(data) do
|
||||
cs = Actor.remote_actor_creation(data)
|
||||
Repo.insert(cs, on_conflict: [set: [public_key: data.public_key]], conflict_target: [:preferred_username, :domain])
|
||||
Repo.insert(cs, on_conflict: [set: [public_key: data.public_key, avatar_url: data.avatar_url, banner: data.banner_url, name: data.name]], conflict_target: [:preferred_username, :domain])
|
||||
end
|
||||
|
||||
# def increase_event_count(%Actor{} = actor) do
|
||||
|
||||
@@ -1,46 +1,26 @@
|
||||
#defmodule EventosWeb.GroupController do
|
||||
# @moduledoc """
|
||||
# Controller for Groups
|
||||
# """
|
||||
# use EventosWeb, :controller
|
||||
#
|
||||
# alias Eventos.Actors
|
||||
# alias Eventos.Actors.Actor
|
||||
#
|
||||
# action_fallback EventosWeb.FallbackController
|
||||
#
|
||||
# def index(conn, _params) do
|
||||
# groups = Actors.list_groups()
|
||||
# render(conn, "index.json", groups: groups)
|
||||
# end
|
||||
#
|
||||
# def create(conn, %{"group" => group_params}) do
|
||||
# group_params = Map.put(group_params, "url", "h")
|
||||
# with {:ok, %Group{} = group} <- Actors.create_group(group_params) do
|
||||
# conn
|
||||
# |> put_status(:created)
|
||||
# |> put_resp_header("location", group_path(conn, :show, group))
|
||||
# |> render("show_simple.json", group: group)
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def show(conn, %{"id" => id}) do
|
||||
# group = Actors.get_group_full!(id)
|
||||
# render(conn, "show.json", group: group)
|
||||
# end
|
||||
#
|
||||
# def update(conn, %{"id" => id, "group" => group_params}) do
|
||||
# group = Actors.get_group!(id)
|
||||
#
|
||||
# with {:ok, %Actor{} = group} <- Actors.update_group(group, group_params) do
|
||||
# render(conn, "show_simple.json", group: group)
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def delete(conn, %{"id" => id}) do
|
||||
# group = Actors.get_group!(id)
|
||||
# with {:ok, %Actor{}} <- Actors.delete_group(group) do
|
||||
# send_resp(conn, :no_content, "")
|
||||
# end
|
||||
# end
|
||||
#end
|
||||
defmodule EventosWeb.GroupController do
|
||||
@moduledoc """
|
||||
Controller for Groups
|
||||
"""
|
||||
use EventosWeb, :controller
|
||||
|
||||
alias Eventos.Actors
|
||||
alias Eventos.Actors.Actor
|
||||
|
||||
action_fallback EventosWeb.FallbackController
|
||||
|
||||
def index(conn, _params) do
|
||||
groups = Actors.list_groups()
|
||||
render(conn, EventosWeb.ActorView, "index.json", actors: groups)
|
||||
end
|
||||
|
||||
def create(conn, %{"group" => group_params}) do
|
||||
with actor_admin = Guardian.Plug.current_resource(conn).actor,
|
||||
{:ok, %Actor{} = group} <- Actors.create_group(group_params) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> put_resp_header("location", actor_path(conn, :show, group))
|
||||
|> render(EventosWeb.ActorView, "acccount_basic.json", actor: group)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -37,7 +37,7 @@ defmodule EventosWeb.Router do
|
||||
|
||||
post "/users", UserController, :register
|
||||
post "/login", UserSessionController, :sign_in
|
||||
#resources "/groups", GroupController, only: [:index, :show]
|
||||
get "/groups", GroupController, :index
|
||||
get "/events", EventController, :index
|
||||
get "/events/search/:name", EventController, :search
|
||||
get "/events/:username/:slug", EventController, :show
|
||||
@@ -79,7 +79,7 @@ defmodule EventosWeb.Router do
|
||||
resources "/participant", ParticipantController
|
||||
resources "/bots", BotController, except: [:new, :edit, :show]
|
||||
#resources "/requests", EventRequestController
|
||||
#resources "/groups", GroupController, except: [:index, :show]
|
||||
post "/groups", GroupController, :create
|
||||
#post "/groups/:id/request", GroupRequestController, :create_for_group
|
||||
resources "/members", MemberController
|
||||
#resources "/requests", GroupRequestController
|
||||
|
||||
@@ -27,6 +27,7 @@ defmodule EventosWeb.ActorView do
|
||||
# public_key: actor.public_key,
|
||||
suspended: actor.suspended,
|
||||
url: actor.url,
|
||||
avatar: actor.avatar_url,
|
||||
}
|
||||
end
|
||||
|
||||
@@ -40,6 +41,8 @@ defmodule EventosWeb.ActorView do
|
||||
# public_key: actor.public_key,
|
||||
suspended: actor.suspended,
|
||||
url: actor.url,
|
||||
avatar: actor.avatar_url,
|
||||
banner: actor.banner_url,
|
||||
organized_events: render_many(actor.organized_events, EventView, "event_for_actor.json")
|
||||
}
|
||||
end
|
||||
|
||||
@@ -249,21 +249,6 @@ defmodule Eventos.Service.ActivityPub do
|
||||
end
|
||||
|
||||
def user_data_from_user_object(data) do
|
||||
Logger.debug("user_data_from_user_object")
|
||||
Logger.debug(inspect data)
|
||||
avatar =
|
||||
data["icon"]["url"] &&
|
||||
%{
|
||||
"type" => "Image",
|
||||
"url" => [%{"href" => data["icon"]["url"]}]
|
||||
}
|
||||
|
||||
banner =
|
||||
data["image"]["url"] &&
|
||||
%{
|
||||
"type" => "Image",
|
||||
"url" => [%{"href" => data["image"]["url"]}]
|
||||
}
|
||||
name = if String.trim(data["name"]) === "" do
|
||||
data["preferredUsername"]
|
||||
else
|
||||
@@ -275,9 +260,9 @@ defmodule Eventos.Service.ActivityPub do
|
||||
info: %{
|
||||
"ap_enabled" => true,
|
||||
"source_data" => data,
|
||||
"banner" => banner
|
||||
},
|
||||
avatar: avatar,
|
||||
avatar_url: data["icon"]["url"],
|
||||
banner_url: data["image"]["url"],
|
||||
name: name,
|
||||
preferred_username: data["preferredUsername"],
|
||||
follower_address: data["followers"],
|
||||
@@ -287,12 +272,15 @@ defmodule Eventos.Service.ActivityPub do
|
||||
outbox_url: data["outbox"],
|
||||
following_url: data["following"],
|
||||
followers_url: data["followers"],
|
||||
shared_inbox_url: data["sharedInbox"],
|
||||
shared_inbox_url: data["endpoints"]["sharedInbox"],
|
||||
domain: URI.parse(data["id"]).host,
|
||||
manually_approves_followers: data["manuallyApprovesFollowers"],
|
||||
type: data["type"],
|
||||
}
|
||||
|
||||
Logger.debug("user_data_from_user_object")
|
||||
Logger.debug(inspect user_data)
|
||||
|
||||
{:ok, user_data}
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user