diff --git a/config/config.exs b/config/config.exs index b21165f62..d4996a4bb 100644 --- a/config/config.exs +++ b/config/config.exs @@ -120,7 +120,7 @@ config :ex_cldr, default_backend: Mobilizon.Cldr config :http_signatures, - adapter: Mobilizon.Service.HTTPSignatures.Signature + adapter: Mobilizon.Federation.HTTPSignatures.Signature config :mobilizon, :activitypub, sign_object_fetches: true diff --git a/config/dev.exs b/config/dev.exs index ac5f5a921..0ffb389f8 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -66,8 +66,8 @@ config :mobilizon, MobilizonWeb.Email.Mailer, adapter: Bamboo.LocalAdapter # Configure your database config :mobilizon, Mobilizon.Storage.Repo, types: Mobilizon.Storage.PostgresTypes, - username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "mobilizon", - password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "mobilizon", + username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "postgres", + password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "postgres", database: System.get_env("MOBILIZON_DATABASE_DBNAME") || "mobilizon_dev", hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost", port: System.get_env("MOBILIZON_DATABASE_PORT") || "5432", diff --git a/config/test.exs b/config/test.exs index c9ae5091e..15a3fcb77 100644 --- a/config/test.exs +++ b/config/test.exs @@ -24,8 +24,8 @@ config :logger, # Configure your database config :mobilizon, Mobilizon.Storage.Repo, types: Mobilizon.Storage.PostgresTypes, - username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "mobilizon", - password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "mobilizon", + username: System.get_env("MOBILIZON_DATABASE_USERNAME") || "postgres", + password: System.get_env("MOBILIZON_DATABASE_PASSWORD") || "postgres", database: System.get_env("MOBILIZON_DATABASE_DBNAME") || "mobilizon_test", hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost", pool: Ecto.Adapters.SQL.Sandbox diff --git a/lib/service/activity_pub/activity.ex b/lib/federation/activity_pub/activity.ex similarity index 83% rename from lib/service/activity_pub/activity.ex rename to lib/federation/activity_pub/activity.ex index aebf3f091..59a20ec82 100644 --- a/lib/service/activity_pub/activity.ex +++ b/lib/federation/activity_pub/activity.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Activity do +defmodule Mobilizon.Federation.ActivityPub.Activity do @moduledoc """ Represents an activity. """ diff --git a/lib/service/activity_pub/activity_pub.ex b/lib/federation/activity_pub/activity_pub.ex similarity index 97% rename from lib/service/activity_pub/activity_pub.ex rename to lib/federation/activity_pub/activity_pub.ex index ee8f84793..d54eb00c7 100644 --- a/lib/service/activity_pub/activity_pub.ex +++ b/lib/federation/activity_pub/activity_pub.ex @@ -3,25 +3,34 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/activity_pub.ex -defmodule Mobilizon.Service.ActivityPub do +defmodule Mobilizon.Federation.ActivityPub do @moduledoc """ - # ActivityPub context. + The ActivityPub context. """ - import Mobilizon.Service.ActivityPub.Utils - import Mobilizon.Service.ActivityPub.Visibility + import Mobilizon.Federation.ActivityPub.Utils alias Mobilizon.{Actors, Config, Events, Reports, Users, Share} alias Mobilizon.Actors.{Actor, Follower} alias Mobilizon.Events.{Comment, Event, Participant} alias Mobilizon.Reports.Report alias Mobilizon.Tombstone - alias Mobilizon.Service.ActivityPub.{Activity, Converter, Convertible, Relay, Transmogrifier} - alias Mobilizon.Service.{Federator, WebFinger} - alias Mobilizon.Service.HTTPSignatures.Signature + + alias Mobilizon.Federation.ActivityPub.{ + Activity, + Audience, + Federator, + Relay, + Transmogrifier, + Visibility, + WebFinger + } + + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Utils, as: ConverterUtils + alias Mobilizon.Federation.HTTPSignatures.Signature + alias MobilizonWeb.API.Utils, as: APIUtils - alias Mobilizon.Service.ActivityPub.Audience - alias Mobilizon.Service.ActivityPub.Converter.Utils, as: ConverterUtils alias MobilizonWeb.Email.{Admin, Mailer} require Logger @@ -50,7 +59,7 @@ defmodule Mobilizon.Service.ActivityPub do def fetch_object_from_url(url) do Logger.info("Fetching object from url #{url}") - date = Mobilizon.Service.HTTPSignatures.Signature.generate_date_header() + date = Signature.generate_date_header() headers = [{:Accept, "application/activity+json"}] @@ -149,7 +158,7 @@ defmodule Mobilizon.Service.ActivityPub do * Creates the object, which returns AS data * Wraps ActivityStreams data into a `Create` activity - * Creates an `Mobilizon.Service.ActivityPub.Activity` from this + * Creates an `Mobilizon.Federation.ActivityPub.Activity` from this * Federates (asynchronously) the activity * Returns the activity """ @@ -181,7 +190,7 @@ defmodule Mobilizon.Service.ActivityPub do * Updates the object, which returns AS data * Wraps ActivityStreams data into a `Update` activity - * Creates an `Mobilizon.Service.ActivityPub.Activity` from this + * Creates an `Mobilizon.Federation.ActivityPub.Activity` from this * Federates (asynchronously) the activity * Returns the activity """ @@ -251,7 +260,7 @@ defmodule Mobilizon.Service.ActivityPub do local \\ true, public \\ true ) do - with true <- is_public?(object), + with true <- Visibility.is_public?(object), {:ok, %Actor{id: object_owner_actor_id}} <- Actors.get_actor_by_url(object["actor"]), {:ok, %Share{} = _share} <- Share.create(object["id"], actor.id, object_owner_actor_id), announce_data <- make_announce_data(actor, object, activity_id, public), @@ -549,7 +558,7 @@ defmodule Mobilizon.Service.ActivityPub do Logger.debug("Publishing an activity") Logger.debug(inspect(activity)) - public = is_public?(activity) + public = Visibility.is_public?(activity) Logger.debug("is public ? #{public}") if public && is_create_activity?(activity) && Config.get([:instance, :allow_relay]) do @@ -629,7 +638,7 @@ defmodule Mobilizon.Service.ActivityPub do :ok <- Logger.debug("response okay, now decoding json"), {:ok, data} <- Jason.decode(body) do Logger.debug("Got activity+json response at actor's endpoint, now converting data") - Mobilizon.Service.ActivityPub.Converter.Actor.as_to_model_data(data) + Converter.Actor.as_to_model_data(data) else # Actor is gone, probably deleted {:ok, %HTTPoison.Response{status_code: 410}} -> diff --git a/lib/service/activity_pub/converter.ex b/lib/federation/activity_pub/activity_stream/converter.ex similarity index 76% rename from lib/service/activity_pub/converter.ex rename to lib/federation/activity_pub/activity_stream/converter.ex index 920efada7..39c21b4c9 100644 --- a/lib/service/activity_pub/converter.ex +++ b/lib/federation/activity_pub/activity_stream/converter.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter do @moduledoc """ Converter behaviour. diff --git a/lib/service/activity_pub/converter/actor.ex b/lib/federation/activity_pub/activity_stream/converter/actor.ex similarity index 90% rename from lib/service/activity_pub/converter/actor.ex rename to lib/federation/activity_pub/activity_stream/converter/actor.ex index 556a4d8b9..f28da9e17 100644 --- a/lib/service/activity_pub/converter/actor.ex +++ b/lib/federation/activity_pub/activity_stream/converter/actor.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Actor do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Actor do @moduledoc """ Actor converter. @@ -7,12 +7,14 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Actor do """ alias Mobilizon.Actors.Actor, as: ActorModel - alias Mobilizon.Service.ActivityPub.{Converter, Convertible, Utils} + + alias Mobilizon.Federation.ActivityPub.Utils + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} @behaviour Converter defimpl Convertible, for: ActorModel do - alias Mobilizon.Service.ActivityPub.Converter.Actor, as: ActorConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Actor, as: ActorConverter defdelegate model_to_as(actor), to: ActorConverter end diff --git a/lib/service/activity_pub/converter/address.ex b/lib/federation/activity_pub/activity_stream/converter/address.ex similarity index 93% rename from lib/service/activity_pub/converter/address.ex rename to lib/federation/activity_pub/activity_stream/converter/address.ex index 413c23c30..b24296fae 100644 --- a/lib/service/activity_pub/converter/address.ex +++ b/lib/federation/activity_pub/activity_stream/converter/address.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Address do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Address do @moduledoc """ Address converter. @@ -7,7 +7,8 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Address do """ alias Mobilizon.Addresses.Address, as: AddressModel - alias Mobilizon.Service.ActivityPub.Converter + + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter @behaviour Converter diff --git a/lib/service/activity_pub/converter/comment.ex b/lib/federation/activity_pub/activity_stream/converter/comment.ex similarity index 90% rename from lib/service/activity_pub/converter/comment.ex rename to lib/federation/activity_pub/activity_stream/converter/comment.ex index c82cb03a4..b9e7d43fc 100644 --- a/lib/service/activity_pub/converter/comment.ex +++ b/lib/federation/activity_pub/activity_stream/converter/comment.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Comment do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Comment do @moduledoc """ Comment converter. @@ -9,17 +9,19 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Comment do alias Mobilizon.Actors.Actor alias Mobilizon.Events.Comment, as: CommentModel alias Mobilizon.Events.Event - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Converter, Convertible, Visibility} - alias Mobilizon.Service.ActivityPub.Converter.Utils, as: ConverterUtils alias Mobilizon.Tombstone, as: TombstoneModel + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Visibility + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Utils, as: ConverterUtils + require Logger @behaviour Converter defimpl Convertible, for: CommentModel do - alias Mobilizon.Service.ActivityPub.Converter.Comment, as: CommentConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Comment, as: CommentConverter defdelegate model_to_as(comment), to: CommentConverter end diff --git a/lib/service/activity_pub/converter/event.ex b/lib/federation/activity_pub/activity_stream/converter/event.ex similarity index 90% rename from lib/service/activity_pub/converter/event.ex rename to lib/federation/activity_pub/activity_stream/converter/event.ex index d02065fe8..76c31ad61 100644 --- a/lib/service/activity_pub/converter/event.ex +++ b/lib/federation/activity_pub/activity_stream/converter/event.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Event do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Event do @moduledoc """ Event converter. @@ -11,18 +11,19 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Event do alias Mobilizon.Addresses.Address alias Mobilizon.Events.Event, as: EventModel alias Mobilizon.Media.Picture - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Converter, Convertible} - alias Mobilizon.Service.ActivityPub.Converter.Address, as: AddressConverter - alias Mobilizon.Service.ActivityPub.Converter.Picture, as: PictureConverter - alias Mobilizon.Service.ActivityPub.Converter.Utils, as: ConverterUtils + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Address, as: AddressConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Picture, as: PictureConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Utils, as: ConverterUtils require Logger @behaviour Converter defimpl Convertible, for: EventModel do - alias Mobilizon.Service.ActivityPub.Converter.Event, as: EventConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Event, as: EventConverter defdelegate model_to_as(event), to: EventConverter end @@ -177,7 +178,7 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Event do @spec do_get_address(map) :: integer | nil defp do_get_address(map) do - map = Mobilizon.Service.ActivityPub.Converter.Address.as_to_model_data(map) + map = AddressConverter.as_to_model_data(map) case Addresses.create_address(map) do {:ok, %Address{id: address_id}} -> diff --git a/lib/service/activity_pub/converter/flag.ex b/lib/federation/activity_pub/activity_stream/converter/flag.ex similarity index 90% rename from lib/service/activity_pub/converter/flag.ex rename to lib/federation/activity_pub/activity_stream/converter/flag.ex index 2980b0c69..bd50a8031 100644 --- a/lib/service/activity_pub/converter/flag.ex +++ b/lib/federation/activity_pub/activity_stream/converter/flag.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Flag do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Flag do @moduledoc """ Flag converter. @@ -13,14 +13,14 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Flag do alias Mobilizon.Events alias Mobilizon.Events.Event alias Mobilizon.Reports.Report - alias Mobilizon.Service.ActivityPub.Converter - alias Mobilizon.Service.ActivityPub.Convertible - alias Mobilizon.Service.ActivityPub.Relay + + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} + alias Mobilizon.Federation.ActivityPub.Relay @behaviour Converter defimpl Convertible, for: Report do - alias Mobilizon.Service.ActivityPub.Converter.Flag, as: FlagConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Flag, as: FlagConverter defdelegate model_to_as(report), to: FlagConverter end diff --git a/lib/service/activity_pub/converter/follower.ex b/lib/federation/activity_pub/activity_stream/converter/follower.ex similarity index 76% rename from lib/service/activity_pub/converter/follower.ex rename to lib/federation/activity_pub/activity_stream/converter/follower.ex index 4854366c3..d280a3f69 100644 --- a/lib/service/activity_pub/converter/follower.ex +++ b/lib/federation/activity_pub/activity_stream/converter/follower.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Follower do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Follower do @moduledoc """ Participant converter. @@ -6,13 +6,14 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Follower do internal one, and back. """ + alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Follower, as: FollowerModel - alias Mobilizon.Service.ActivityPub.Convertible - alias Mobilizon.Actors.Actor + alias Mobilizon.Federation.ActivityPub.ActivityStream.Convertible defimpl Convertible, for: FollowerModel do - alias Mobilizon.Service.ActivityPub.Converter.Follower, as: FollowerConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Follower, + as: FollowerConverter defdelegate model_to_as(follower), to: FollowerConverter end diff --git a/lib/service/activity_pub/converter/participant.ex b/lib/federation/activity_pub/activity_stream/converter/participant.ex similarity index 72% rename from lib/service/activity_pub/converter/participant.ex rename to lib/federation/activity_pub/activity_stream/converter/participant.ex index d50e892e8..51eb26ea6 100644 --- a/lib/service/activity_pub/converter/participant.ex +++ b/lib/federation/activity_pub/activity_stream/converter/participant.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Participant do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Participant do @moduledoc """ Participant converter. @@ -8,10 +8,10 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Participant do alias Mobilizon.Events.Participant, as: ParticipantModel - alias Mobilizon.Service.ActivityPub.Convertible + alias Mobilizon.Federation.ActivityPub.ActivityStream.Convertible defimpl Convertible, for: ParticipantModel do - alias Mobilizon.Service.ActivityPub.Converter.Participant, as: ParticipantConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Participant, as: ParticipantConverter defdelegate model_to_as(participant), to: ParticipantConverter end diff --git a/lib/service/activity_pub/converter/picture.ex b/lib/federation/activity_pub/activity_stream/converter/picture.ex similarity index 95% rename from lib/service/activity_pub/converter/picture.ex rename to lib/federation/activity_pub/activity_stream/converter/picture.ex index 292db9bda..2c4b0894c 100644 --- a/lib/service/activity_pub/converter/picture.ex +++ b/lib/federation/activity_pub/activity_stream/converter/picture.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Picture do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Picture do @moduledoc """ Picture converter. diff --git a/lib/service/activity_pub/converter/tombstone.ex b/lib/federation/activity_pub/activity_stream/converter/tombstone.ex similarity index 75% rename from lib/service/activity_pub/converter/tombstone.ex rename to lib/federation/activity_pub/activity_stream/converter/tombstone.ex index 8054ae376..d782c0bf9 100644 --- a/lib/service/activity_pub/converter/tombstone.ex +++ b/lib/federation/activity_pub/activity_stream/converter/tombstone.ex @@ -1,4 +1,4 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Tombstone do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Tombstone do @moduledoc """ Comment converter. @@ -6,14 +6,15 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Tombstone do """ alias Mobilizon.Tombstone, as: TombstoneModel - alias Mobilizon.Service.ActivityPub.{Converter, Convertible} + + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} require Logger @behaviour Converter defimpl Convertible, for: TombstoneModel do - alias Mobilizon.Service.ActivityPub.Converter.Tombstone, as: TombstoneConverter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Tombstone, as: TombstoneConverter defdelegate model_to_as(comment), to: TombstoneConverter end diff --git a/lib/service/activity_pub/converter/utils.ex b/lib/federation/activity_pub/activity_stream/converter/utils.ex similarity index 94% rename from lib/service/activity_pub/converter/utils.ex rename to lib/federation/activity_pub/activity_stream/converter/utils.ex index 8e637736f..06c656603 100644 --- a/lib/service/activity_pub/converter/utils.ex +++ b/lib/federation/activity_pub/activity_stream/converter/utils.ex @@ -1,14 +1,16 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.Utils do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Utils do @moduledoc """ - Various utils for converters + Various utils for converters. """ alias Mobilizon.Actors.Actor alias Mobilizon.Events alias Mobilizon.Events.Tag alias Mobilizon.Mention - alias Mobilizon.Service.ActivityPub alias Mobilizon.Storage.Repo + + alias Mobilizon.Federation.ActivityPub + require Logger @spec fetch_tags([String.t()]) :: [Tag.t()] diff --git a/lib/service/activity_pub/convertible.ex b/lib/federation/activity_pub/activity_stream/convertible.ex similarity index 67% rename from lib/service/activity_pub/convertible.ex rename to lib/federation/activity_pub/activity_stream/convertible.ex index a757cc413..cb27a76cc 100644 --- a/lib/service/activity_pub/convertible.ex +++ b/lib/federation/activity_pub/activity_stream/convertible.ex @@ -1,4 +1,4 @@ -defprotocol Mobilizon.Service.ActivityPub.Convertible do +defprotocol Mobilizon.Federation.ActivityPub.ActivityStream.Convertible do @moduledoc """ Convertible protocol. """ diff --git a/lib/service/activity_pub/audience.ex b/lib/federation/activity_pub/audience.ex similarity index 97% rename from lib/service/activity_pub/audience.ex rename to lib/federation/activity_pub/audience.ex index cca7d1f66..7f7566865 100644 --- a/lib/service/activity_pub/audience.ex +++ b/lib/federation/activity_pub/audience.ex @@ -1,13 +1,13 @@ -defmodule Mobilizon.Service.ActivityPub.Audience do +defmodule Mobilizon.Federation.ActivityPub.Audience do @moduledoc """ Tools for calculating content audience """ + alias Mobilizon.Actors alias Mobilizon.Actors.Actor - alias Mobilizon.Events.Comment - alias Mobilizon.Events.Event - alias Mobilizon.Events.Participant + alias Mobilizon.Events.{Comment, Event, Participant} alias Mobilizon.Share + require Logger @ap_public "https://www.w3.org/ns/activitystreams#Public" diff --git a/lib/service/federator.ex b/lib/federation/activity_pub/federator.ex similarity index 96% rename from lib/service/federator.ex rename to lib/federation/activity_pub/federator.ex index 2466468ff..f52d1531f 100644 --- a/lib/service/federator.ex +++ b/lib/federation/activity_pub/federator.ex @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/federator/federator.ex -defmodule Mobilizon.Service.Federator do +defmodule Mobilizon.Federation.ActivityPub.Federator do @moduledoc """ Handle federated activities """ @@ -11,8 +11,9 @@ defmodule Mobilizon.Service.Federator do use GenServer alias Mobilizon.Actors - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Activity, Transmogrifier} + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier} require Logger diff --git a/lib/service/http_signatures/signature.ex b/lib/federation/activity_pub/http_signatures/signature.ex similarity index 95% rename from lib/service/http_signatures/signature.ex rename to lib/federation/activity_pub/http_signatures/signature.ex index df929617f..3cdc10dcf 100644 --- a/lib/service/http_signatures/signature.ex +++ b/lib/federation/activity_pub/http_signatures/signature.ex @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/signature.ex -defmodule Mobilizon.Service.HTTPSignatures.Signature do +defmodule Mobilizon.Federation.HTTPSignatures.Signature do @moduledoc """ Adapter for the `HTTPSignatures` lib that handles signing and providing public keys to verify HTTPSignatures """ @@ -11,7 +11,8 @@ defmodule Mobilizon.Service.HTTPSignatures.Signature do @behaviour HTTPSignatures.Adapter alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub + + alias Mobilizon.Federation.ActivityPub require Logger @@ -111,6 +112,6 @@ defmodule Mobilizon.Service.HTTPSignatures.Signature do def generate_request_target(method, path), do: "#{method} #{path}" def build_digest(body) do - "SHA-256=" <> (:crypto.hash(:sha256, body) |> Base.encode64()) + "SHA-256=#{:sha256 |> :crypto.hash(body) |> Base.encode64()}" end end diff --git a/lib/service/activity_pub/relay.ex b/lib/federation/activity_pub/relay.ex similarity index 96% rename from lib/service/activity_pub/relay.ex rename to lib/federation/activity_pub/relay.ex index eb45e0d10..111699de1 100644 --- a/lib/service/activity_pub/relay.ex +++ b/lib/federation/activity_pub/relay.ex @@ -3,16 +3,16 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/relay.ex -defmodule Mobilizon.Service.ActivityPub.Relay do +defmodule Mobilizon.Federation.ActivityPub.Relay do @moduledoc """ Handles following and unfollowing relays and instances. """ alias Mobilizon.Actors alias Mobilizon.Actors.{Actor, Follower} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Activity, Transmogrifier} - alias Mobilizon.Service.WebFinger + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier, WebFinger} alias MobilizonWeb.API.Follows diff --git a/lib/service/activity_pub/transmogrifier.ex b/lib/federation/activity_pub/transmogrifier.ex similarity index 95% rename from lib/service/activity_pub/transmogrifier.ex rename to lib/federation/activity_pub/transmogrifier.ex index d21d965da..486df279c 100644 --- a/lib/service/activity_pub/transmogrifier.ex +++ b/lib/federation/activity_pub/transmogrifier.ex @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/transmogrifier.ex -defmodule Mobilizon.Service.ActivityPub.Transmogrifier do +defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do @moduledoc """ A module to handle coding from internal to wire ActivityPub and back. """ @@ -12,11 +12,12 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do alias Mobilizon.Actors.{Actor, Follower} alias Mobilizon.Events alias Mobilizon.Events.{Comment, Event, Participant} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Activity, Converter, Convertible, Utils} - alias MobilizonWeb.Email.Participation - import Mobilizon.Service.ActivityPub.Utils + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.{Activity, Utils} + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Converter, Convertible} + + alias MobilizonWeb.Email.Participation require Logger @@ -117,7 +118,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do "id" => id } = data ) do - with actor_url <- get_actor(data), + with actor_url <- Utils.get_actor(data), {:ok, %Actor{} = actor} <- ActivityPub.get_or_fetch_actor_by_url(actor_url), {:object_not_found, {:ok, %Activity{} = activity, object}} <- {:object_not_found, @@ -146,7 +147,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do def handle_incoming( %{"type" => "Reject", "object" => rejected_object, "actor" => _actor, "id" => id} = data ) do - with actor_url <- get_actor(data), + with actor_url <- Utils.get_actor(data), {:ok, %Actor{} = actor} <- ActivityPub.get_or_fetch_actor_by_url(actor_url), {:object_not_found, {:ok, activity, object}} <- {:object_not_found, @@ -175,14 +176,13 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do def handle_incoming( %{"type" => "Announce", "object" => object, "actor" => _actor, "id" => _id} = data ) do - with actor <- get_actor(data), + with actor <- Utils.get_actor(data), # TODO: Is the following line useful? {:ok, %Actor{id: actor_id} = _actor} <- ActivityPub.get_or_fetch_actor_by_url(actor), :ok <- Logger.debug("Fetching contained object"), {:ok, object} <- fetch_obj_helper_as_activity_streams(object), :ok <- Logger.debug("Handling contained object"), - create_data <- - make_create_data(object), + create_data <- Utils.make_create_data(object), :ok <- Logger.debug(inspect(object)), {:ok, _activity, entity} <- handle_incoming(create_data), :ok <- Logger.debug("Finished processing contained object"), @@ -221,13 +221,12 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do %{"type" => "Update", "object" => %{"type" => "Event"} = object, "actor" => _actor} = update_data ) do - with actor <- get_actor(update_data), + with actor <- Utils.get_actor(update_data), {:ok, %Actor{url: actor_url}} <- Actors.get_actor_by_url(actor), {:ok, %Event{} = old_event} <- object |> Utils.get_url() |> ActivityPub.fetch_object_from_url(), - {:ok, object_data} <- - object |> Converter.Event.as_to_model_data(), - {:origin_check, true} <- {:origin_check, origin_check?(actor_url, update_data)}, + {:ok, object_data} <- Converter.Event.as_to_model_data(object), + {:origin_check, true} <- {:origin_check, Utils.origin_check?(actor_url, update_data)}, {:ok, %Activity{} = activity, %Event{} = new_event} <- ActivityPub.update(:event, old_event, object_data, false) do {:ok, activity, new_event} @@ -249,7 +248,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do "id" => id } = data ) do - with actor <- get_actor(data), + with actor <- Utils.get_actor(data), {:ok, %Actor{} = actor} <- ActivityPub.get_or_fetch_actor_by_url(actor), {:ok, object} <- fetch_obj_helper_as_activity_streams(object_id), {:ok, activity, object} <- @@ -287,10 +286,10 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do def handle_incoming( %{"type" => "Delete", "object" => object, "actor" => _actor, "id" => _id} = data ) do - with actor <- get_actor(data), + with actor <- Utils.get_actor(data), {:ok, %Actor{url: actor_url}} <- Actors.get_actor_by_url(actor), object_id <- Utils.get_url(object), - {:origin_check, true} <- {:origin_check, origin_check_from_id?(actor_url, object_id)}, + {:origin_check, true} <- {:origin_check, Utils.origin_check_from_id?(actor_url, object_id)}, {:ok, object} <- ActivityPub.fetch_object_from_url(object_id), {:ok, activity, object} <- ActivityPub.delete(object, false) do {:ok, activity, object} @@ -308,7 +307,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do def handle_incoming( %{"type" => "Join", "object" => object, "actor" => _actor, "id" => id} = data ) do - with actor <- get_actor(data), + with actor <- Utils.get_actor(data), {:ok, %Actor{url: _actor_url} = actor} <- Actors.get_actor_by_url(actor), object <- Utils.get_url(object), {:ok, object} <- ActivityPub.fetch_object_from_url(object), @@ -324,7 +323,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do def handle_incoming( %{"type" => "Leave", "object" => object, "actor" => actor, "id" => _id} = data ) do - with actor <- get_actor(data), + with actor <- Utils.get_actor(data), {:ok, %Actor{} = actor} <- Actors.get_actor_by_url(actor), object <- Utils.get_url(object), {:ok, object} <- ActivityPub.fetch_object_from_url(object), @@ -356,7 +355,7 @@ defmodule Mobilizon.Service.ActivityPub.Transmogrifier do # "id" => id # } = data # ) do - # with actor <- get_actor(data), + # with actor <- Utils.get_actor(data), # %Actor{} = actor <- ActivityPub.get_or_fetch_actor_by_url(actor), # {:ok, object} <- fetch_obj_helper(object_id) || fetch_obj_helper(object_id), # {:ok, activity, _, _} <- ActivityPub.unlike(actor, object, id, false) do diff --git a/lib/service/activity_pub/utils.ex b/lib/federation/activity_pub/utils.ex similarity index 97% rename from lib/service/activity_pub/utils.ex rename to lib/federation/activity_pub/utils.ex index 586fb890a..53485908e 100644 --- a/lib/service/activity_pub/utils.ex +++ b/lib/federation/activity_pub/utils.ex @@ -3,16 +3,18 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/utils.ex -defmodule Mobilizon.Service.ActivityPub.Utils do +defmodule Mobilizon.Federation.ActivityPub.Utils do @moduledoc """ - # Various ActivityPub related utils. + Various ActivityPub related utils. """ alias Mobilizon.Actors alias Mobilizon.Actors.Actor alias Mobilizon.Media.Picture - alias Mobilizon.Service.ActivityPub.{Activity, Converter} - alias Mobilizon.Service.Federator + + alias Mobilizon.Federation.ActivityPub.{Activity, Federator, Relay} + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter + alias Mobilizon.Federation.HTTPSignatures require Logger @@ -422,8 +424,8 @@ defmodule Mobilizon.Service.ActivityPub.Utils do uri = URI.parse(id) signature = - Mobilizon.Service.ActivityPub.Relay.get_actor() - |> Mobilizon.Service.HTTPSignatures.Signature.sign(%{ + Relay.get_actor() + |> HTTPSignatures.Signature.sign(%{ "(request-target)": "get #{uri.path}", host: uri.host, date: date diff --git a/lib/service/activity_pub/visibility.ex b/lib/federation/activity_pub/visibility.ex similarity index 78% rename from lib/service/activity_pub/visibility.ex rename to lib/federation/activity_pub/visibility.ex index fa89c6ec9..0bfb7e9ca 100644 --- a/lib/service/activity_pub/visibility.ex +++ b/lib/federation/activity_pub/visibility.ex @@ -3,13 +3,14 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/visibility.ex -defmodule Mobilizon.Service.ActivityPub.Visibility do +defmodule Mobilizon.Federation.ActivityPub.Visibility do @moduledoc """ Utility functions related to content visibility """ alias Mobilizon.Events.Comment - alias Mobilizon.Service.ActivityPub.Activity + + alias Mobilizon.Federation.ActivityPub.Activity @public "https://www.w3.org/ns/activitystreams#Public" @@ -18,8 +19,9 @@ defmodule Mobilizon.Service.ActivityPub.Visibility do def is_public?(%{data: data}), do: is_public?(data) def is_public?(%Activity{data: data}), do: is_public?(data) - def is_public?(data) when is_map(data), - do: @public in (Map.get(data, "to", []) ++ Map.get(data, "cc", [])) + def is_public?(data) when is_map(data) do + @public in (Map.get(data, "to", []) ++ Map.get(data, "cc", [])) + end def is_public?(%Comment{deleted_at: deleted_at}), do: !is_nil(deleted_at) def is_public?(err), do: raise(ArgumentError, message: "Invalid argument #{inspect(err)}") diff --git a/lib/service/web_finger/web_finger.ex b/lib/federation/activity_pub/web_finger/web_finger.ex similarity index 94% rename from lib/service/web_finger/web_finger.ex rename to lib/federation/activity_pub/web_finger/web_finger.ex index d1ac160fb..3e9459a54 100644 --- a/lib/service/web_finger/web_finger.ex +++ b/lib/federation/activity_pub/web_finger/web_finger.ex @@ -3,16 +3,16 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/web_finger/web_finger.ex -defmodule Mobilizon.Service.WebFinger do +defmodule Mobilizon.Federation.ActivityPub.WebFinger do @moduledoc """ - # WebFinger - - Performs the WebFinger requests and responses (JSON only) + Performs the WebFinger requests and responses (JSON only). """ alias Mobilizon.Actors alias Mobilizon.Actors.Actor - alias Mobilizon.Service.XmlBuilder + + alias Mobilizon.Federation.ActivityPub.WebFinger.XmlBuilder + require Jason require Logger diff --git a/lib/service/xml_builder.ex b/lib/federation/activity_pub/web_finger/xml_builder.ex similarity index 69% rename from lib/service/xml_builder.ex rename to lib/federation/activity_pub/web_finger/xml_builder.ex index ac32a45b5..0c7cf45e6 100644 --- a/lib/service/xml_builder.ex +++ b/lib/federation/activity_pub/web_finger/xml_builder.ex @@ -3,16 +3,13 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/xml_builder.ex -defmodule Mobilizon.Service.XmlBuilder do +defmodule Mobilizon.Federation.ActivityPub.WebFinger.XmlBuilder do @moduledoc """ - XML Builder. - - Needed to build XRD for webfinger host_meta + Builds XRD for WebFinger host_meta. """ def to_xml({tag, attributes, content}) do open_tag = make_open_tag(tag, attributes) - content_xml = to_xml(content) "<#{open_tag}>#{content_xml}" @@ -26,28 +23,22 @@ defmodule Mobilizon.Service.XmlBuilder do def to_xml({tag, content}), do: to_xml({tag, %{}, content}) - def to_xml(content) when is_binary(content) do - to_string(content) - end + def to_xml(content) when is_binary(content), do: to_string(content) def to_xml(content) when is_list(content) do - for element <- content do - to_xml(element) - end + content + |> Enum.map(&to_xml/1) |> Enum.join() end - def to_xml(%NaiveDateTime{} = time) do - NaiveDateTime.to_iso8601(time) - end + def to_xml(%NaiveDateTime{} = time), do: NaiveDateTime.to_iso8601(time) def to_doc(content), do: ~s() <> to_xml(content) defp make_open_tag(tag, attributes) do attributes_string = - for {attribute, value} <- attributes do - "#{attribute}=\"#{value}\"" - end + attributes + |> Enum.map(fn {attribute, value} -> "#{attribute}=\"#{value}\"" end) |> Enum.join(" ") [tag, attributes_string] |> Enum.join(" ") |> String.trim() diff --git a/lib/mix/tasks/mobilizon/relay.ex b/lib/mix/tasks/mobilizon/relay.ex index 0e88ea603..f7f0830a4 100644 --- a/lib/mix/tasks/mobilizon/relay.ex +++ b/lib/mix/tasks/mobilizon/relay.ex @@ -23,7 +23,7 @@ defmodule Mix.Tasks.Mobilizon.Relay do use Mix.Task alias Mix.Tasks.Mobilizon.Common - alias Mobilizon.Service.ActivityPub.Relay + alias Mobilizon.Federation.ActivityPub.Relay @shortdoc "Manages remote relays" def run(["follow", target]) do diff --git a/lib/mobilizon.ex b/lib/mobilizon.ex index 49443f84d..6f31f7f62 100644 --- a/lib/mobilizon.ex +++ b/lib/mobilizon.ex @@ -15,6 +15,7 @@ defmodule Mobilizon do import Cachex.Spec alias Mobilizon.Config + alias Mobilizon.Federation.ActivityPub alias Mobilizon.Service.Export.{Feed, ICalendar} @name Mix.Project.config()[:name] @@ -41,7 +42,7 @@ defmodule Mobilizon do {Oban, Application.get_env(:mobilizon, Oban)}, # workers Guardian.DB.Token.SweeperServer, - Mobilizon.Service.Federator, + ActivityPub.Federator, cachex_spec(:feed, 2500, 60, 60, &Feed.create_cache/1), cachex_spec(:ics, 2500, 60, 60, &ICalendar.create_cache/1), cachex_spec(:statistics, 10, 60, 60), @@ -94,7 +95,7 @@ defmodule Mobilizon do defp internal_actor() do %{ id: :internal_actor_init, - start: {Task, :start_link, [&Mobilizon.Service.ActivityPub.Relay.init/0]}, + start: {Task, :start_link, [&ActivityPub.Relay.init/0]}, restart: :temporary } end diff --git a/lib/mobilizon/actors/actors.ex b/lib/mobilizon/actors/actors.ex index 0a70d6cbe..44d977ecf 100644 --- a/lib/mobilizon/actors/actors.ex +++ b/lib/mobilizon/actors/actors.ex @@ -11,9 +11,10 @@ defmodule Mobilizon.Actors do alias Mobilizon.Actors.{Actor, Bot, Follower, Member} alias Mobilizon.{Crypto, Events} alias Mobilizon.Media.File - alias Mobilizon.Storage.{Page, Repo} alias Mobilizon.Service.Workers.BackgroundWorker - alias Mobilizon.Service.ActivityPub + alias Mobilizon.Storage.{Page, Repo} + + alias Mobilizon.Federation.ActivityPub require Logger diff --git a/lib/mobilizon/tombstone.ex b/lib/mobilizon/tombstone.ex index e409fa84b..864228cca 100644 --- a/lib/mobilizon/tombstone.ex +++ b/lib/mobilizon/tombstone.ex @@ -31,7 +31,7 @@ defmodule Mobilizon.Tombstone do |> validate_required(@required_attrs) end - @spec create_tombstone(map()) :: {:ok, Ecto.Schema.t()} | {:error, Ecto.Changeset.t()} + @spec create_tombstone(map) :: {:ok, Ecto.Schema.t()} | {:error, Ecto.Changeset.t()} def create_tombstone(attrs) do %__MODULE__{} |> changeset(attrs) diff --git a/lib/mobilizon_web/api/comments.ex b/lib/mobilizon_web/api/comments.ex index e3feb3056..24fe79771 100644 --- a/lib/mobilizon_web/api/comments.ex +++ b/lib/mobilizon_web/api/comments.ex @@ -3,8 +3,9 @@ defmodule MobilizonWeb.API.Comments do API for Comments. """ alias Mobilizon.Events.Comment - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.Activity + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Activity @doc """ Create a comment diff --git a/lib/mobilizon_web/api/events.ex b/lib/mobilizon_web/api/events.ex index d26752772..2db2b7984 100644 --- a/lib/mobilizon_web/api/events.ex +++ b/lib/mobilizon_web/api/events.ex @@ -5,9 +5,9 @@ defmodule MobilizonWeb.API.Events do alias Mobilizon.Actors.Actor alias Mobilizon.Events.Event - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.Activity - alias Mobilizon.Service.ActivityPub.Utils + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.{Activity, Utils} @doc """ Create an event diff --git a/lib/mobilizon_web/api/follows.ex b/lib/mobilizon_web/api/follows.ex index c86f6d3f4..ca4e11af2 100644 --- a/lib/mobilizon_web/api/follows.ex +++ b/lib/mobilizon_web/api/follows.ex @@ -5,8 +5,9 @@ defmodule MobilizonWeb.API.Follows do alias Mobilizon.Actors alias Mobilizon.Actors.{Actor, Follower} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.Activity + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Activity require Logger diff --git a/lib/mobilizon_web/api/groups.ex b/lib/mobilizon_web/api/groups.ex index d19329e71..b8747a8cc 100644 --- a/lib/mobilizon_web/api/groups.ex +++ b/lib/mobilizon_web/api/groups.ex @@ -5,8 +5,9 @@ defmodule MobilizonWeb.API.Groups do alias Mobilizon.Actors alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.Activity + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Activity @doc """ Create a group diff --git a/lib/mobilizon_web/api/participations.ex b/lib/mobilizon_web/api/participations.ex index 3bd6a348e..4c53d5005 100644 --- a/lib/mobilizon_web/api/participations.ex +++ b/lib/mobilizon_web/api/participations.ex @@ -5,7 +5,9 @@ defmodule MobilizonWeb.API.Participations do alias Mobilizon.Actors.Actor alias Mobilizon.Events.{Event, Participant} - alias Mobilizon.Service.ActivityPub + + alias Mobilizon.Federation.ActivityPub + alias MobilizonWeb.Email.Participation @spec join(Event.t(), Actor.t()) :: {:ok, Participant.t()} diff --git a/lib/mobilizon_web/api/reports.ex b/lib/mobilizon_web/api/reports.ex index 278ef828d..8fd7f68c2 100644 --- a/lib/mobilizon_web/api/reports.ex +++ b/lib/mobilizon_web/api/reports.ex @@ -8,11 +8,12 @@ defmodule MobilizonWeb.API.Reports do alias Mobilizon.Actors.Actor alias Mobilizon.Reports, as: ReportsAction alias Mobilizon.Reports.{Note, Report, ReportStatus} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.Activity alias Mobilizon.Users alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Activity + @doc """ Create a report/flag on an actor, and optionally on an event or on comments. """ diff --git a/lib/mobilizon_web/api/search.ex b/lib/mobilizon_web/api/search.ex index 0124afb5f..7cb2d600d 100644 --- a/lib/mobilizon_web/api/search.ex +++ b/lib/mobilizon_web/api/search.ex @@ -6,9 +6,10 @@ defmodule MobilizonWeb.API.Search do alias Mobilizon.Actors alias Mobilizon.Actors.ActorType alias Mobilizon.Events - alias Mobilizon.Service.ActivityPub alias Mobilizon.Storage.Page + alias Mobilizon.Federation.ActivityPub + require Logger @doc """ diff --git a/lib/mobilizon_web/cache/activity_pub.ex b/lib/mobilizon_web/cache/activity_pub.ex index 14c768256..d91c1cb17 100644 --- a/lib/mobilizon_web/cache/activity_pub.ex +++ b/lib/mobilizon_web/cache/activity_pub.ex @@ -3,10 +3,12 @@ defmodule MobilizonWeb.Cache.ActivityPub do The ActivityPub related functions. """ - alias Mobilizon.{Actors, Events, Service, Tombstone} + alias Mobilizon.{Actors, Events, Tombstone} alias Mobilizon.Actors.Actor alias Mobilizon.Events.{Comment, Event} - alias Service.ActivityPub + + alias Mobilizon.Federation.ActivityPub.Relay + alias MobilizonWeb.Router.Helpers, as: Routes alias MobilizonWeb.Endpoint @@ -73,6 +75,6 @@ defmodule MobilizonWeb.Cache.ActivityPub do """ @spec get_relay :: {:commit, Actor.t()} | {:ignore, nil} def get_relay do - Cachex.fetch(@cache, "relay_actor", &ActivityPub.Relay.get_actor/0) + Cachex.fetch(@cache, "relay_actor", &Relay.get_actor/0) end end diff --git a/lib/mobilizon_web/controllers/activity_pub_controller.ex b/lib/mobilizon_web/controllers/activity_pub_controller.ex index 51c5ecb13..72d41de5f 100644 --- a/lib/mobilizon_web/controllers/activity_pub_controller.ex +++ b/lib/mobilizon_web/controllers/activity_pub_controller.ex @@ -7,8 +7,9 @@ defmodule MobilizonWeb.ActivityPubController do use MobilizonWeb, :controller alias Mobilizon.{Actors, Actors.Actor, Config} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.Federator + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Federator alias MobilizonWeb.ActivityPub.ActorView alias MobilizonWeb.Cache diff --git a/lib/mobilizon_web/controllers/web_finger_controller.ex b/lib/mobilizon_web/controllers/web_finger_controller.ex index dca47c231..fca8074d1 100644 --- a/lib/mobilizon_web/controllers/web_finger_controller.ex +++ b/lib/mobilizon_web/controllers/web_finger_controller.ex @@ -7,10 +7,12 @@ defmodule MobilizonWeb.WebFingerController do @moduledoc """ Handles Webfinger requests """ + use MobilizonWeb, :controller + alias Mobilizon.Federation.ActivityPub.WebFinger + plug(MobilizonWeb.Plugs.Federating) - alias Mobilizon.Service.WebFinger @doc """ Provides /.well-known/host-meta diff --git a/lib/mobilizon_web/plugs/mapped_signature_to_identity.ex b/lib/mobilizon_web/plugs/mapped_signature_to_identity.ex index 361325848..e62c10a04 100644 --- a/lib/mobilizon_web/plugs/mapped_signature_to_identity.ex +++ b/lib/mobilizon_web/plugs/mapped_signature_to_identity.ex @@ -7,12 +7,15 @@ defmodule MobilizonWeb.Plugs.MappedSignatureToIdentity do @moduledoc """ Get actor identity from Signature when handing fetches """ - alias Mobilizon.Service.HTTPSignatures.Signature - alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub.Utils - alias Mobilizon.Service.ActivityPub import Plug.Conn + + alias Mobilizon.Actors.Actor + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Utils + alias Mobilizon.Federation.HTTPSignatures.Signature + require Logger def init(options), do: options diff --git a/lib/mobilizon_web/resolvers/address.ex b/lib/mobilizon_web/resolvers/address.ex index 47d9f8475..eefc35cfb 100644 --- a/lib/mobilizon_web/resolvers/address.ex +++ b/lib/mobilizon_web/resolvers/address.ex @@ -2,10 +2,12 @@ defmodule MobilizonWeb.Resolvers.Address do @moduledoc """ Handles the comment-related GraphQL calls """ - require Logger + alias Mobilizon.Addresses.Address alias Mobilizon.Service.Geospatial + require Logger + @doc """ Search an address """ diff --git a/lib/mobilizon_web/resolvers/admin.ex b/lib/mobilizon_web/resolvers/admin.ex index 2e46bf46b..8ea664bc9 100644 --- a/lib/mobilizon_web/resolvers/admin.ex +++ b/lib/mobilizon_web/resolvers/admin.ex @@ -11,10 +11,11 @@ defmodule MobilizonWeb.Resolvers.Admin do alias Mobilizon.Events alias Mobilizon.Events.{Event, Comment} alias Mobilizon.Reports.{Note, Report} - alias Mobilizon.Service.Statistics alias Mobilizon.Users.User + alias Mobilizon.Service.Statistics alias Mobilizon.Storage.Page - alias Mobilizon.Service.ActivityPub.Relay + + alias Mobilizon.Federation.ActivityPub.Relay def list_action_logs( _parent, diff --git a/lib/mobilizon_web/resolvers/comment.ex b/lib/mobilizon_web/resolvers/comment.ex index d61950d2e..e39099c2b 100644 --- a/lib/mobilizon_web/resolvers/comment.ex +++ b/lib/mobilizon_web/resolvers/comment.ex @@ -3,14 +3,15 @@ defmodule MobilizonWeb.Resolvers.Comment do Handles the comment-related GraphQL calls. """ + import Mobilizon.Service.Admin.ActionLogService + + alias Mobilizon.Actors + alias Mobilizon.Actors.Actor alias Mobilizon.Events alias Mobilizon.Events.Comment, as: CommentModel alias Mobilizon.Users.User - alias Mobilizon.Actors.Actor - alias Mobilizon.Actors alias MobilizonWeb.API.Comments - import Mobilizon.Service.Admin.ActionLogService require Logger diff --git a/lib/mobilizon_web/resolvers/config.ex b/lib/mobilizon_web/resolvers/config.ex index 44ee37f1c..a3a4d4485 100644 --- a/lib/mobilizon_web/resolvers/config.ex +++ b/lib/mobilizon_web/resolvers/config.ex @@ -3,9 +3,10 @@ defmodule MobilizonWeb.Resolvers.Config do Handles the config-related GraphQL calls. """ - alias Mobilizon.Config alias Geolix.Adapter.MMDB2.Record.{Country, Location} + alias Mobilizon.Config + @doc """ Gets config. """ diff --git a/lib/mobilizon_web/resolvers/event.ex b/lib/mobilizon_web/resolvers/event.ex index 8d20b53ee..bfe3030ea 100644 --- a/lib/mobilizon_web/resolvers/event.ex +++ b/lib/mobilizon_web/resolvers/event.ex @@ -9,9 +9,10 @@ defmodule MobilizonWeb.Resolvers.Event do alias Mobilizon.Actors.Actor alias Mobilizon.Events alias Mobilizon.Events.{Event, Participant, EventParticipantStats} - alias Mobilizon.Service.ActivityPub.Activity alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub.Activity + alias MobilizonWeb.API alias MobilizonWeb.Resolvers.Person diff --git a/lib/mobilizon_web/resolvers/group.ex b/lib/mobilizon_web/resolvers/group.ex index 92ea3a603..98220d670 100644 --- a/lib/mobilizon_web/resolvers/group.ex +++ b/lib/mobilizon_web/resolvers/group.ex @@ -5,9 +5,10 @@ defmodule MobilizonWeb.Resolvers.Group do alias Mobilizon.Actors alias Mobilizon.Actors.{Actor, Member} - alias Mobilizon.Service.ActivityPub alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub + alias MobilizonWeb.API alias MobilizonWeb.Resolvers.Person diff --git a/lib/mobilizon_web/resolvers/person.ex b/lib/mobilizon_web/resolvers/person.ex index 9084ae306..82d9b172e 100644 --- a/lib/mobilizon_web/resolvers/person.ex +++ b/lib/mobilizon_web/resolvers/person.ex @@ -7,10 +7,11 @@ defmodule MobilizonWeb.Resolvers.Person do alias Mobilizon.Actors.Actor alias Mobilizon.Events alias Mobilizon.Events.Participant - alias Mobilizon.Service.ActivityPub alias Mobilizon.Users alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub + @doc """ Get a person """ diff --git a/lib/mobilizon_web/resolvers/user.ex b/lib/mobilizon_web/resolvers/user.ex index 6e5b0c1bd..94e00cf1e 100644 --- a/lib/mobilizon_web/resolvers/user.ex +++ b/lib/mobilizon_web/resolvers/user.ex @@ -8,8 +8,8 @@ defmodule MobilizonWeb.Resolvers.User do alias Mobilizon.{Actors, Config, Users, Events} alias Mobilizon.Actors.Actor alias Mobilizon.Service.Users.{Activation, ResetPassword} - alias Mobilizon.Users.User alias Mobilizon.Storage.Repo + alias Mobilizon.Users.User require Logger diff --git a/lib/mobilizon_web/views/activity_pub/actor_view.ex b/lib/mobilizon_web/views/activity_pub/actor_view.ex index 284e12271..477b17ac6 100644 --- a/lib/mobilizon_web/views/activity_pub/actor_view.ex +++ b/lib/mobilizon_web/views/activity_pub/actor_view.ex @@ -3,8 +3,10 @@ defmodule MobilizonWeb.ActivityPub.ActorView do alias Mobilizon.Actors alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Activity, Utils, Convertible} + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.{Activity, Utils} + alias Mobilizon.Federation.ActivityPub.ActivityStream.Convertible @private_visibility_empty_collection %{elements: [], total: 0} diff --git a/lib/mobilizon_web/views/activity_pub/object_view.ex b/lib/mobilizon_web/views/activity_pub/object_view.ex index 4ad2b9fee..f0a77dad9 100644 --- a/lib/mobilizon_web/views/activity_pub/object_view.ex +++ b/lib/mobilizon_web/views/activity_pub/object_view.ex @@ -1,7 +1,7 @@ defmodule MobilizonWeb.ActivityPub.ObjectView do use MobilizonWeb, :view - alias Mobilizon.Service.ActivityPub.{Activity, Utils} + alias Mobilizon.Federation.ActivityPub.{Activity, Utils} def render("activity.json", %{activity: %Activity{local: local, data: data} = activity}) do %{ diff --git a/lib/mobilizon_web/views/page_view.ex b/lib/mobilizon_web/views/page_view.ex index 33b01cc74..e89a18277 100644 --- a/lib/mobilizon_web/views/page_view.ex +++ b/lib/mobilizon_web/views/page_view.ex @@ -2,14 +2,19 @@ defmodule MobilizonWeb.PageView do @moduledoc """ View for our webapp """ + use MobilizonWeb, :view + alias Mobilizon.Actors.Actor - alias Mobilizon.Tombstone - alias Mobilizon.Service.ActivityPub.{Convertible, Utils} - alias Mobilizon.Service.Metadata - alias Mobilizon.Service.MetadataUtils - alias Mobilizon.Service.Metadata.Instance alias Mobilizon.Events.{Comment, Event} + alias Mobilizon.Tombstone + + alias Mobilizon.Service.Metadata + alias Mobilizon.Service.Metadata.Instance + alias Mobilizon.Service.Metadata.Utils, as: MetadataUtils + + alias Mobilizon.Federation.ActivityPub.Utils + alias Mobilizon.Federation.ActivityPub.ActivityStream.Convertible def render("actor.activity-json", %{conn: %{assigns: %{object: %Actor{} = actor}}}) do actor diff --git a/lib/service/html.ex b/lib/service/formatter/default_scrubbler.ex similarity index 86% rename from lib/service/html.ex rename to lib/service/formatter/default_scrubbler.ex index 02c4d88c3..a35b51105 100644 --- a/lib/service/html.ex +++ b/lib/service/formatter/default_scrubbler.ex @@ -3,21 +3,15 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/html.ex -defmodule Mobilizon.Service.HTML do +defmodule Mobilizon.Service.Formatter.DefaultScrubbler do @moduledoc """ - Service to filter tags out of HTML content + Custom strategy to filter HTML content. """ - alias HtmlSanitizeEx.Scrubber - alias Mobilizon.Service.HTML.Scrubber.Default - def filter_tags(html), do: Scrubber.scrub(html, Default) -end - -defmodule Mobilizon.Service.HTML.Scrubber.Default do - @moduledoc "Custom strategy to filter HTML content" + alias HtmlSanitizeEx.Scrubber.Meta require HtmlSanitizeEx.Scrubber.Meta - alias HtmlSanitizeEx.Scrubber.Meta + # credo:disable-for-previous-line # No idea how to fix this one… diff --git a/lib/service/formatter/formatter.ex b/lib/service/formatter/formatter.ex index 33924d68c..169139a20 100644 --- a/lib/service/formatter/formatter.ex +++ b/lib/service/formatter/formatter.ex @@ -10,18 +10,18 @@ defmodule Mobilizon.Service.Formatter do alias Mobilizon.Actors alias Mobilizon.Actors.Actor - alias Mobilizon.Service.HTML + alias Mobilizon.Service.Formatter.HTML @link_regex ~r"((?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~%:/?#[\]@!\$&'\(\)\*\+,;=.]+)|[0-9a-z+\-\.]+:[0-9a-z$-_.+!*'(),]+"ui @markdown_characters_regex ~r/(`|\*|_|{|}|[|]|\(|\)|#|\+|-|\.|!)/ @auto_linker_config hashtag: true, - hashtag_handler: &Mobilizon.Service.Formatter.hashtag_handler/4, + hashtag_handler: &__MODULE__.hashtag_handler/4, mention: true, - mention_handler: &Mobilizon.Service.Formatter.mention_handler/4 + mention_handler: &__MODULE__.mention_handler/4 def escape_mention_handler("@" <> nickname = mention, buffer, _, _) do - case Mobilizon.Actors.get_actor_by_name(nickname) do + case Actors.get_actor_by_name(nickname) do %Actor{} -> # escape markdown characters with `\\` # (we don't want something like @user__name to be parsed by markdown) diff --git a/lib/service/formatter/html.ex b/lib/service/formatter/html.ex new file mode 100644 index 000000000..9eccbb217 --- /dev/null +++ b/lib/service/formatter/html.ex @@ -0,0 +1,17 @@ +# Portions of this file are derived from Pleroma: +# Copyright © 2017-2019 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only +# Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/html.ex + +defmodule Mobilizon.Service.Formatter.HTML do + @moduledoc """ + Service to filter tags out of HTML content. + """ + + alias HtmlSanitizeEx.Scrubber + + alias Mobilizon.Service.Formatter.DefaultScrubbler + + def filter_tags(html), do: Scrubber.scrub(html, DefaultScrubbler) +end + diff --git a/lib/service/metadata.ex b/lib/service/metadata.ex deleted file mode 100644 index e139e503b..000000000 --- a/lib/service/metadata.ex +++ /dev/null @@ -1,20 +0,0 @@ -defprotocol Mobilizon.Service.Metadata do - @doc """ - Build tags - """ - def build_tags(entity) -end - -defmodule Mobilizon.Service.MetadataUtils do - @moduledoc """ - Tools to convert tags to string - """ - alias Phoenix.HTML - - def stringify_tags(tags) do - Enum.reduce(tags, "", &stringify_tag/2) - end - - defp stringify_tag(tag, acc) when is_tuple(tag), do: acc <> HTML.safe_to_string(tag) - defp stringify_tag(tag, acc) when is_binary(tag), do: acc <> tag -end diff --git a/lib/service/metadata/metadata.ex b/lib/service/metadata/metadata.ex new file mode 100644 index 000000000..c8642cfaf --- /dev/null +++ b/lib/service/metadata/metadata.ex @@ -0,0 +1,7 @@ +defprotocol Mobilizon.Service.Metadata do + @doc """ + Build tags + """ + + def build_tags(entity) +end diff --git a/lib/service/metadata/utils.ex b/lib/service/metadata/utils.ex new file mode 100644 index 000000000..027a78339 --- /dev/null +++ b/lib/service/metadata/utils.ex @@ -0,0 +1,12 @@ +defmodule Mobilizon.Service.Metadata.Utils do + @moduledoc """ + Tools to convert tags to string. + """ + + alias Phoenix.HTML + + def stringify_tags(tags), do: Enum.reduce(tags, "", &stringify_tag/2) + + defp stringify_tag(tag, acc) when is_tuple(tag), do: acc <> HTML.safe_to_string(tag) + defp stringify_tag(tag, acc) when is_binary(tag), do: acc <> tag +end diff --git a/mix.exs b/mix.exs index 18e769ea7..02c248c61 100644 --- a/mix.exs +++ b/mix.exs @@ -182,7 +182,6 @@ defmodule Mobilizon.Mixfile do Mobilizon.Addresses, Mobilizon.Addresses.Address, Mobilizon.Events, - Mobilizon.Service.ActivityPub.Activity, Mobilizon.Events.Event, Mobilizon.Events.Comment, Mobilizon.Events.FeedToken, @@ -205,7 +204,8 @@ defmodule Mobilizon.Mixfile do Mobilizon.Users.UserRole, Mobilizon.Users.Guards, Mobilizon.Storage.Ecto, - Mobilizon.Storage.Repo + Mobilizon.Storage.Repo, + Mobilizon.Federation.ActivityPub.Activity ], APIs: [ MobilizonWeb.API.Comments, @@ -276,19 +276,19 @@ defmodule Mobilizon.Mixfile do MobilizonWeb.Schema.Utils ], ActivityPub: [ + Mobilizon.Federation.ActivityPub, + Mobilizon.Federation.ActivityPub.Federator, + Mobilizon.Federation.ActivityPub.Transmogrifier, + Mobilizon.Federation.ActivityPub.Utils, + Mobilizon.Federation.ActivityPub.WebFinger, + Mobilizon.Federation.ActivityPub.WebFinger.XmlBuilder, + Mobilizon.Federation.HTTPSignatures.Signature, MobilizonWeb.ActivityPub.ActorView, MobilizonWeb.ActivityPub.ObjectView, MobilizonWeb.ActivityPubController, - Mobilizon.Service.ActivityPub, - Mobilizon.Service.ActivityPub.Transmogrifier, - Mobilizon.Service.ActivityPub.Utils, MobilizonWeb.HTTPSignaturePlug, MobilizonWeb.WebFingerController, - MobilizonWeb.NodeInfoController, - Mobilizon.Service.HTTPSignatures.Signature, - Mobilizon.Service.WebFinger, - Mobilizon.Service.XmlBuilder, - Mobilizon.Service.Federator + MobilizonWeb.NodeInfoController ], Services: [ Mobilizon.Service.EmailChecker, diff --git a/test/mobilizon/service/activity_pub/activity_pub_test.exs b/test/federation/activity_pub/activity_pub_test.exs similarity index 97% rename from test/mobilizon/service/activity_pub/activity_pub_test.exs rename to test/federation/activity_pub/activity_pub_test.exs index db7683885..923f508f3 100644 --- a/test/mobilizon/service/activity_pub/activity_pub_test.exs +++ b/test/federation/activity_pub/activity_pub_test.exs @@ -3,19 +3,18 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/test/web/activity_pub/activity_pub_test.exs -defmodule Mobilizon.Service.ActivityPub.ActivityPubTest do +defmodule Mobilizon.Federation.ActivityPubTest do use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney - use Mobilizon.DataCase import Mock - import Mobilizon.Factory alias Mobilizon.Actors.Actor alias Mobilizon.Events - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.HTTPSignatures.Signature + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.HTTPSignatures.Signature @activity_pub_public_audience "https://www.w3.org/ns/activitystreams#Public" diff --git a/test/mobilizon/service/activity_pub/converter/actor_test.exs b/test/federation/activity_pub/activity_stream/converter/actor_test.exs similarity index 80% rename from test/mobilizon/service/activity_pub/converter/actor_test.exs rename to test/federation/activity_pub/activity_stream/converter/actor_test.exs index edc8b0ee9..4e366e2aa 100644 --- a/test/mobilizon/service/activity_pub/converter/actor_test.exs +++ b/test/federation/activity_pub/activity_stream/converter/actor_test.exs @@ -1,8 +1,9 @@ -defmodule Mobilizon.Service.ActivityPub.Converter.ActorTest do +defmodule Mobilizon.Federation.ActivityPub.ActivityStream.Converter.ActorTest do use Mobilizon.DataCase alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub.Converter.Actor, as: ActorConverter + + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter.Actor, as: ActorConverter describe "actor to AS" do test "valid actor to as" do diff --git a/test/mobilizon/service/activity_pub/relay_test.exs b/test/federation/activity_pub/relay_test.exs similarity index 74% rename from test/mobilizon/service/activity_pub/relay_test.exs rename to test/federation/activity_pub/relay_test.exs index 18d72405a..628868c4b 100644 --- a/test/mobilizon/service/activity_pub/relay_test.exs +++ b/test/federation/activity_pub/relay_test.exs @@ -2,10 +2,10 @@ # Copyright © 2017-2018 Pleroma Authors # SPDX-License-Identifier: AGPL-3.0-only -defmodule Mobilizon.Service.ActivityPub.RelayTest do +defmodule Mobilizon.Federation.ActivityPub.RelayTest do use Mobilizon.DataCase - alias Mobilizon.Service.ActivityPub.Relay + alias Mobilizon.Federation.ActivityPub.Relay test "gets an actor for the relay" do actor = Relay.get_actor() diff --git a/test/mobilizon/service/activity_pub/transmogrifier_test.exs b/test/federation/activity_pub/transmogrifier_test.exs similarity index 99% rename from test/mobilizon/service/activity_pub/transmogrifier_test.exs rename to test/federation/activity_pub/transmogrifier_test.exs index 1878291cd..532fa1650 100644 --- a/test/mobilizon/service/activity_pub/transmogrifier_test.exs +++ b/test/federation/activity_pub/transmogrifier_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/test/web/activity_pub/transmogrifier_test.exs -defmodule Mobilizon.Service.ActivityPub.TransmogrifierTest do +defmodule Mobilizon.Federation.ActivityPub.TransmogrifierTest do use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney use Mobilizon.DataCase @@ -14,9 +14,11 @@ defmodule Mobilizon.Service.ActivityPub.TransmogrifierTest do alias Mobilizon.{Actors, Events, Tombstone} alias Mobilizon.Actors.Actor alias Mobilizon.Events.{Comment, Event, Participant} - alias Mobilizon.Service.ActivityPub - alias Mobilizon.Service.ActivityPub.{Activity, Utils, Convertible} - alias Mobilizon.Service.ActivityPub.Transmogrifier + + alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Federation.ActivityPub.Utils + alias Mobilizon.Federation.ActivityPub.{Activity, Relay, Transmogrifier} + alias Mobilizon.Federation.ActivityPub.ActivityStream.{Convertible} alias MobilizonWeb.API @@ -788,7 +790,7 @@ defmodule Mobilizon.Service.ActivityPub.TransmogrifierTest do end test "it accepts Flag activities" do - %Actor{url: reporter_url} = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{url: reporter_url} = Relay.get_actor() %Actor{url: reported_url} = reported = insert(:actor) %Comment{url: comment_url} = _comment = insert(:comment, actor: reported) diff --git a/test/mobilizon/service/activity_pub/utils_test.exs b/test/federation/activity_pub/utils_test.exs similarity index 93% rename from test/mobilizon/service/activity_pub/utils_test.exs rename to test/federation/activity_pub/utils_test.exs index 9cf960e1a..430fd109a 100644 --- a/test/mobilizon/service/activity_pub/utils_test.exs +++ b/test/federation/activity_pub/utils_test.exs @@ -1,11 +1,11 @@ -defmodule Mobilizon.Service.ActivityPub.UtilsTest do +defmodule Mobilizon.Federation.ActivityPub.UtilsTest do use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney use Mobilizon.DataCase import Mobilizon.Factory - alias Mobilizon.Service.ActivityPub.Converter + alias Mobilizon.Federation.ActivityPub.ActivityStream.Converter alias MobilizonWeb.Endpoint alias MobilizonWeb.Router.Helpers, as: Routes diff --git a/test/mobilizon/service/web_finger/web_finger_test.exs b/test/federation/activity_pub/web_finger_test.exs similarity index 95% rename from test/mobilizon/service/web_finger/web_finger_test.exs rename to test/federation/activity_pub/web_finger_test.exs index e66a5df52..afe494011 100644 --- a/test/mobilizon/service/web_finger/web_finger_test.exs +++ b/test/federation/activity_pub/web_finger_test.exs @@ -3,12 +3,13 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/test/web/web_finger/web_finger_test.exs -defmodule Mobilizon.Service.WebFingerTest do +defmodule Mobilizon.Federation.ActivityPub.WebFingerTest do + use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney use Mobilizon.DataCase - alias Mobilizon.Service.WebFinger + import Mobilizon.Factory - use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney + alias Mobilizon.Federation.ActivityPub.WebFinger @mastodon_account "tcit@social.tcit.fr" @mastodon_account_username "tcit" diff --git a/test/fixtures/vcr_cassettes/relay/fetch_relay_follow.json b/test/fixtures/vcr_cassettes/relay/fetch_relay_follow.json index b477ec249..dc85a48f3 100644 --- a/test/fixtures/vcr_cassettes/relay/fetch_relay_follow.json +++ b/test/fixtures/vcr_cassettes/relay/fetch_relay_follow.json @@ -81,7 +81,7 @@ }, "response": { "binary": false, - "body": "# HTTPoison.Error at POST /inbox\n\nException:\n\n ** (HTTPoison.Error) :nxdomain\n (httpoison) lib/httpoison.ex:128: HTTPoison.request!/5\n (mobilizon) lib/service/activity_pub/activity_pub.ex:610: Mobilizon.Service.ActivityPub.fetch_and_prepare_actor_from_url/1\n (mobilizon) lib/service/activity_pub/activity_pub.ex:473: Mobilizon.Service.ActivityPub.make_actor_from_url/2\n (mobilizon) lib/service/activity_pub/activity_pub.ex:122: Mobilizon.Service.ActivityPub.get_or_fetch_actor_by_url/2\n (mobilizon) lib/service/http_signatures/signature.ex:54: Mobilizon.Service.HTTPSignatures.Signature.get_public_key_for_url/1\n (mobilizon) lib/service/http_signatures/signature.ex:74: Mobilizon.Service.HTTPSignatures.Signature.fetch_public_key/1\n (http_signatures) lib/http_signatures/http_signatures.ex:40: HTTPSignatures.validate_conn/1\n (mobilizon) lib/mobilizon_web/http_signature.ex:45: MobilizonWeb.HTTPSignaturePlug.call/2\n (mobilizon) MobilizonWeb.Router.activity_pub_signature/2\n (mobilizon) lib/mobilizon_web/router.ex:1: MobilizonWeb.Router.__pipe_through7__/1\n (phoenix) lib/phoenix/router.ex:283: Phoenix.Router.__call__/2\n (mobilizon) lib/mobilizon_web/endpoint.ex:1: MobilizonWeb.Endpoint.plug_builder_call/2\n (mobilizon) lib/plug/debugger.ex:122: MobilizonWeb.Endpoint.\"call (overridable 3)\"/2\n (mobilizon) lib/mobilizon_web/endpoint.ex:1: MobilizonWeb.Endpoint.call/2\n (phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:42: Phoenix.Endpoint.Cowboy2Handler.init/4\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_stream_h.erl:320: :cowboy_stream_h.execute/3\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_stream_h.erl:302: :cowboy_stream_h.request_process/3\n (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3\n \n\n## Connection details\n\n### Params\n\n %{\"@context\" => [\"https://www.w3.org/ns/activitystreams\", \"https://litepub.social/litepub/context.jsonld\", %{\"Hashtag\" => \"as:Hashtag\", \"category\" => \"sc:category\", \"ical\" => \"http://www.w3.org/2002/12/cal/ical#\", \"joinMode\" => %{\"@id\" => \"mz:joinMode\", \"@type\" => \"mz:joinModeType\"}, \"joinModeType\" => %{\"@id\" => \"mz:joinModeType\", \"@type\" => \"rdfs:Class\"}, \"maximumAttendeeCapacity\" => \"sc:maximumAttendeeCapacity\", \"mz\" => \"https://joinmobilizon.org/ns#\", \"repliesModerationOption\" => %{\"@id\" => \"mz:repliesModerationOption\", \"@type\" => \"mz:repliesModerationOptionType\"}, \"repliesModerationOptionType\" => %{\"@id\" => \"mz:repliesModerationOptionType\", \"@type\" => \"rdfs:Class\"}, \"sc\" => \"http://schema.org#\", \"uuid\" => \"sc:identifier\"}], \"actor\" => \"http://mobilizon.test/relay\", \"cc\" => [\"https://www.w3.org/ns/activitystreams#Public\"], \"id\" => \"http://mobilizon.test/follow/b7791977-2a75-4715-815b-6e7125065b71\", \"object\" => \"http://mobilizon1.com/relay\", \"to\" => [\"http://mobilizon1.com/relay\"], \"type\" => \"Follow\"}\n\n### Request info\n\n * URI: http://mobilizon1.com:80/inbox\n * Query string: \n\n### Headers\n \n * connection: upgrade\n * content-length: 912\n * content-type: application/activity+json\n * date: Fri, 13 Dec 2019 09:41:41 GMT\n * digest: SHA-256=ibNFcsnBeCCjWZo9We60tKfbRN3el0WCMVdOxtuC1cg=\n * host: mobilizon1.com\n * signature: keyId=\"http://mobilizon.test/relay#main-key\",algorithm=\"rsa-sha256\",headers=\"(request-target) content-length date digest host\",signature=\"WbyGHT/WdvdRpWek8uCGHrFSblLpg+Iq802R5S2cjNj035OKpxRmu1r8u9Qr5KGIKgZn6LHt9YmB+PNlwsubPtTSkJpE8AAUDMHLKgCrH7A5Q6x6GlARl5bHNo4QtOxkXvnEbn31xfNDNp70QqZb/emw95TnELYUlMLZds0qYutT8U4WdDhSWcVytQmKJWNZXxEj+KlMDUaxag3lGscJ/HY0F+yGNov7FHthid1Y4LTGFsp/tismnMTlba12NH/kXPHtduNsX8uxFslM2ODwqAaospTGEpXmr9CPgbNy7626qgYaR2RdB/fYlCayLI4JJIlH8gOdocGHPrWNtVEHaQ==\"\n * user-agent: hackney/1.15.2\n * x-forwarded-for: 127.0.0.1\n * x-real-ip: 127.0.0.1\n\n### Session\n\n %{}\n", + "body": "# HTTPoison.Error at POST /inbox\n\nException:\n\n ** (HTTPoison.Error) :nxdomain\n (httpoison) lib/httpoison.ex:128: HTTPoison.request!/5\n (mobilizon) lib/service/activity_pub/activity_pub.ex:610: Mobilizon.Service.ActivityPub.fetch_and_prepare_actor_from_url/1\n (mobilizon) lib/service/activity_pub/activity_pub.ex:473: Mobilizon.Service.ActivityPub.make_actor_from_url/2\n (mobilizon) lib/service/activity_pub/activity_pub.ex:122: Mobilizon.Service.ActivityPub.get_or_fetch_actor_by_url/2\n (mobilizon) lib/service/http_signatures/signature.ex:54: Mobilizon.Federation.HTTPSignatures.Signature.get_public_key_for_url/1\n (mobilizon) lib/service/http_signatures/signature.ex:74: Mobilizon.Federation.HTTPSignatures.Signature.fetch_public_key/1\n (http_signatures) lib/http_signatures/http_signatures.ex:40: HTTPSignatures.validate_conn/1\n (mobilizon) lib/mobilizon_web/http_signature.ex:45: MobilizonWeb.HTTPSignaturePlug.call/2\n (mobilizon) MobilizonWeb.Router.activity_pub_signature/2\n (mobilizon) lib/mobilizon_web/router.ex:1: MobilizonWeb.Router.__pipe_through7__/1\n (phoenix) lib/phoenix/router.ex:283: Phoenix.Router.__call__/2\n (mobilizon) lib/mobilizon_web/endpoint.ex:1: MobilizonWeb.Endpoint.plug_builder_call/2\n (mobilizon) lib/plug/debugger.ex:122: MobilizonWeb.Endpoint.\"call (overridable 3)\"/2\n (mobilizon) lib/mobilizon_web/endpoint.ex:1: MobilizonWeb.Endpoint.call/2\n (phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:42: Phoenix.Endpoint.Cowboy2Handler.init/4\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_stream_h.erl:320: :cowboy_stream_h.execute/3\n (cowboy) /home/tcit/dev/frama/mobilizon/deps/cowboy/src/cowboy_stream_h.erl:302: :cowboy_stream_h.request_process/3\n (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3\n \n\n## Connection details\n\n### Params\n\n %{\"@context\" => [\"https://www.w3.org/ns/activitystreams\", \"https://litepub.social/litepub/context.jsonld\", %{\"Hashtag\" => \"as:Hashtag\", \"category\" => \"sc:category\", \"ical\" => \"http://www.w3.org/2002/12/cal/ical#\", \"joinMode\" => %{\"@id\" => \"mz:joinMode\", \"@type\" => \"mz:joinModeType\"}, \"joinModeType\" => %{\"@id\" => \"mz:joinModeType\", \"@type\" => \"rdfs:Class\"}, \"maximumAttendeeCapacity\" => \"sc:maximumAttendeeCapacity\", \"mz\" => \"https://joinmobilizon.org/ns#\", \"repliesModerationOption\" => %{\"@id\" => \"mz:repliesModerationOption\", \"@type\" => \"mz:repliesModerationOptionType\"}, \"repliesModerationOptionType\" => %{\"@id\" => \"mz:repliesModerationOptionType\", \"@type\" => \"rdfs:Class\"}, \"sc\" => \"http://schema.org#\", \"uuid\" => \"sc:identifier\"}], \"actor\" => \"http://mobilizon.test/relay\", \"cc\" => [\"https://www.w3.org/ns/activitystreams#Public\"], \"id\" => \"http://mobilizon.test/follow/b7791977-2a75-4715-815b-6e7125065b71\", \"object\" => \"http://mobilizon1.com/relay\", \"to\" => [\"http://mobilizon1.com/relay\"], \"type\" => \"Follow\"}\n\n### Request info\n\n * URI: http://mobilizon1.com:80/inbox\n * Query string: \n\n### Headers\n \n * connection: upgrade\n * content-length: 912\n * content-type: application/activity+json\n * date: Fri, 13 Dec 2019 09:41:41 GMT\n * digest: SHA-256=ibNFcsnBeCCjWZo9We60tKfbRN3el0WCMVdOxtuC1cg=\n * host: mobilizon1.com\n * signature: keyId=\"http://mobilizon.test/relay#main-key\",algorithm=\"rsa-sha256\",headers=\"(request-target) content-length date digest host\",signature=\"WbyGHT/WdvdRpWek8uCGHrFSblLpg+Iq802R5S2cjNj035OKpxRmu1r8u9Qr5KGIKgZn6LHt9YmB+PNlwsubPtTSkJpE8AAUDMHLKgCrH7A5Q6x6GlARl5bHNo4QtOxkXvnEbn31xfNDNp70QqZb/emw95TnELYUlMLZds0qYutT8U4WdDhSWcVytQmKJWNZXxEj+KlMDUaxag3lGscJ/HY0F+yGNov7FHthid1Y4LTGFsp/tismnMTlba12NH/kXPHtduNsX8uxFslM2ODwqAaospTGEpXmr9CPgbNy7626qgYaR2RdB/fYlCayLI4JJIlH8gOdocGHPrWNtVEHaQ==\"\n * user-agent: hackney/1.15.2\n * x-forwarded-for: 127.0.0.1\n * x-real-ip: 127.0.0.1\n\n### Session\n\n %{}\n", "headers": { "Server": "nginx/1.16.1", "Date": "Fri, 13 Dec 2019 09:41:41 GMT", @@ -98,4 +98,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/mobilizon/actors/actors_test.exs b/test/mobilizon/actors/actors_test.exs index d829ecfd5..07d0945bd 100644 --- a/test/mobilizon/actors/actors_test.exs +++ b/test/mobilizon/actors/actors_test.exs @@ -9,9 +9,10 @@ defmodule Mobilizon.ActorsTest do alias Mobilizon.Actors.{Actor, Bot, Follower, Member} alias Mobilizon.Events.{Event, Comment} alias Mobilizon.Media.File, as: FileModel - alias Mobilizon.Service.ActivityPub alias Mobilizon.Storage.Page + alias Mobilizon.Federation.ActivityPub + describe "actors" do @valid_attrs %{ summary: "some description", diff --git a/test/mobilizon_web/api/report_test.exs b/test/mobilizon_web/api/report_test.exs index db7d3f9bd..03cfaa432 100644 --- a/test/mobilizon_web/api/report_test.exs +++ b/test/mobilizon_web/api/report_test.exs @@ -6,15 +6,16 @@ defmodule MobilizonWeb.API.ReportTest do alias Mobilizon.Actors.Actor alias Mobilizon.Events.{Comment, Event} alias Mobilizon.Reports.{Note, Report} - alias Mobilizon.Service.ActivityPub.Activity alias Mobilizon.Users alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub.{Activity, Relay} + alias MobilizonWeb.API.Reports describe "reports" do test "creates a report on a event" do - %Actor{url: relay_reporter_url} = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{url: relay_reporter_url} = Relay.get_actor() %Actor{id: reporter_id} = insert(:actor) %Actor{id: reported_id, url: reported_url} = reported = insert(:actor) @@ -44,7 +45,7 @@ defmodule MobilizonWeb.API.ReportTest do end test "creates a report on several comments" do - %Actor{url: relay_reporter_url} = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{url: relay_reporter_url} = Relay.get_actor() %Actor{id: reporter_id} = insert(:actor) %Actor{id: reported_id, url: reported_url} = reported = insert(:actor) @@ -79,7 +80,7 @@ defmodule MobilizonWeb.API.ReportTest do end test "creates a report that gets federated" do - %Actor{url: relay_reporter_url} = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{url: relay_reporter_url} = Relay.get_actor() %Actor{id: reporter_id} = insert(:actor) %Actor{id: reported_id, url: reported_url} = reported = insert(:actor) diff --git a/test/mobilizon_web/api/search_test.exs b/test/mobilizon_web/api/search_test.exs index ee19fdca3..e3d800bc5 100644 --- a/test/mobilizon_web/api/search_test.exs +++ b/test/mobilizon_web/api/search_test.exs @@ -7,9 +7,10 @@ defmodule MobilizonWeb.API.SearchTest do alias Mobilizon.Actors.Actor alias Mobilizon.Events alias Mobilizon.Events.Event - alias Mobilizon.Service.ActivityPub alias Mobilizon.Storage.Page + alias Mobilizon.Federation.ActivityPub + alias MobilizonWeb.API.Search test "search an user by username" do diff --git a/test/mobilizon_web/controllers/activity_pub_controller_test.exs b/test/mobilizon_web/controllers/activity_pub_controller_test.exs index 6c1b9a3d2..e53487df1 100644 --- a/test/mobilizon_web/controllers/activity_pub_controller_test.exs +++ b/test/mobilizon_web/controllers/activity_pub_controller_test.exs @@ -12,7 +12,8 @@ defmodule MobilizonWeb.ActivityPubControllerTest do alias Mobilizon.{Actors, Config} alias Mobilizon.Actors.Actor - alias Mobilizon.Service.ActivityPub + + alias Mobilizon.Federation.ActivityPub alias MobilizonWeb.ActivityPub.ActorView alias MobilizonWeb.Endpoint @@ -318,7 +319,7 @@ defmodule MobilizonWeb.ActivityPubControllerTest do # test "it returns the following in a collection", %{conn: conn} do # actor = insert(:actor) # actor2 = insert(:actor) - # Mobilizon.Service.ActivityPub.follow(actor, actor2) + # Mobilizon.Federation.ActivityPub.follow(actor, actor2) # result = # conn diff --git a/test/mobilizon_web/controllers/webfinger_controller_test.exs b/test/mobilizon_web/controllers/webfinger_controller_test.exs index d980d1be9..8ecc9da91 100644 --- a/test/mobilizon_web/controllers/webfinger_controller_test.exs +++ b/test/mobilizon_web/controllers/webfinger_controller_test.exs @@ -3,14 +3,17 @@ # SPDX-License-Identifier: AGPL-3.0-only # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/test/web/web_finger/web_finger_test.exs -defmodule MobilizonWeb.WebFingerTest do +defmodule MobilizonWeb.WebFingerControllerTest do use MobilizonWeb.ConnCase - alias Mobilizon.Actors.Actor - alias Mobilizon.Service.WebFinger + import Mobilizon.Factory + alias Mobilizon.Actors.Actor + alias Mobilizon.Federation.ActivityPub.WebFinger + setup_all do Mobilizon.Config.put([:instance, :federating], true) + :ok end diff --git a/test/mobilizon_web/resolvers/admin_resolver_test.exs b/test/mobilizon_web/resolvers/admin_resolver_test.exs index 7e6cf996e..30c9d0362 100644 --- a/test/mobilizon_web/resolvers/admin_resolver_test.exs +++ b/test/mobilizon_web/resolvers/admin_resolver_test.exs @@ -8,6 +8,8 @@ defmodule MobilizonWeb.Resolvers.AdminResolverTest do alias Mobilizon.Reports.{Note, Report} alias Mobilizon.Users.User + alias Mobilizon.Federation.ActivityPub.Relay + alias MobilizonWeb.AbsintheHelpers alias MobilizonWeb.API @@ -135,7 +137,7 @@ defmodule MobilizonWeb.Resolvers.AdminResolverTest do name: "I am an instance actor" ) - %Actor{} = relay_actor = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{} = relay_actor = Relay.get_actor() insert(:follower, actor: follower_actor, target_actor: relay_actor) query = """ @@ -182,7 +184,7 @@ defmodule MobilizonWeb.Resolvers.AdminResolverTest do name: "I am an instance actor" ) - %Actor{} = relay_actor = Mobilizon.Service.ActivityPub.Relay.get_actor() + %Actor{} = relay_actor = Relay.get_actor() insert(:follower, actor: relay_actor, target_actor: following_actor) query = """ diff --git a/test/mobilizon/service/admin/action_log_service_test.exs b/test/service/admin/action_log_service_test.exs similarity index 100% rename from test/mobilizon/service/admin/action_log_service_test.exs rename to test/service/admin/action_log_service_test.exs diff --git a/test/mobilizon/service/export/icalendar_test.exs b/test/service/export/icalendar_test.exs similarity index 100% rename from test/mobilizon/service/export/icalendar_test.exs rename to test/service/export/icalendar_test.exs diff --git a/test/mobilizon/service/formatter/formatter_test.exs b/test/service/formatter/formatter_test.exs similarity index 100% rename from test/mobilizon/service/formatter/formatter_test.exs rename to test/service/formatter/formatter_test.exs diff --git a/test/mobilizon/service/geospatial/addok_test.exs b/test/service/geospatial/addok_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/addok_test.exs rename to test/service/geospatial/addok_test.exs diff --git a/test/mobilizon/service/geospatial/geospatial_test.exs b/test/service/geospatial/geospatial_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/geospatial_test.exs rename to test/service/geospatial/geospatial_test.exs diff --git a/test/mobilizon/service/geospatial/google_maps_test.exs b/test/service/geospatial/google_maps_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/google_maps_test.exs rename to test/service/geospatial/google_maps_test.exs diff --git a/test/mobilizon/service/geospatial/map_quest_test.exs b/test/service/geospatial/map_quest_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/map_quest_test.exs rename to test/service/geospatial/map_quest_test.exs diff --git a/test/mobilizon/service/geospatial/nominatim_test.exs b/test/service/geospatial/nominatim_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/nominatim_test.exs rename to test/service/geospatial/nominatim_test.exs diff --git a/test/mobilizon/service/geospatial/photon_test.exs b/test/service/geospatial/photon_test.exs similarity index 100% rename from test/mobilizon/service/geospatial/photon_test.exs rename to test/service/geospatial/photon_test.exs diff --git a/test/mobilizon/service/users/tools.exs b/test/service/users/tools.exs similarity index 100% rename from test/mobilizon/service/users/tools.exs rename to test/service/users/tools.exs diff --git a/test/tasks/relay_test.exs b/test/tasks/relay_test.exs index cdcedddb0..5e64dfdd5 100644 --- a/test/tasks/relay_test.exs +++ b/test/tasks/relay_test.exs @@ -9,7 +9,8 @@ defmodule Mix.Tasks.Mobilizon.RelayTest do alias Mobilizon.Actors alias Mobilizon.Actors.{Actor, Follower} - alias Mobilizon.Service.ActivityPub.Relay + + alias Mobilizon.Federation.ActivityPub.Relay describe "running follow" do test "relay is followed" do