Merge branch 'split-web-graphql' into 'master'

Split of GraphQL and Web contexts

See merge request framasoft/mobilizon!383
This commit is contained in:
Thomas Citharel 2020-01-27 10:22:20 +01:00
commit a781c2d3e2
189 changed files with 835 additions and 810 deletions

View File

@ -36,18 +36,18 @@ config :mime, :types, %{
} }
# Configures the endpoint # Configures the endpoint
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
url: [host: "localhost"], url: [host: "localhost"],
secret_key_base: "1yOazsoE0Wqu4kXk3uC5gu3jDbShOimTCzyFL3OjCdBmOXMyHX87Qmf3+Tu9s0iM", secret_key_base: "1yOazsoE0Wqu4kXk3uC5gu3jDbShOimTCzyFL3OjCdBmOXMyHX87Qmf3+Tu9s0iM",
render_errors: [view: MobilizonWeb.ErrorView, accepts: ~w(html json)], render_errors: [view: Mobilizon.Web.ErrorView, accepts: ~w(html json)],
pubsub: [name: Mobilizon.PubSub, adapter: Phoenix.PubSub.PG2] pubsub: [name: Mobilizon.PubSub, adapter: Phoenix.PubSub.PG2]
# Upload configuration # Upload configuration
config :mobilizon, MobilizonWeb.Upload, config :mobilizon, Mobilizon.Web.Upload,
uploader: MobilizonWeb.Upload.Uploader.Local, uploader: Mobilizon.Web.Upload.Uploader.Local,
filters: [ filters: [
MobilizonWeb.Upload.Filter.Dedupe, Mobilizon.Web.Upload.Filter.Dedupe,
MobilizonWeb.Upload.Filter.Optimize Mobilizon.Web.Upload.Filter.Optimize
], ],
link_name: true, link_name: true,
proxy_remote: false, proxy_remote: false,
@ -60,7 +60,7 @@ config :mobilizon, MobilizonWeb.Upload,
] ]
] ]
config :mobilizon, MobilizonWeb.Upload.Uploader.Local, uploads: "uploads" config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "uploads"
config :mobilizon, :media_proxy, config :mobilizon, :media_proxy,
enabled: true, enabled: true,
@ -78,7 +78,7 @@ config :logger, :console,
format: "$time $metadata[$level] $message\n", format: "$time $metadata[$level] $message\n",
metadata: [:request_id] metadata: [:request_id]
config :mobilizon, MobilizonWeb.Auth.Guardian, config :mobilizon, Mobilizon.Web.Auth.Guardian,
issuer: "mobilizon", issuer: "mobilizon",
secret_key: "ty0WM7YBE3ojvxoUQxo8AERrNpfbXnIJ82ovkPdqbUFw31T5LcK8wGjaOiReVQjo" secret_key: "ty0WM7YBE3ojvxoUQxo8AERrNpfbXnIJ82ovkPdqbUFw31T5LcK8wGjaOiReVQjo"

View File

@ -6,7 +6,7 @@ import Config
# The watchers configuration can be used to run external # The watchers configuration can be used to run external
# watchers to your application. For example, we use it # watchers to your application. For example, we use it
# with brunch.io to recompile .js and .css sources. # with brunch.io to recompile .js and .css sources.
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
http: [ http: [
port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000 port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000
], ],
@ -39,7 +39,7 @@ config :mobilizon, MobilizonWeb.Endpoint,
# different ports. # different ports.
# Watch static and templates for browser reloading. # Watch static and templates for browser reloading.
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
live_reload: [ live_reload: [
patterns: [ patterns: [
~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$}, ~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
@ -61,7 +61,7 @@ config :phoenix, :stacktrace_depth, 20
# Initialize plugs at runtime for faster development compilation # Initialize plugs at runtime for faster development compilation
config :phoenix, :plug_init_mode, :runtime config :phoenix, :plug_init_mode, :runtime
config :mobilizon, MobilizonWeb.Email.Mailer, adapter: Bamboo.LocalAdapter config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.LocalAdapter
# Configure your database # Configure your database
config :mobilizon, Mobilizon.Storage.Repo, config :mobilizon, Mobilizon.Storage.Repo,

View File

@ -2,7 +2,7 @@ import Config
import_config "dev.exs" import_config "dev.exs"
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
http: [ http: [
port: 4000 port: 4000
], ],

View File

@ -1,6 +1,6 @@
import Config import Config
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
http: [ http: [
port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000, port: System.get_env("MOBILIZON_INSTANCE_PORT") || 4000,
transport_options: [socket_opts: [:inet6]] transport_options: [socket_opts: [:inet6]]
@ -24,7 +24,7 @@ config :mobilizon, Mobilizon.Storage.Repo,
port: System.get_env("MOBILIZON_DATABASE_PORT") || "5432", port: System.get_env("MOBILIZON_DATABASE_PORT") || "5432",
pool_size: 15 pool_size: 15
config :mobilizon, MobilizonWeb.Email.Mailer, config :mobilizon, Mobilizon.Web.Email.Mailer,
adapter: Bamboo.SMTPAdapter, adapter: Bamboo.SMTPAdapter,
server: "localhost", server: "localhost",
hostname: "localhost", hostname: "localhost",
@ -53,7 +53,7 @@ config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geos
# To get SSL working, you will need to add the `https` key # To get SSL working, you will need to add the `https` key
# to the previous section and set your `:url` port to 443: # to the previous section and set your `:url` port to 443:
# #
# config :mobilizon, MobilizonWeb.Endpoint, # config :mobilizon, Mobilizon.Web.Endpoint,
# ... # ...
# url: [host: "example.com", port: 443], # url: [host: "example.com", port: 443],
# https: [:inet6, # https: [:inet6,
@ -68,7 +68,7 @@ config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geos
# We also recommend setting `force_ssl`, ensuring no data is # We also recommend setting `force_ssl`, ensuring no data is
# ever sent via http, always redirecting to https: # ever sent via http, always redirecting to https:
# #
# config :mobilizon, MobilizonWeb.Endpoint, # config :mobilizon, Mobilizon.Web.Endpoint,
# force_ssl: [hsts: true] # force_ssl: [hsts: true]
# #
# Check `Plug.SSL` for all available options in `force_ssl`. # Check `Plug.SSL` for all available options in `force_ssl`.
@ -83,5 +83,5 @@ config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geos
# Alternatively, you can configure exactly which server to # Alternatively, you can configure exactly which server to
# start per endpoint: # start per endpoint:
# #
# config :mobilizon, MobilizonWeb.Endpoint, server: true # config :mobilizon, Mobilizon.Web.Endpoint, server: true
# #

View File

@ -6,7 +6,7 @@ config :mobilizon, :instance,
# We don't run a server during test. If one is required, # We don't run a server during test. If one is required,
# you can enable the server option below. # you can enable the server option below.
config :mobilizon, MobilizonWeb.Endpoint, config :mobilizon, Mobilizon.Web.Endpoint,
http: [ http: [
port: System.get_env("MOBILIZON_INSTANCE_PORT") || 80 port: System.get_env("MOBILIZON_INSTANCE_PORT") || 80
], ],
@ -30,11 +30,11 @@ config :mobilizon, Mobilizon.Storage.Repo,
hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost", hostname: System.get_env("MOBILIZON_DATABASE_HOST") || "localhost",
pool: Ecto.Adapters.SQL.Sandbox pool: Ecto.Adapters.SQL.Sandbox
config :mobilizon, MobilizonWeb.Email.Mailer, adapter: Bamboo.TestAdapter config :mobilizon, Mobilizon.Web.Email.Mailer, adapter: Bamboo.TestAdapter
config :mobilizon, MobilizonWeb.Upload, filters: [], link_name: false config :mobilizon, Mobilizon.Web.Upload, filters: [], link_name: false
config :mobilizon, MobilizonWeb.Upload.Uploader.Local, uploads: "test/uploads" config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "test/uploads"
config :exvcr, config :exvcr,
vcr_cassette_library_dir: "test/fixtures/vcr_cassettes" vcr_cassette_library_dir: "test/fixtures/vcr_cassettes"

View File

@ -30,8 +30,9 @@ defmodule Mobilizon.Federation.ActivityPub do
alias Mobilizon.Federation.HTTPSignatures.Signature alias Mobilizon.Federation.HTTPSignatures.Signature
alias Mobilizon.Federation.WebFinger alias Mobilizon.Federation.WebFinger
alias MobilizonWeb.API.Utils, as: APIUtils alias Mobilizon.GraphQL.API.Utils, as: APIUtils
alias MobilizonWeb.Email.{Admin, Mailer}
alias Mobilizon.Web.Email.{Admin, Mailer}
require Logger require Logger
@ -317,7 +318,7 @@ defmodule Mobilizon.Federation.ActivityPub do
Convertible.model_to_as(%{follow | actor: follower, target_actor: followed}), Convertible.model_to_as(%{follow | actor: follower, target_actor: followed}),
{:ok, follow_activity} <- create_activity(follow_as_data, local), {:ok, follow_activity} <- create_activity(follow_as_data, local),
activity_unfollow_id <- activity_unfollow_id <-
activity_id || "#{MobilizonWeb.Endpoint.url()}/unfollow/#{follow_id}/activity", activity_id || "#{Mobilizon.Web.Endpoint.url()}/unfollow/#{follow_id}/activity",
unfollow_data <- unfollow_data <-
make_unfollow_data(follower, followed, follow_activity, activity_unfollow_id), make_unfollow_data(follower, followed, follow_activity, activity_unfollow_id),
{:ok, activity} <- create_activity(unfollow_data, local), {:ok, activity} <- create_activity(unfollow_data, local),
@ -482,7 +483,7 @@ defmodule Mobilizon.Federation.ActivityPub do
# If it's an exclusion it should be something else # If it's an exclusion it should be something else
"actor" => actor_url, "actor" => actor_url,
"object" => event_url, "object" => event_url,
"id" => "#{MobilizonWeb.Endpoint.url()}/leave/event/#{participant.id}" "id" => "#{Mobilizon.Web.Endpoint.url()}/leave/event/#{participant.id}"
}, },
audience <- audience <-
Audience.calculate_to_and_cc_from_mentions(participant), Audience.calculate_to_and_cc_from_mentions(participant),
@ -777,7 +778,7 @@ defmodule Mobilizon.Federation.ActivityPub do
make_accept_join_data( make_accept_join_data(
follower_as_data, follower_as_data,
Map.merge(additional, %{ Map.merge(additional, %{
"id" => "#{MobilizonWeb.Endpoint.url()}/accept/follow/#{follower.id}", "id" => "#{Mobilizon.Web.Endpoint.url()}/accept/follow/#{follower.id}",
"to" => [follower.actor.url], "to" => [follower.actor.url],
"cc" => [], "cc" => [],
"actor" => follower.target_actor.url "actor" => follower.target_actor.url
@ -796,7 +797,7 @@ defmodule Mobilizon.Federation.ActivityPub do
defp accept_join(%Participant{} = participant, additional) do defp accept_join(%Participant{} = participant, additional) do
with {:ok, %Participant{} = participant} <- with {:ok, %Participant{} = participant} <-
Events.update_participant(participant, %{role: :participant}), Events.update_participant(participant, %{role: :participant}),
Absinthe.Subscription.publish(MobilizonWeb.Endpoint, participant.actor, Absinthe.Subscription.publish(Mobilizon.Web.Endpoint, participant.actor,
event_person_participation_changed: participant.actor.id event_person_participation_changed: participant.actor.id
), ),
participant_as_data <- Convertible.model_to_as(participant), participant_as_data <- Convertible.model_to_as(participant),
@ -806,7 +807,7 @@ defmodule Mobilizon.Federation.ActivityPub do
make_accept_join_data( make_accept_join_data(
participant_as_data, participant_as_data,
Map.merge(Map.merge(audience, additional), %{ Map.merge(Map.merge(audience, additional), %{
"id" => "#{MobilizonWeb.Endpoint.url()}/accept/join/#{participant.id}" "id" => "#{Mobilizon.Web.Endpoint.url()}/accept/join/#{participant.id}"
}) })
) do ) do
{:ok, participant, update_data} {:ok, participant, update_data}
@ -822,7 +823,7 @@ defmodule Mobilizon.Federation.ActivityPub do
defp reject_join(%Participant{} = participant, additional) do defp reject_join(%Participant{} = participant, additional) do
with {:ok, %Participant{} = participant} <- with {:ok, %Participant{} = participant} <-
Events.update_participant(participant, %{approved: false, role: :rejected}), Events.update_participant(participant, %{approved: false, role: :rejected}),
Absinthe.Subscription.publish(MobilizonWeb.Endpoint, participant.actor, Absinthe.Subscription.publish(Mobilizon.Web.Endpoint, participant.actor,
event_person_participation_changed: participant.actor.id event_person_participation_changed: participant.actor.id
), ),
participant_as_data <- Convertible.model_to_as(participant), participant_as_data <- Convertible.model_to_as(participant),
@ -838,7 +839,7 @@ defmodule Mobilizon.Federation.ActivityPub do
reject_data reject_data
|> Map.merge(audience) |> Map.merge(audience)
|> Map.merge(%{ |> Map.merge(%{
"id" => "#{MobilizonWeb.Endpoint.url()}/reject/join/#{participant.id}" "id" => "#{Mobilizon.Web.Endpoint.url()}/reject/join/#{participant.id}"
}) do }) do
{:ok, participant, update_data} {:ok, participant, update_data}
else else
@ -865,7 +866,7 @@ defmodule Mobilizon.Federation.ActivityPub do
reject_data reject_data
|> Map.merge(audience) |> Map.merge(audience)
|> Map.merge(%{ |> Map.merge(%{
"id" => "#{MobilizonWeb.Endpoint.url()}/reject/follow/#{follower.id}" "id" => "#{Mobilizon.Web.Endpoint.url()}/reject/follow/#{follower.id}"
}) do }) do
{:ok, follower, update_data} {:ok, follower, update_data}
else else

View File

@ -15,7 +15,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier} alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier}
alias Mobilizon.Federation.WebFinger alias Mobilizon.Federation.WebFinger
alias MobilizonWeb.API.Follows alias Mobilizon.GraphQL.API.Follows
require Logger require Logger
@ -28,7 +28,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
@spec get_actor() :: Actor.t() | {:error, Ecto.Changeset.t()} @spec get_actor() :: Actor.t() | {:error, Ecto.Changeset.t()}
def get_actor do def get_actor do
with {:ok, %Actor{} = actor} <- with {:ok, %Actor{} = actor} <-
Actors.get_or_create_instance_actor_by_url("#{MobilizonWeb.Endpoint.url()}/relay") do Actors.get_or_create_instance_actor_by_url("#{Mobilizon.Web.Endpoint.url()}/relay") do
actor actor
end end
end end

View File

@ -17,7 +17,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
alias Mobilizon.Federation.ActivityPub.{Activity, Utils} alias Mobilizon.Federation.ActivityPub.{Activity, Utils}
alias Mobilizon.Federation.ActivityStream.{Converter, Convertible} alias Mobilizon.Federation.ActivityStream.{Converter, Convertible}
alias MobilizonWeb.Email.Participation alias Mobilizon.Web.Email.Participation
require Logger require Logger

View File

@ -198,7 +198,7 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
Save picture data from %Plug.Upload{} and return AS Link data. Save picture data from %Plug.Upload{} and return AS Link data.
""" """
def make_picture_data(%Plug.Upload{} = picture, opts) do def make_picture_data(%Plug.Upload{} = picture, opts) do
case MobilizonWeb.Upload.store(picture, opts) do case Mobilizon.Web.Upload.store(picture, opts) do
{:ok, picture} -> {:ok, picture} ->
picture picture
@ -219,7 +219,7 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
""" """
def make_picture_data(picture) when is_map(picture) do def make_picture_data(picture) when is_map(picture) do
with {:ok, %{"url" => [%{"href" => url, "mediaType" => content_type}], "size" => size}} <- with {:ok, %{"url" => [%{"href" => url, "mediaType" => content_type}], "size" => size}} <-
MobilizonWeb.Upload.store(picture.file), Mobilizon.Web.Upload.store(picture.file),
{:picture_exists, nil} <- {:picture_exists, Mobilizon.Media.get_picture_by_url(url)}, {:picture_exists, nil} <- {:picture_exists, Mobilizon.Media.get_picture_by_url(url)},
{:ok, %Picture{file: _file} = picture} <- {:ok, %Picture{file: _file} = picture} <-
Mobilizon.Media.create_picture(%{ Mobilizon.Media.create_picture(%{

View File

@ -29,14 +29,14 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Actor do
data["icon"]["url"] && data["icon"]["url"] &&
%{ %{
"name" => data["icon"]["name"] || "avatar", "name" => data["icon"]["name"] || "avatar",
"url" => MobilizonWeb.MediaProxy.url(data["icon"]["url"]) "url" => Mobilizon.Web.MediaProxy.url(data["icon"]["url"])
} }
banner = banner =
data["image"]["url"] && data["image"]["url"] &&
%{ %{
"name" => data["image"]["name"] || "banner", "name" => data["image"]["name"] || "banner",
"url" => MobilizonWeb.MediaProxy.url(data["image"]["url"]) "url" => Mobilizon.Web.MediaProxy.url(data["image"]["url"])
} }
actor_data = %{ actor_data = %{

View File

@ -34,7 +34,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Picture do
when is_bitstring(picture_url) do when is_bitstring(picture_url) do
with {:ok, %HTTPoison.Response{body: body}} <- HTTPoison.get(picture_url), with {:ok, %HTTPoison.Response{body: body}} <- HTTPoison.get(picture_url),
{:ok, %{name: name, url: url, content_type: content_type, size: size}} <- {:ok, %{name: name, url: url, content_type: content_type, size: size}} <-
MobilizonWeb.Upload.store(%{body: body, name: name}), Mobilizon.Web.Upload.store(%{body: body, name: name}),
{:picture_exists, nil} <- {:picture_exists, Mobilizon.Media.get_picture_by_url(url)} do {:picture_exists, nil} <- {:picture_exists, Mobilizon.Media.get_picture_by_url(url)} do
Mobilizon.Media.create_picture(%{ Mobilizon.Media.create_picture(%{
"file" => %{ "file" => %{

View File

@ -40,7 +40,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Utils do
def build_tags(tags) do def build_tags(tags) do
Enum.map(tags, fn %Tag{} = tag -> Enum.map(tags, fn %Tag{} = tag ->
%{ %{
"href" => MobilizonWeb.Endpoint.url() <> "/tags/#{tag.slug}", "href" => Mobilizon.Web.Endpoint.url() <> "/tags/#{tag.slug}",
"name" => "##{tag.title}", "name" => "##{tag.title}",
"type" => "Hashtag" "type" => "Hashtag"
} }

View File

@ -17,7 +17,7 @@ defmodule Mobilizon.Federation.WebFinger do
require Logger require Logger
def host_meta do def host_meta do
base_url = MobilizonWeb.Endpoint.url() base_url = Mobilizon.Web.Endpoint.url()
{ {
:XRD, :XRD,
@ -35,7 +35,7 @@ defmodule Mobilizon.Federation.WebFinger do
end end
def webfinger(resource, "JSON") do def webfinger(resource, "JSON") do
host = MobilizonWeb.Endpoint.host() host = Mobilizon.Web.Endpoint.host()
regex = ~r/(acct:)?(?<name>\w+)@#{host}/ regex = ~r/(acct:)?(?<name>\w+)@#{host}/
with %{"name" => name} <- Regex.named_captures(regex, resource), with %{"name" => name} <- Regex.named_captures(regex, resource),
@ -59,7 +59,7 @@ defmodule Mobilizon.Federation.WebFinger do
@spec represent_actor(Actor.t(), String.t()) :: struct() @spec represent_actor(Actor.t(), String.t()) :: struct()
def represent_actor(actor, "JSON") do def represent_actor(actor, "JSON") do
%{ %{
"subject" => "acct:#{actor.preferred_username}@#{MobilizonWeb.Endpoint.host()}", "subject" => "acct:#{actor.preferred_username}@#{Mobilizon.Web.Endpoint.host()}",
"aliases" => [actor.url], "aliases" => [actor.url],
"links" => [ "links" => [
%{"rel" => "self", "type" => "application/activity+json", "href" => actor.url}, %{"rel" => "self", "type" => "application/activity+json", "href" => actor.url},

View File

@ -1,7 +1,8 @@
defmodule MobilizonWeb.API.Comments do defmodule Mobilizon.GraphQL.API.Comments do
@moduledoc """ @moduledoc """
API for Comments. API for Comments.
""" """
alias Mobilizon.Events.Comment alias Mobilizon.Events.Comment
alias Mobilizon.Federation.ActivityPub alias Mobilizon.Federation.ActivityPub
@ -12,8 +13,7 @@ defmodule MobilizonWeb.API.Comments do
Creates a comment from an actor Creates a comment from an actor
""" """
@spec create_comment(map()) :: @spec create_comment(map) :: {:ok, Activity.t(), Comment.t()} | any
{:ok, Activity.t(), Comment.t()} | any()
def create_comment(args) do def create_comment(args) do
ActivityPub.create(:comment, args, true) ActivityPub.create(:comment, args, true)
end end
@ -23,8 +23,7 @@ defmodule MobilizonWeb.API.Comments do
Deletes a comment from an actor Deletes a comment from an actor
""" """
@spec delete_comment(Comment.t()) :: @spec delete_comment(Comment.t()) :: {:ok, Activity.t(), Comment.t()} | any
{:ok, Activity.t(), Comment.t()} | any()
def delete_comment(%Comment{} = comment) do def delete_comment(%Comment{} = comment) do
ActivityPub.delete(comment, true) ActivityPub.delete(comment, true)
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Events do defmodule Mobilizon.GraphQL.API.Events do
@moduledoc """ @moduledoc """
API for Events. API for Events.
""" """
@ -12,7 +12,7 @@ defmodule MobilizonWeb.API.Events do
@doc """ @doc """
Create an event Create an event
""" """
@spec create_event(map()) :: {:ok, Activity.t(), Event.t()} | any() @spec create_event(map) :: {:ok, Activity.t(), Event.t()} | any
def create_event(args) do def create_event(args) do
with organizer_actor <- Map.get(args, :organizer_actor), with organizer_actor <- Map.get(args, :organizer_actor),
args <- args <-
@ -27,7 +27,7 @@ defmodule MobilizonWeb.API.Events do
@doc """ @doc """
Update an event Update an event
""" """
@spec update_event(map(), Event.t()) :: {:ok, Activity.t(), Event.t()} | any() @spec update_event(map, Event.t()) :: {:ok, Activity.t(), Event.t()} | any
def update_event(args, %Event{} = event) do def update_event(args, %Event{} = event) do
with organizer_actor <- Map.get(args, :organizer_actor), with organizer_actor <- Map.get(args, :organizer_actor),
args <- args <-
@ -53,7 +53,9 @@ defmodule MobilizonWeb.API.Events do
defp process_picture(%{picture: picture}, %Actor{id: actor_id}) do defp process_picture(%{picture: picture}, %Actor{id: actor_id}) do
%{ %{
file: file:
picture |> Map.get(:file) |> Utils.make_picture_data(description: Map.get(picture, :name)), picture
|> Map.get(:file)
|> Utils.make_picture_data(description: Map.get(picture, :name)),
actor_id: actor_id actor_id: actor_id
} }
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Follows do defmodule Mobilizon.GraphQL.API.Follows do
@moduledoc """ @moduledoc """
Common API for following, unfollowing, accepting and rejecting stuff. Common API for following, unfollowing, accepting and rejecting stuff.
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Groups do defmodule Mobilizon.GraphQL.API.Groups do
@moduledoc """ @moduledoc """
API for Groups. API for Groups.
""" """
@ -12,7 +12,7 @@ defmodule MobilizonWeb.API.Groups do
@doc """ @doc """
Create a group Create a group
""" """
@spec create_group(map()) :: {:ok, Activity.t(), Actor.t()} | any() @spec create_group(map) :: {:ok, Activity.t(), Actor.t()} | any
def create_group(args) do def create_group(args) do
with preferred_username <- with preferred_username <-
args |> Map.get(:preferred_username) |> HtmlSanitizeEx.strip_tags() |> String.trim(), args |> Map.get(:preferred_username) |> HtmlSanitizeEx.strip_tags() |> String.trim(),

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Participations do defmodule Mobilizon.GraphQL.API.Participations do
@moduledoc """ @moduledoc """
Common API to join events and groups. Common API to join events and groups.
""" """
@ -8,7 +8,7 @@ defmodule MobilizonWeb.API.Participations do
alias Mobilizon.Federation.ActivityPub alias Mobilizon.Federation.ActivityPub
alias MobilizonWeb.Email.Participation alias Mobilizon.Web.Email.Participation
@spec join(Event.t(), Actor.t()) :: {:ok, Participant.t()} @spec join(Event.t(), Actor.t()) :: {:ok, Participant.t()}
def join(%Event{id: event_id} = event, %Actor{id: actor_id} = actor) do def join(%Event{id: event_id} = event, %Actor{id: actor_id} = actor) do
@ -27,11 +27,13 @@ defmodule MobilizonWeb.API.Participations do
@doc """ @doc """
Update participation status Update participation status
""" """
def update(%Participant{} = participation, %Actor{} = moderator, :participant), def update(%Participant{} = participation, %Actor{} = moderator, :participant) do
do: accept(participation, moderator) accept(participation, moderator)
end
def update(%Participant{} = participation, %Actor{} = moderator, :rejected), def update(%Participant{} = participation, %Actor{} = moderator, :rejected) do
do: reject(participation, moderator) reject(participation, moderator)
end
defp accept( defp accept(
%Participant{} = participation, %Participant{} = participation,

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Reports do defmodule Mobilizon.GraphQL.API.Reports do
@moduledoc """ @moduledoc """
API for Reports. API for Reports.
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Search do defmodule Mobilizon.GraphQL.API.Search do
@moduledoc """ @moduledoc """
API for search. API for search.
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.API.Utils do defmodule Mobilizon.GraphQL.API.Utils do
@moduledoc """ @moduledoc """
Utils for API. Utils for API.
""" """
@ -10,11 +10,7 @@ defmodule MobilizonWeb.API.Utils do
Creates HTML content from text and mentions Creates HTML content from text and mentions
""" """
@spec make_content_html(String.t(), list(), String.t()) :: String.t() @spec make_content_html(String.t(), list(), String.t()) :: String.t()
def make_content_html( def make_content_html(text, additional_tags, content_type) do
text,
additional_tags,
content_type
) do
with {text, mentions, tags} <- format_input(text, content_type, []) do with {text, mentions, tags} <- format_input(text, content_type, []) do
{text, mentions, additional_tags ++ Enum.map(tags, fn {_, tag} -> tag end)} {text, mentions, additional_tags ++ Enum.map(tags, fn {_, tag} -> tag end)}
end end
@ -24,9 +20,7 @@ defmodule MobilizonWeb.API.Utils do
text text
|> Formatter.html_escape("text/plain") |> Formatter.html_escape("text/plain")
|> Formatter.linkify(options) |> Formatter.linkify(options)
|> (fn {text, mentions, tags} -> |> (fn {text, mentions, tags} -> {String.replace(text, ~r/\r?\n/, "<br>"), mentions, tags} end).()
{String.replace(text, ~r/\r?\n/, "<br>"), mentions, tags}
end).()
end end
def format_input(text, "text/html", options) do def format_input(text, "text/html", options) do

View File

@ -1,6 +1,6 @@
defmodule MobilizonWeb.Schema.Utils do defmodule Mobilizon.GraphQL.Helpers.Error do
@moduledoc """ @moduledoc """
Helper functions for MobilizonWeb.Schema Helper functions for Mobilizon.GraphQL
""" """
def handle_errors(fun) do def handle_errors(fun) do

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Address do defmodule Mobilizon.GraphQL.Resolvers.Address do
@moduledoc """ @moduledoc """
Handles the comment-related GraphQL calls Handles the comment-related GraphQL calls
""" """
@ -11,10 +11,12 @@ defmodule MobilizonWeb.Resolvers.Address do
@doc """ @doc """
Search an address Search an address
""" """
@spec search(map(), map(), map()) :: {:ok, list(Address.t())} @spec search(map, map, map) :: {:ok, [Address.t()]}
def search(_parent, %{query: query, locale: locale, page: _page, limit: _limit}, %{ def search(
context: %{ip: ip} _parent,
}) do %{query: query, locale: locale, page: _page, limit: _limit},
%{context: %{ip: ip}}
) do
geolix = Geolix.lookup(ip) geolix = Geolix.lookup(ip)
country_code = country_code =
@ -31,7 +33,7 @@ defmodule MobilizonWeb.Resolvers.Address do
@doc """ @doc """
Reverse geocode some coordinates Reverse geocode some coordinates
""" """
@spec reverse_geocode(map(), map(), map()) :: {:ok, list(Address.t())} @spec reverse_geocode(map, map, map) :: {:ok, [Address.t()]}
def reverse_geocode( def reverse_geocode(
_parent, _parent,
%{longitude: longitude, latitude: latitude, zoom: zoom, locale: locale}, %{longitude: longitude, latitude: latitude, zoom: zoom, locale: locale},

View File

@ -1,13 +1,13 @@
defmodule MobilizonWeb.Resolvers.Admin do defmodule Mobilizon.GraphQL.Resolvers.Admin do
@moduledoc """ @moduledoc """
Handles the report-related GraphQL calls. Handles the report-related GraphQL calls.
""" """
import Mobilizon.Users.Guards import Mobilizon.Users.Guards
alias Mobilizon.Admin.ActionLog
alias Mobilizon.Actors alias Mobilizon.Actors
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Admin.ActionLog
alias Mobilizon.Events alias Mobilizon.Events
alias Mobilizon.Events.{Event, Comment} alias Mobilizon.Events.{Event, Comment}
alias Mobilizon.Reports.{Note, Report} alias Mobilizon.Reports.{Note, Report}
@ -68,36 +68,28 @@ defmodule MobilizonWeb.Resolvers.Admin do
end end
end end
defp transform_action_log(Note, :create, %ActionLog{ defp transform_action_log(Note, :create, %ActionLog{changes: changes}) do
changes: changes
}) do
%{ %{
action: :note_creation, action: :note_creation,
object: convert_changes_to_struct(Note, changes) object: convert_changes_to_struct(Note, changes)
} }
end end
defp transform_action_log(Note, :delete, %ActionLog{ defp transform_action_log(Note, :delete, %ActionLog{changes: changes}) do
changes: changes
}) do
%{ %{
action: :note_deletion, action: :note_deletion,
object: convert_changes_to_struct(Note, changes) object: convert_changes_to_struct(Note, changes)
} }
end end
defp transform_action_log(Event, :delete, %ActionLog{ defp transform_action_log(Event, :delete, %ActionLog{changes: changes}) do
changes: changes
}) do
%{ %{
action: :event_deletion, action: :event_deletion,
object: convert_changes_to_struct(Event, changes) object: convert_changes_to_struct(Event, changes)
} }
end end
defp transform_action_log(Comment, :delete, %ActionLog{ defp transform_action_log(Comment, :delete, %ActionLog{changes: changes}) do
changes: changes
}) do
%{ %{
action: :comment_deletion, action: :comment_deletion,
object: convert_changes_to_struct(Comment, changes) object: convert_changes_to_struct(Comment, changes)
@ -118,9 +110,7 @@ defmodule MobilizonWeb.Resolvers.Admin do
end end
end end
def get_dashboard(_parent, _args, %{ def get_dashboard(_parent, _args, %{context: %{current_user: %User{role: role}}})
context: %{current_user: %User{role: role}}
})
when is_admin(role) do when is_admin(role) do
last_public_event_published = last_public_event_published =
case Events.list_events(1, 1, :inserted_at, :desc) do case Events.list_events(1, 1, :inserted_at, :desc) do
@ -142,9 +132,11 @@ defmodule MobilizonWeb.Resolvers.Admin do
{:error, "You need to be logged-in and an administrator to access dashboard statistics"} {:error, "You need to be logged-in and an administrator to access dashboard statistics"}
end end
def list_relay_followers(_parent, %{page: page, limit: limit}, %{ def list_relay_followers(
context: %{current_user: %User{role: role}} _parent,
}) %{page: page, limit: limit},
%{context: %{current_user: %User{role: role}}}
)
when is_admin(role) do when is_admin(role) do
with %Actor{} = relay_actor <- Relay.get_actor() do with %Actor{} = relay_actor <- Relay.get_actor() do
%Page{} = %Page{} =
@ -154,9 +146,11 @@ defmodule MobilizonWeb.Resolvers.Admin do
end end
end end
def list_relay_followings(_parent, %{page: page, limit: limit}, %{ def list_relay_followings(
context: %{current_user: %User{role: role}} _parent,
}) %{page: page, limit: limit},
%{context: %{current_user: %User{role: role}}}
)
when is_admin(role) do when is_admin(role) do
with %Actor{} = relay_actor <- Relay.get_actor() do with %Actor{} = relay_actor <- Relay.get_actor() do
%Page{} = %Page{} =
@ -188,9 +182,11 @@ defmodule MobilizonWeb.Resolvers.Admin do
end end
end end
def accept_subscription(_parent, %{address: address}, %{ def accept_subscription(
context: %{current_user: %User{role: role}} _parent,
}) %{address: address},
%{context: %{current_user: %User{role: role}}}
)
when is_admin(role) do when is_admin(role) do
case Relay.accept(address) do case Relay.accept(address) do
{:ok, _activity, follow} -> {:ok, _activity, follow} ->
@ -201,9 +197,11 @@ defmodule MobilizonWeb.Resolvers.Admin do
end end
end end
def reject_subscription(_parent, %{address: address}, %{ def reject_subscription(
context: %{current_user: %User{role: role}} _parent,
}) %{address: address},
%{context: %{current_user: %User{role: role}}}
)
when is_admin(role) do when is_admin(role) do
case Relay.reject(address) do case Relay.reject(address) do
{:ok, _activity, follow} -> {:ok, _activity, follow} ->

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Comment do defmodule Mobilizon.GraphQL.Resolvers.Comment do
@moduledoc """ @moduledoc """
Handles the comment-related GraphQL calls. Handles the comment-related GraphQL calls.
""" """
@ -9,7 +9,7 @@ defmodule MobilizonWeb.Resolvers.Comment do
alias Mobilizon.Events.Comment, as: CommentModel alias Mobilizon.Events.Comment, as: CommentModel
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.API.Comments alias Mobilizon.GraphQL.API.Comments
require Logger require Logger
@ -17,9 +17,11 @@ defmodule MobilizonWeb.Resolvers.Comment do
{:ok, Events.get_thread_replies(thread_id)} {:ok, Events.get_thread_replies(thread_id)}
end end
def create_comment(_parent, %{actor_id: actor_id} = args, %{ def create_comment(
context: %{current_user: %User{} = user} _parent,
}) do %{actor_id: actor_id} = args,
%{context: %{current_user: %User{} = user}}
) do
with {:is_owned, %Actor{} = _organizer_actor} <- User.owns_actor(user, actor_id), with {:is_owned, %Actor{} = _organizer_actor} <- User.owns_actor(user, actor_id),
{:ok, _, %CommentModel{} = comment} <- {:ok, _, %CommentModel{} = comment} <-
Comments.create_comment(args) do Comments.create_comment(args) do
@ -34,9 +36,11 @@ defmodule MobilizonWeb.Resolvers.Comment do
{:error, "You are not allowed to create a comment if not connected"} {:error, "You are not allowed to create a comment if not connected"}
end end
def delete_comment(_parent, %{actor_id: actor_id, comment_id: comment_id}, %{ def delete_comment(
context: %{current_user: %User{role: role} = user} _parent,
}) do %{actor_id: actor_id, comment_id: comment_id},
%{context: %{current_user: %User{role: role} = user}}
) do
with {actor_id, ""} <- Integer.parse(actor_id), with {actor_id, ""} <- Integer.parse(actor_id),
{:is_owned, %Actor{} = _organizer_actor} <- User.owns_actor(user, actor_id), {:is_owned, %Actor{} = _organizer_actor} <- User.owns_actor(user, actor_id),
%CommentModel{} = comment <- Events.get_comment_with_preload(comment_id) do %CommentModel{} = comment <- Events.get_comment_with_preload(comment_id) do

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Config do defmodule Mobilizon.GraphQL.Resolvers.Config do
@moduledoc """ @moduledoc """
Handles the config-related GraphQL calls. Handles the config-related GraphQL calls.
""" """
@ -10,9 +10,7 @@ defmodule MobilizonWeb.Resolvers.Config do
@doc """ @doc """
Gets config. Gets config.
""" """
def get_config(_parent, _params, %{ def get_config(_parent, _params, %{context: %{ip: ip}}) do
context: %{ip: ip}
}) do
geolix = Geolix.lookup(ip) geolix = Geolix.lookup(ip)
country_code = country_code =

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Event do defmodule Mobilizon.GraphQL.Resolvers.Event do
@moduledoc """ @moduledoc """
Handles the event-related GraphQL calls. Handles the event-related GraphQL calls.
""" """
@ -8,10 +8,10 @@ defmodule MobilizonWeb.Resolvers.Event do
alias Mobilizon.Events.{Event, Participant, EventParticipantStats} alias Mobilizon.Events.{Event, Participant, EventParticipantStats}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias Mobilizon.Federation.ActivityPub.Activity alias Mobilizon.GraphQL.API
alias Mobilizon.GraphQL.Resolvers.Person
alias MobilizonWeb.API alias Mobilizon.Federation.ActivityPub.Activity
alias MobilizonWeb.Resolvers.Person
# We limit the max number of events that can be retrieved # We limit the max number of events that can be retrieved
@event_max_limit 100 @event_max_limit 100
@ -40,8 +40,9 @@ defmodule MobilizonWeb.Resolvers.Event do
end end
end end
defp find_private_event(_parent, %{uuid: uuid}, _resolution), defp find_private_event(_parent, %{uuid: uuid}, _resolution) do
do: {:error, "Event with UUID #{uuid} not found"} {:error, "Event with UUID #{uuid} not found"}
end
def find_event(parent, %{uuid: uuid} = args, resolution) do def find_event(parent, %{uuid: uuid} = args, resolution) do
case {:has_event, Mobilizon.Events.get_public_event_by_uuid_with_preload(uuid)} do case {:has_event, Mobilizon.Events.get_public_event_by_uuid_with_preload(uuid)} do
@ -216,11 +217,7 @@ defmodule MobilizonWeb.Resolvers.Event do
def update_participation( def update_participation(
_parent, _parent,
%{id: participation_id, moderator_actor_id: moderator_actor_id, role: new_role}, %{id: participation_id, moderator_actor_id: moderator_actor_id, role: new_role},
%{ %{context: %{current_user: user}}
context: %{
current_user: user
}
}
) do ) do
# Check that moderator provided is rightly authenticated # Check that moderator provided is rightly authenticated
with {:is_owned, moderator_actor} <- User.owns_actor(user, moderator_actor_id), with {:is_owned, moderator_actor} <- User.owns_actor(user, moderator_actor_id),
@ -233,7 +230,7 @@ defmodule MobilizonWeb.Resolvers.Event do
{:actor_approve_permission, {:actor_approve_permission,
Mobilizon.Events.moderator_for_event?(participation.event.id, moderator_actor_id)}, Mobilizon.Events.moderator_for_event?(participation.event.id, moderator_actor_id)},
{:ok, _activity, participation} <- {:ok, _activity, participation} <-
MobilizonWeb.API.Participations.update(participation, moderator_actor, new_role) do API.Participations.update(participation, moderator_actor, new_role) do
{:ok, participation} {:ok, participation}
else else
{:is_owned, nil} -> {:is_owned, nil} ->
@ -270,7 +267,7 @@ defmodule MobilizonWeb.Resolvers.Event do
{:is_owned, %Actor{} = organizer_actor} <- User.owns_actor(user, organizer_actor_id), {:is_owned, %Actor{} = organizer_actor} <- User.owns_actor(user, organizer_actor_id),
args_with_organizer <- Map.put(args, :organizer_actor, organizer_actor), args_with_organizer <- Map.put(args, :organizer_actor, organizer_actor),
{:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <- {:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <-
MobilizonWeb.API.Events.create_event(args_with_organizer) do API.Events.create_event(args_with_organizer) do
{:ok, event} {:ok, event}
else else
{:is_owned, nil} -> {:is_owned, nil} ->
@ -304,7 +301,7 @@ defmodule MobilizonWeb.Resolvers.Event do
User.owns_actor(user, organizer_actor_id), User.owns_actor(user, organizer_actor_id),
args <- Map.put(args, :organizer_actor, organizer_actor), args <- Map.put(args, :organizer_actor, organizer_actor),
{:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <- {:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <-
MobilizonWeb.API.Events.update_event(args, event) do API.Events.update_event(args, event) do
{:ok, event} {:ok, event}
else else
{:error, :event_not_found} -> {:error, :event_not_found} ->
@ -362,7 +359,7 @@ defmodule MobilizonWeb.Resolvers.Event do
end end
defp do_delete_event(event, federate \\ true) when is_boolean(federate) do defp do_delete_event(event, federate \\ true) when is_boolean(federate) do
with {:ok, _activity, event} <- MobilizonWeb.API.Events.delete_event(event) do with {:ok, _activity, event} <- API.Events.delete_event(event) do
{:ok, %{id: event.id}} {:ok, %{id: event.id}}
end end
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.FeedToken do defmodule Mobilizon.GraphQL.Resolvers.FeedToken do
@moduledoc """ @moduledoc """
Handles the feed tokens-related GraphQL calls. Handles the feed tokens-related GraphQL calls.
""" """
@ -13,10 +13,12 @@ defmodule MobilizonWeb.Resolvers.FeedToken do
@doc """ @doc """
Create an feed token for an user and a defined actor Create an feed token for an user and a defined actor
""" """
@spec create_feed_token(any(), map(), map()) :: {:ok, FeedToken.t()} | {:error, String.t()} @spec create_feed_token(any, map, map) :: {:ok, FeedToken.t()} | {:error, String.t()}
def create_feed_token(_parent, %{actor_id: actor_id}, %{ def create_feed_token(
context: %{current_user: %User{id: id} = user} _parent,
}) do %{actor_id: actor_id},
%{context: %{current_user: %User{id: id} = user}}
) do
with {:is_owned, %Actor{}} <- User.owns_actor(user, actor_id), with {:is_owned, %Actor{}} <- User.owns_actor(user, actor_id),
{:ok, feed_token} <- Events.create_feed_token(%{"user_id" => id, "actor_id" => actor_id}) do {:ok, feed_token} <- Events.create_feed_token(%{"user_id" => id, "actor_id" => actor_id}) do
{:ok, feed_token} {:ok, feed_token}
@ -29,16 +31,14 @@ defmodule MobilizonWeb.Resolvers.FeedToken do
@doc """ @doc """
Create an feed token for an user Create an feed token for an user
""" """
@spec create_feed_token(any(), map(), map()) :: {:ok, FeedToken.t()} @spec create_feed_token(any, map, map) :: {:ok, FeedToken.t()}
def create_feed_token(_parent, %{}, %{ def create_feed_token(_parent, %{}, %{context: %{current_user: %User{id: id}}}) do
context: %{current_user: %User{id: id}}
}) do
with {:ok, feed_token} <- Events.create_feed_token(%{"user_id" => id}) do with {:ok, feed_token} <- Events.create_feed_token(%{"user_id" => id}) do
{:ok, feed_token} {:ok, feed_token}
end end
end end
@spec create_feed_token(any(), map(), map()) :: {:error, String.t()} @spec create_feed_token(any, map, map) :: {:error, String.t()}
def create_feed_token(_parent, _args, %{}) do def create_feed_token(_parent, _args, %{}) do
{:error, "You are not allowed to create a feed token if not connected"} {:error, "You are not allowed to create a feed token if not connected"}
end end
@ -46,10 +46,12 @@ defmodule MobilizonWeb.Resolvers.FeedToken do
@doc """ @doc """
Delete a feed token Delete a feed token
""" """
@spec delete_feed_token(any(), map(), map()) :: {:ok, map()} | {:error, String.t()} @spec delete_feed_token(any, map, map) :: {:ok, map} | {:error, String.t()}
def delete_feed_token(_parent, %{token: token}, %{ def delete_feed_token(
context: %{current_user: %User{id: id} = _user} _parent,
}) do %{token: token},
%{context: %{current_user: %User{id: id} = _user}}
) do
with {:ok, token} <- Ecto.UUID.cast(token), with {:ok, token} <- Ecto.UUID.cast(token),
{:no_token, %FeedToken{actor: actor, user: %User{} = user} = feed_token} <- {:no_token, %FeedToken{actor: actor, user: %User{} = user} = feed_token} <-
{:no_token, Events.get_feed_token(token)}, {:no_token, Events.get_feed_token(token)},
@ -73,7 +75,7 @@ defmodule MobilizonWeb.Resolvers.FeedToken do
end end
end end
@spec delete_feed_token(any(), map(), map()) :: {:error, String.t()} @spec delete_feed_token(any, map, map) :: {:error, String.t()}
def delete_feed_token(_parent, _args, %{}) do def delete_feed_token(_parent, _args, %{}) do
{:error, "You are not allowed to delete a feed token if not connected"} {:error, "You are not allowed to delete a feed token if not connected"}
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Group do defmodule Mobilizon.GraphQL.Resolvers.Group do
@moduledoc """ @moduledoc """
Handles the group-related GraphQL calls. Handles the group-related GraphQL calls.
""" """
@ -7,10 +7,10 @@ defmodule MobilizonWeb.Resolvers.Group do
alias Mobilizon.Actors.{Actor, Member} alias Mobilizon.Actors.{Actor, Member}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias Mobilizon.Federation.ActivityPub alias Mobilizon.GraphQL.API
alias Mobilizon.GraphQL.Resolvers.Person
alias MobilizonWeb.API alias Mobilizon.Federation.ActivityPub
alias MobilizonWeb.Resolvers.Person
require Logger require Logger
@ -42,11 +42,7 @@ defmodule MobilizonWeb.Resolvers.Group do
@doc """ @doc """
Create a new group. The creator is automatically added as admin Create a new group. The creator is automatically added as admin
""" """
def create_group( def create_group(_parent, args, %{context: %{current_user: user}}) do
_parent,
args,
%{context: %{current_user: user}}
) do
with creator_actor_id <- Map.get(args, :creator_actor_id), with creator_actor_id <- Map.get(args, :creator_actor_id),
{:is_owned, %Actor{} = creator_actor} <- User.owns_actor(user, creator_actor_id), {:is_owned, %Actor{} = creator_actor} <- User.owns_actor(user, creator_actor_id),
args <- Map.put(args, :creator_actor, creator_actor), args <- Map.put(args, :creator_actor, creator_actor),
@ -180,7 +176,7 @@ defmodule MobilizonWeb.Resolvers.Group do
# We check that the actor asking to leave the group is not it's only administrator # We check that the actor asking to leave the group is not it's only administrator
# We start by fetching the list of administrator or creators and if there's only one of them # We start by fetching the list of administrator or creators and if there's only one of them
# and that it's the actor requesting leaving the group we return true # and that it's the actor requesting leaving the group we return true
@spec check_that_member_is_not_last_administrator(integer(), integer()) :: boolean() @spec check_that_member_is_not_last_administrator(integer, integer) :: boolean
defp check_that_member_is_not_last_administrator(group_id, actor_id) do defp check_that_member_is_not_last_administrator(group_id, actor_id) do
case Actors.list_administrator_members_for_group(group_id) do case Actors.list_administrator_members_for_group(group_id) do
[%Member{actor: %Actor{id: member_actor_id}}] -> [%Member{actor: %Actor{id: member_actor_id}}] ->

View File

@ -1,7 +1,8 @@
defmodule MobilizonWeb.Resolvers.Member do defmodule Mobilizon.GraphQL.Resolvers.Member do
@moduledoc """ @moduledoc """
Handles the member-related GraphQL calls Handles the member-related GraphQL calls
""" """
alias Mobilizon.Actors alias Mobilizon.Actors
alias Mobilizon.Actors.{Actor} alias Mobilizon.Actors.{Actor}

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Person do defmodule Mobilizon.GraphQL.Resolvers.Person do
@moduledoc """ @moduledoc """
Handles the person-related GraphQL calls Handles the person-related GraphQL calls
""" """
@ -157,7 +157,7 @@ defmodule MobilizonWeb.Resolvers.Person do
pic = args[key][:picture] pic = args[key][:picture]
with {:ok, %{name: name, url: url, content_type: content_type, size: _size}} <- with {:ok, %{name: name, url: url, content_type: content_type, size: _size}} <-
MobilizonWeb.Upload.store(pic.file, type: key, description: pic.alt) do Mobilizon.Web.Upload.store(pic.file, type: key, description: pic.alt) do
Map.put(args, key, %{"name" => name, "url" => url, "mediaType" => content_type}) Map.put(args, key, %{"name" => name, "url" => url, "mediaType" => content_type})
end end
else else
@ -191,9 +191,11 @@ defmodule MobilizonWeb.Resolvers.Person do
@doc """ @doc """
Returns the participation for a specific event Returns the participation for a specific event
""" """
def person_participations(%Actor{id: actor_id}, %{event_id: event_id}, %{ def person_participations(
context: %{current_user: user} %Actor{id: actor_id},
}) do %{event_id: event_id},
%{context: %{current_user: user}}
) do
with {:is_owned, %Actor{} = _actor} <- User.owns_actor(user, actor_id), with {:is_owned, %Actor{} = _actor} <- User.owns_actor(user, actor_id),
{:no_participant, {:ok, %Participant{} = participant}} <- {:no_participant, {:ok, %Participant{} = participant}} <-
{:no_participant, Events.get_participant(event_id, actor_id)} do {:no_participant, Events.get_participant(event_id, actor_id)} do
@ -234,7 +236,7 @@ defmodule MobilizonWeb.Resolvers.Person do
@spec proxify_avatar(Actor.t()) :: Actor.t() @spec proxify_avatar(Actor.t()) :: Actor.t()
defp proxify_avatar(%Actor{avatar: %{url: avatar_url} = avatar} = actor) do defp proxify_avatar(%Actor{avatar: %{url: avatar_url} = avatar} = actor) do
actor |> Map.put(:avatar, avatar |> Map.put(:url, MobilizonWeb.MediaProxy.url(avatar_url))) actor |> Map.put(:avatar, avatar |> Map.put(:url, Mobilizon.Web.MediaProxy.url(avatar_url)))
end end
@spec proxify_avatar(Actor.t()) :: Actor.t() @spec proxify_avatar(Actor.t()) :: Actor.t()
@ -242,7 +244,7 @@ defmodule MobilizonWeb.Resolvers.Person do
@spec proxify_banner(Actor.t()) :: Actor.t() @spec proxify_banner(Actor.t()) :: Actor.t()
defp proxify_banner(%Actor{banner: %{url: banner_url} = banner} = actor) do defp proxify_banner(%Actor{banner: %{url: banner_url} = banner} = actor) do
actor |> Map.put(:banner, banner |> Map.put(:url, MobilizonWeb.MediaProxy.url(banner_url))) actor |> Map.put(:banner, banner |> Map.put(:url, Mobilizon.Web.MediaProxy.url(banner_url)))
end end
@spec proxify_banner(Actor.t()) :: Actor.t() @spec proxify_banner(Actor.t()) :: Actor.t()

View File

@ -1,7 +1,8 @@
defmodule MobilizonWeb.Resolvers.Picture do defmodule Mobilizon.GraphQL.Resolvers.Picture do
@moduledoc """ @moduledoc """
Handles the picture-related GraphQL calls Handles the picture-related GraphQL calls
""" """
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Media alias Mobilizon.Media
alias Mobilizon.Media.Picture alias Mobilizon.Media.Picture
@ -17,7 +18,7 @@ defmodule MobilizonWeb.Resolvers.Picture do
@doc """ @doc """
Get picture for an event that has an attached Get picture for an event that has an attached
See MobilizonWeb.Resolvers.Event.create_event/3 See Mobilizon.Web.Resolvers.Event.create_event/3
""" """
def picture(%{picture: picture} = _parent, _args, _resolution), do: {:ok, picture} def picture(%{picture: picture} = _parent, _args, _resolution), do: {:ok, picture}
def picture(_parent, %{id: picture_id}, _resolution), do: do_fetch_picture(picture_id) def picture(_parent, %{id: picture_id}, _resolution), do: do_fetch_picture(picture_id)
@ -44,7 +45,7 @@ defmodule MobilizonWeb.Resolvers.Picture do
end end
end end
@spec upload_picture(map(), map(), map()) :: {:ok, Picture.t()} | {:error, any()} @spec upload_picture(map, map, map) :: {:ok, Picture.t()} | {:error, any}
def upload_picture( def upload_picture(
_parent, _parent,
%{file: %Plug.Upload{} = file, actor_id: actor_id} = args, %{file: %Plug.Upload{} = file, actor_id: actor_id} = args,
@ -52,7 +53,7 @@ defmodule MobilizonWeb.Resolvers.Picture do
) do ) do
with {:is_owned, %Actor{}} <- User.owns_actor(user, actor_id), with {:is_owned, %Actor{}} <- User.owns_actor(user, actor_id),
{:ok, %{name: _name, url: url, content_type: content_type, size: size}} <- {:ok, %{name: _name, url: url, content_type: content_type, size: size}} <-
MobilizonWeb.Upload.store(file), Mobilizon.Web.Upload.store(file),
args <- args <-
args args
|> Map.put(:url, url) |> Map.put(:url, url)

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.Report do defmodule Mobilizon.GraphQL.Resolvers.Report do
@moduledoc """ @moduledoc """
Handles the report-related GraphQL calls. Handles the report-related GraphQL calls.
""" """
@ -11,7 +11,7 @@ defmodule MobilizonWeb.Resolvers.Report do
alias Mobilizon.Reports.{Note, Report} alias Mobilizon.Reports.{Note, Report}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.API.Reports, as: ReportsAPI alias Mobilizon.GraphQL.API
def list_reports( def list_reports(
_parent, _parent,
@ -50,7 +50,7 @@ defmodule MobilizonWeb.Resolvers.Report do
%{context: %{current_user: user}} = _resolution %{context: %{current_user: user}} = _resolution
) do ) do
with {:is_owned, %Actor{}} <- User.owns_actor(user, reporter_id), with {:is_owned, %Actor{}} <- User.owns_actor(user, reporter_id),
{:ok, _, %Report{} = report} <- ReportsAPI.report(args) do {:ok, _, %Report{} = report} <- API.Reports.report(args) do
{:ok, report} {:ok, report}
else else
{:is_owned, nil} -> {:is_owned, nil} ->
@ -76,8 +76,7 @@ defmodule MobilizonWeb.Resolvers.Report do
when is_moderator(role) do when is_moderator(role) do
with {:is_owned, %Actor{} = actor} <- User.owns_actor(user, moderator_id), with {:is_owned, %Actor{} = actor} <- User.owns_actor(user, moderator_id),
%Report{} = report <- Mobilizon.Reports.get_report(report_id), %Report{} = report <- Mobilizon.Reports.get_report(report_id),
{:ok, %Report{} = report} <- {:ok, %Report{} = report} <- API.Reports.update_report_status(actor, report, status) do
MobilizonWeb.API.Reports.update_report_status(actor, report, status) do
{:ok, report} {:ok, report}
else else
{:is_owned, nil} -> {:is_owned, nil} ->
@ -101,8 +100,7 @@ defmodule MobilizonWeb.Resolvers.Report do
with {:is_owned, %Actor{}} <- User.owns_actor(user, moderator_id), with {:is_owned, %Actor{}} <- User.owns_actor(user, moderator_id),
%Report{} = report <- Reports.get_report(report_id), %Report{} = report <- Reports.get_report(report_id),
%Actor{} = moderator <- Actors.get_local_actor_with_preload(moderator_id), %Actor{} = moderator <- Actors.get_local_actor_with_preload(moderator_id),
{:ok, %Note{} = note} <- {:ok, %Note{} = note} <- API.Reports.create_report_note(report, moderator, content) do
MobilizonWeb.API.Reports.create_report_note(report, moderator, content) do
{:ok, note} {:ok, note}
end end
end end
@ -116,8 +114,7 @@ defmodule MobilizonWeb.Resolvers.Report do
with {:is_owned, %Actor{}} <- User.owns_actor(user, moderator_id), with {:is_owned, %Actor{}} <- User.owns_actor(user, moderator_id),
%Note{} = note <- Reports.get_note(note_id), %Note{} = note <- Reports.get_note(note_id),
%Actor{} = moderator <- Actors.get_local_actor_with_preload(moderator_id), %Actor{} = moderator <- Actors.get_local_actor_with_preload(moderator_id),
{:ok, %Note{} = note} <- {:ok, %Note{} = note} <- API.Reports.delete_report_note(note, moderator) do
MobilizonWeb.API.Reports.delete_report_note(note, moderator) do
{:ok, %{id: note.id}} {:ok, %{id: note.id}}
end end
end end

View File

@ -1,8 +1,9 @@
defmodule MobilizonWeb.Resolvers.Search do defmodule Mobilizon.GraphQL.Resolvers.Search do
@moduledoc """ @moduledoc """
Handles the event-related GraphQL calls Handles the event-related GraphQL calls
""" """
alias MobilizonWeb.API.Search
alias Mobilizon.GraphQL.API.Search
@doc """ @doc """
Search persons Search persons

View File

@ -1,10 +1,10 @@
defmodule MobilizonWeb.Resolvers.Tag do defmodule Mobilizon.GraphQL.Resolvers.Tag do
@moduledoc """ @moduledoc """
Handles the tag-related GraphQL calls Handles the tag-related GraphQL calls
""" """
alias Mobilizon.Events alias Mobilizon.Events
alias Mobilizon.Events.Event alias Mobilizon.Events.{Event, Tag}
alias Mobilizon.Events.Tag
def list_tags(_parent, %{page: page, limit: limit}, _resolution) do def list_tags(_parent, %{page: page, limit: limit}, _resolution) do
tags = Mobilizon.Events.list_tags(page, limit) tags = Mobilizon.Events.list_tags(page, limit)

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Resolvers.User do defmodule Mobilizon.GraphQL.Resolvers.User do
@moduledoc """ @moduledoc """
Handles the user-related GraphQL calls. Handles the user-related GraphQL calls.
""" """
@ -10,7 +10,7 @@ defmodule MobilizonWeb.Resolvers.User do
alias Mobilizon.Storage.Repo alias Mobilizon.Storage.Repo
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.{Auth, Email} alias Mobilizon.Web.{Auth, Email}
require Logger require Logger
@ -24,15 +24,7 @@ defmodule MobilizonWeb.Resolvers.User do
@doc """ @doc """
Return current logged-in user Return current logged-in user
""" """
def get_current_user( def get_current_user(_parent, _args, %{context: %{current_user: user}}) do
_parent,
_args,
%{
context: %{
current_user: user
}
}
) do
{:ok, user} {:ok, user}
end end
@ -46,13 +38,7 @@ defmodule MobilizonWeb.Resolvers.User do
def list_and_count_users( def list_and_count_users(
_parent, _parent,
%{page: page, limit: limit, sort: sort, direction: direction}, %{page: page, limit: limit, sort: sort, direction: direction},
%{ %{context: %{current_user: %User{role: role}}}
context: %{
current_user: %User{
role: role
}
}
}
) )
when is_moderator(role) do when is_moderator(role) do
total = Task.async(&Users.count_users/0) total = Task.async(&Users.count_users/0)
@ -61,8 +47,9 @@ defmodule MobilizonWeb.Resolvers.User do
{:ok, %{total: Task.await(total), elements: Task.await(elements)}} {:ok, %{total: Task.await(total), elements: Task.await(elements)}}
end end
def list_and_count_users(_parent, _args, _resolution), def list_and_count_users(_parent, _args, _resolution) do
do: {:error, "You need to have admin access to list users"} {:error, "You need to have admin access to list users"}
end
@doc """ @doc """
Login an user. Returns a token and the user Login an user. Returns a token and the user
@ -87,13 +74,7 @@ defmodule MobilizonWeb.Resolvers.User do
@doc """ @doc """
Refresh a token Refresh a token
""" """
def refresh_token( def refresh_token(_parent, %{refresh_token: refresh_token}, _context) do
_parent,
%{
refresh_token: refresh_token
},
_context
) do
with {:ok, user, _claims} <- Auth.Guardian.resource_from_token(refresh_token), with {:ok, user, _claims} <- Auth.Guardian.resource_from_token(refresh_token),
{:ok, _old, {exchanged_token, _claims}} <- {:ok, _old, {exchanged_token, _claims}} <-
Auth.Guardian.exchange(refresh_token, ["access", "refresh"], "access"), Auth.Guardian.exchange(refresh_token, ["access", "refresh"], "access"),
@ -106,8 +87,9 @@ defmodule MobilizonWeb.Resolvers.User do
end end
end end
def refresh_token(_parent, _params, _context), def refresh_token(_parent, _params, _context) do
do: {:error, "You need to have an existing token to get a refresh token"} {:error, "You need to have an existing token to get a refresh token"}
end
@doc """ @doc """
Register an user: Register an user:
@ -115,7 +97,7 @@ defmodule MobilizonWeb.Resolvers.User do
- create the user - create the user
- send a validation email to the user - send a validation email to the user
""" """
@spec create_user(any(), map(), any()) :: tuple() @spec create_user(any, map, any) :: tuple
def create_user(_parent, args, _resolution) do def create_user(_parent, args, _resolution) do
with :registration_ok <- check_registration_config(args), with :registration_ok <- check_registration_config(args),
{:ok, %User{} = user} <- Users.register(args) do {:ok, %User{} = user} <- Users.register(args) do
@ -133,7 +115,7 @@ defmodule MobilizonWeb.Resolvers.User do
end end
end end
@spec check_registration_config(map()) :: atom() @spec check_registration_config(map) :: atom
defp check_registration_config(%{email: email}) do defp check_registration_config(%{email: email}) do
cond do cond do
Config.instance_registrations_open?() -> Config.instance_registrations_open?() ->
@ -176,6 +158,7 @@ defmodule MobilizonWeb.Resolvers.User do
error -> error ->
Logger.info("Unable to validate user with token #{token}") Logger.info("Unable to validate user with token #{token}")
Logger.debug(inspect(error)) Logger.debug(inspect(error))
{:error, "Unable to validate user"} {:error, "Unable to validate user"}
end end
end end
@ -253,9 +236,11 @@ defmodule MobilizonWeb.Resolvers.User do
@doc """ @doc """
Returns the list of events for all of this user's identities are going to Returns the list of events for all of this user's identities are going to
""" """
def user_participations(%User{id: user_id}, args, %{ def user_participations(
context: %{current_user: %User{id: logged_user_id}} %User{id: user_id},
}) do args,
%{context: %{current_user: %User{id: logged_user_id}}}
) do
with true <- user_id == logged_user_id, with true <- user_id == logged_user_id,
participations <- participations <-
Events.list_participations_for_user( Events.list_participations_for_user(
@ -272,9 +257,11 @@ defmodule MobilizonWeb.Resolvers.User do
@doc """ @doc """
Returns the list of draft events for the current user Returns the list of draft events for the current user
""" """
def user_drafted_events(%User{id: user_id}, args, %{ def user_drafted_events(
context: %{current_user: %User{id: logged_user_id}} %User{id: user_id},
}) do args,
%{context: %{current_user: %User{id: logged_user_id}}}
) do
with {:same_user, true} <- {:same_user, user_id == logged_user_id}, with {:same_user, true} <- {:same_user, user_id == logged_user_id},
events <- events <-
Events.list_drafts_for_user(user_id, Map.get(args, :page), Map.get(args, :limit)) do Events.list_drafts_for_user(user_id, Map.get(args, :page), Map.get(args, :limit)) do
@ -282,17 +269,17 @@ defmodule MobilizonWeb.Resolvers.User do
end end
end end
def change_password(_parent, %{old_password: old_password, new_password: new_password}, %{ def change_password(
context: %{current_user: %User{password_hash: old_password_hash} = user} _parent,
}) do %{old_password: old_password, new_password: new_password},
%{context: %{current_user: %User{password_hash: old_password_hash} = user}}
) do
with {:current_password, true} <- with {:current_password, true} <-
{:current_password, Argon2.verify_pass(old_password, old_password_hash)}, {:current_password, Argon2.verify_pass(old_password, old_password_hash)},
{:same_password, false} <- {:same_password, old_password == new_password}, {:same_password, false} <- {:same_password, old_password == new_password},
{:ok, %User{} = user} <- {:ok, %User{} = user} <-
user user
|> User.password_change_changeset(%{ |> User.password_change_changeset(%{"password" => new_password})
"password" => new_password
})
|> Repo.update() do |> Repo.update() do
{:ok, user} {:ok, user}
else else

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema do defmodule Mobilizon.GraphQL.Schema do
@moduledoc """ @moduledoc """
GraphQL schema representation. GraphQL schema representation.
""" """
@ -8,24 +8,25 @@ defmodule MobilizonWeb.Schema do
alias Mobilizon.{Actors, Addresses, Events, Media, Reports, Users} alias Mobilizon.{Actors, Addresses, Events, Media, Reports, Users}
alias Mobilizon.Actors.{Actor, Follower, Member} alias Mobilizon.Actors.{Actor, Follower, Member}
alias Mobilizon.Events.{Comment, Event, Participant} alias Mobilizon.Events.{Comment, Event, Participant}
alias Mobilizon.GraphQL.Schema
alias Mobilizon.Storage.Repo alias Mobilizon.Storage.Repo
import_types(MobilizonWeb.Schema.Custom.UUID)
import_types(MobilizonWeb.Schema.Custom.Point)
import_types(Absinthe.Type.Custom) import_types(Absinthe.Type.Custom)
import_types(Absinthe.Plug.Types) import_types(Absinthe.Plug.Types)
import_types(Schema.Custom.UUID)
import_types(Schema.Custom.Point)
import_types(MobilizonWeb.Schema.UserType) import_types(Schema.UserType)
import_types(MobilizonWeb.Schema.PictureType) import_types(Schema.PictureType)
import_types(MobilizonWeb.Schema.ActorInterface) import_types(Schema.ActorInterface)
import_types(MobilizonWeb.Schema.Actors.PersonType) import_types(Schema.Actors.PersonType)
import_types(MobilizonWeb.Schema.Actors.GroupType) import_types(Schema.Actors.GroupType)
import_types(MobilizonWeb.Schema.Actors.ApplicationType) import_types(Schema.Actors.ApplicationType)
import_types(MobilizonWeb.Schema.CommentType) import_types(Schema.CommentType)
import_types(MobilizonWeb.Schema.SearchType) import_types(Schema.SearchType)
import_types(MobilizonWeb.Schema.ConfigType) import_types(Schema.ConfigType)
import_types(MobilizonWeb.Schema.ReportType) import_types(Schema.ReportType)
import_types(MobilizonWeb.Schema.AdminType) import_types(Schema.AdminType)
@desc "A struct containing the id of the deleted object" @desc "A struct containing the id of the deleted object"
object :deleted_object do object :deleted_object do

View File

@ -1,12 +1,14 @@
defmodule MobilizonWeb.Schema.ActorInterface do defmodule Mobilizon.GraphQL.Schema.ActorInterface do
@moduledoc """ @moduledoc """
Schema representation for Actor Schema representation for Actor
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias Mobilizon.Actors.Actor
import_types(MobilizonWeb.Schema.Actors.FollowerType) alias Mobilizon.Actors.Actor
import_types(MobilizonWeb.Schema.EventType) alias Mobilizon.GraphQL.Schema
import_types(Schema.Actors.FollowerType)
import_types(Schema.EventType)
@desc "An ActivityPub actor" @desc "An ActivityPub actor"
interface :actor do interface :actor do

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Actors.ApplicationType do defmodule Mobilizon.GraphQL.Schema.Actors.ApplicationType do
@moduledoc """ @moduledoc """
Schema representation for Group. Schema representation for Group.
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Actors.FollowerType do defmodule Mobilizon.GraphQL.Schema.Actors.FollowerType do
@moduledoc """ @moduledoc """
Schema representation for Follower Schema representation for Follower
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Actors.GroupType do defmodule Mobilizon.GraphQL.Schema.Actors.GroupType do
@moduledoc """ @moduledoc """
Schema representation for Group. Schema representation for Group.
""" """
@ -8,10 +8,10 @@ defmodule MobilizonWeb.Schema.Actors.GroupType do
import Absinthe.Resolution.Helpers, only: [dataloader: 1] import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.Events alias Mobilizon.Events
alias Mobilizon.GraphQL.Resolvers.{Group, Member}
alias Mobilizon.GraphQL.Schema
alias MobilizonWeb.Resolvers.{Group, Member} import_types(Schema.Actors.MemberType)
import_types(MobilizonWeb.Schema.Actors.MemberType)
@desc """ @desc """
Represents a group of actors Represents a group of actors

View File

@ -1,10 +1,10 @@
defmodule MobilizonWeb.Schema.Actors.MemberType do defmodule Mobilizon.GraphQL.Schema.Actors.MemberType do
@moduledoc """ @moduledoc """
Schema representation for Member Schema representation for Member
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers alias Mobilizon.GraphQL.Resolvers.Group
@desc """ @desc """
Represents a member of a group Represents a member of a group
@ -27,7 +27,7 @@ defmodule MobilizonWeb.Schema.Actors.MemberType do
arg(:group_id, non_null(:id)) arg(:group_id, non_null(:id))
arg(:actor_id, non_null(:id)) arg(:actor_id, non_null(:id))
resolve(&Resolvers.Group.join_group/3) resolve(&Group.join_group/3)
end end
@desc "Leave an event" @desc "Leave an event"
@ -35,7 +35,7 @@ defmodule MobilizonWeb.Schema.Actors.MemberType do
arg(:group_id, non_null(:id)) arg(:group_id, non_null(:id))
arg(:actor_id, non_null(:id)) arg(:actor_id, non_null(:id))
resolve(&Resolvers.Group.leave_group/3) resolve(&Group.leave_group/3)
end end
end end
end end

View File

@ -1,14 +1,17 @@
defmodule MobilizonWeb.Schema.Actors.PersonType do defmodule Mobilizon.GraphQL.Schema.Actors.PersonType do
@moduledoc """ @moduledoc """
Schema representation for Person Schema representation for Person
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.Events
alias MobilizonWeb.Resolvers.Person
import MobilizonWeb.Schema.Utils
import_types(MobilizonWeb.Schema.Events.FeedTokenType) import Absinthe.Resolution.Helpers, only: [dataloader: 1]
import Mobilizon.GraphQL.Helpers.Error
alias Mobilizon.Events
alias Mobilizon.GraphQL.Resolvers.Person
alias Mobilizon.GraphQL.Schema
import_types(Schema.Events.FeedTokenType)
@desc """ @desc """
Represents a person identity Represents a person identity

View File

@ -1,9 +1,10 @@
defmodule MobilizonWeb.Schema.AddressType do defmodule Mobilizon.GraphQL.Schema.AddressType do
@moduledoc """ @moduledoc """
Schema representation for Address Schema representation for Address
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers
alias Mobilizon.GraphQL.Resolvers.Address
object :address do object :address do
field(:geom, :point, description: "The geocoordinates for the point where this address is") field(:geom, :point, description: "The geocoordinates for the point where this address is")
@ -52,7 +53,7 @@ defmodule MobilizonWeb.Schema.AddressType do
arg(:page, :integer, default_value: 1) arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10) arg(:limit, :integer, default_value: 10)
resolve(&Resolvers.Address.search/3) resolve(&Address.search/3)
end end
@desc "Reverse geocode coordinates" @desc "Reverse geocode coordinates"
@ -62,7 +63,7 @@ defmodule MobilizonWeb.Schema.AddressType do
arg(:zoom, :integer, default_value: 15) arg(:zoom, :integer, default_value: 15)
arg(:locale, :string, default_value: "en") arg(:locale, :string, default_value: "en")
resolve(&Resolvers.Address.reverse_geocode/3) resolve(&Address.reverse_geocode/3)
end end
end end
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.AdminType do defmodule Mobilizon.GraphQL.Schema.AdminType do
@moduledoc """ @moduledoc """
Schema representation for ActionLog. Schema representation for ActionLog.
""" """
@ -8,7 +8,7 @@ defmodule MobilizonWeb.Schema.AdminType do
alias Mobilizon.Events.{Event, Comment} alias Mobilizon.Events.{Event, Comment}
alias Mobilizon.Reports.{Note, Report} alias Mobilizon.Reports.{Note, Report}
alias MobilizonWeb.Resolvers.Admin alias Mobilizon.GraphQL.Resolvers.Admin
@desc "An action log" @desc "An action log"
object :action_log do object :action_log do

View File

@ -1,12 +1,14 @@
defmodule MobilizonWeb.Schema.CommentType do defmodule Mobilizon.GraphQL.Schema.CommentType do
@moduledoc """ @moduledoc """
Schema representation for Comment Schema representation for Comment
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers.Comment
alias Mobilizon.{Actors, Events}
import Absinthe.Resolution.Helpers, only: [dataloader: 1] import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.{Actors, Events}
alias Mobilizon.GraphQL.Resolvers.Comment
@desc "A comment" @desc "A comment"
object :comment do object :comment do
interfaces([:action_log_object]) interfaces([:action_log_object])

View File

@ -1,10 +1,10 @@
defmodule MobilizonWeb.Schema.ConfigType do defmodule Mobilizon.GraphQL.Schema.ConfigType do
@moduledoc """ @moduledoc """
Schema representation for User Schema representation for User
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers.Config alias Mobilizon.GraphQL.Resolvers.Config
@desc "A config object" @desc "A config object"
object :config do object :config do

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Custom.Point do defmodule Mobilizon.GraphQL.Schema.Custom.Point do
@moduledoc """ @moduledoc """
The geom scalar type allows Geo.PostGIS.Geometry strings to be passed in and out. The geom scalar type allows Geo.PostGIS.Geometry strings to be passed in and out.
Requires `{:geo, "~> 3.0"},` package: https://github.com/elixir-ecto/ecto Requires `{:geo, "~> 3.0"},` package: https://github.com/elixir-ecto/ecto
@ -15,7 +15,7 @@ defmodule MobilizonWeb.Schema.Custom.Point do
parse(&decode/1) parse(&decode/1)
end end
@spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term()} | :error @spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term} | :error
@spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil} @spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil}
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
with [_, _] = lonlat <- String.split(value, ";", trim: true), with [_, _] = lonlat <- String.split(value, ";", trim: true),

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Custom.UUID do defmodule Mobilizon.GraphQL.Schema.Custom.UUID do
@moduledoc """ @moduledoc """
The UUID4 scalar type allows UUID compliant strings to be passed in and out. The UUID4 scalar type allows UUID compliant strings to be passed in and out.
Requires `{ :ecto, ">= 0.0.0" }` package: https://github.com/elixir-ecto/ecto Requires `{ :ecto, ">= 0.0.0" }` package: https://github.com/elixir-ecto/ecto
@ -18,7 +18,7 @@ defmodule MobilizonWeb.Schema.Custom.UUID do
parse(&decode/1) parse(&decode/1)
end end
@spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term()} | :error @spec decode(Absinthe.Blueprint.Input.String.t()) :: {:ok, term} | :error
@spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil} @spec decode(Absinthe.Blueprint.Input.Null.t()) :: {:ok, nil}
defp decode(%Absinthe.Blueprint.Input.String{value: value}) do defp decode(%Absinthe.Blueprint.Input.String{value: value}) do
UUID.cast(value) UUID.cast(value)

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.EventType do defmodule Mobilizon.GraphQL.Schema.EventType do
@moduledoc """ @moduledoc """
Schema representation for Event. Schema representation for Event.
""" """
@ -6,15 +6,15 @@ defmodule MobilizonWeb.Schema.EventType do
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
import Absinthe.Resolution.Helpers, only: [dataloader: 1] import Absinthe.Resolution.Helpers, only: [dataloader: 1]
import MobilizonWeb.Schema.Utils import Mobilizon.GraphQL.Helpers.Error
alias Mobilizon.{Actors, Addresses, Events} alias Mobilizon.{Actors, Addresses, Events}
alias Mobilizon.GraphQL.Resolvers.{Event, Picture, Tag}
alias Mobilizon.GraphQL.Schema
alias MobilizonWeb.Resolvers.{Event, Picture, Tag} import_types(Schema.AddressType)
import_types(Schema.Events.ParticipantType)
import_types(MobilizonWeb.Schema.AddressType) import_types(Schema.TagType)
import_types(MobilizonWeb.Schema.Events.ParticipantType)
import_types(MobilizonWeb.Schema.TagType)
@desc "An event" @desc "An event"
object :event do object :event do

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Events.FeedTokenType do defmodule Mobilizon.GraphQL.Schema.Events.FeedTokenType do
@moduledoc """ @moduledoc """
Schema representation for Participant. Schema representation for Participant.
""" """
@ -8,8 +8,7 @@ defmodule MobilizonWeb.Schema.Events.FeedTokenType do
import Absinthe.Resolution.Helpers, only: [dataloader: 1] import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.{Actors, Users} alias Mobilizon.{Actors, Users}
alias Mobilizon.GraphQL.Resolvers.FeedToken
alias MobilizonWeb.Resolvers
@desc "Represents a participant to an event" @desc "Represents a participant to an event"
object :feed_token do object :feed_token do
@ -41,14 +40,14 @@ defmodule MobilizonWeb.Schema.Events.FeedTokenType do
field :create_feed_token, :feed_token do field :create_feed_token, :feed_token do
arg(:actor_id, :id) arg(:actor_id, :id)
resolve(&Resolvers.FeedToken.create_feed_token/3) resolve(&FeedToken.create_feed_token/3)
end end
@desc "Delete a feed token" @desc "Delete a feed token"
field :delete_feed_token, :deleted_feed_token do field :delete_feed_token, :deleted_feed_token do
arg(:token, non_null(:string)) arg(:token, non_null(:string))
resolve(&Resolvers.FeedToken.delete_feed_token/3) resolve(&FeedToken.delete_feed_token/3)
end end
end end
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.Events.ParticipantType do defmodule Mobilizon.GraphQL.Schema.Events.ParticipantType do
@moduledoc """ @moduledoc """
Schema representation for Participant. Schema representation for Participant.
""" """
@ -8,8 +8,7 @@ defmodule MobilizonWeb.Schema.Events.ParticipantType do
import Absinthe.Resolution.Helpers, only: [dataloader: 1] import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.{Actors, Events} alias Mobilizon.{Actors, Events}
alias Mobilizon.GraphQL.Resolvers.Event
alias MobilizonWeb.Resolvers
@desc "Represents a participant to an event" @desc "Represents a participant to an event"
object :participant do object :participant do
@ -54,7 +53,7 @@ defmodule MobilizonWeb.Schema.Events.ParticipantType do
arg(:event_id, non_null(:id)) arg(:event_id, non_null(:id))
arg(:actor_id, non_null(:id)) arg(:actor_id, non_null(:id))
resolve(&Resolvers.Event.actor_join_event/3) resolve(&Event.actor_join_event/3)
end end
@desc "Leave an event" @desc "Leave an event"
@ -62,7 +61,7 @@ defmodule MobilizonWeb.Schema.Events.ParticipantType do
arg(:event_id, non_null(:id)) arg(:event_id, non_null(:id))
arg(:actor_id, non_null(:id)) arg(:actor_id, non_null(:id))
resolve(&Resolvers.Event.actor_leave_event/3) resolve(&Event.actor_leave_event/3)
end end
@desc "Accept a participation" @desc "Accept a participation"
@ -71,7 +70,7 @@ defmodule MobilizonWeb.Schema.Events.ParticipantType do
arg(:role, non_null(:participant_role_enum)) arg(:role, non_null(:participant_role_enum))
arg(:moderator_actor_id, non_null(:id)) arg(:moderator_actor_id, non_null(:id))
resolve(&Resolvers.Event.update_participation/3) resolve(&Event.update_participation/3)
end end
end end
end end

View File

@ -1,9 +1,10 @@
defmodule MobilizonWeb.Schema.PictureType do defmodule Mobilizon.GraphQL.Schema.PictureType do
@moduledoc """ @moduledoc """
Schema representation for Pictures Schema representation for Pictures
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers.Picture
alias Mobilizon.GraphQL.Resolvers.Picture
@desc "A picture" @desc "A picture"
object :picture do object :picture do

View File

@ -1,12 +1,13 @@
defmodule MobilizonWeb.Schema.ReportType do defmodule Mobilizon.GraphQL.Schema.ReportType do
@moduledoc """ @moduledoc """
Schema representation for User Schema representation for User
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.Reports
alias MobilizonWeb.Resolvers.Report import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.Reports
alias Mobilizon.GraphQL.Resolvers.Report
@desc "A report object" @desc "A report object"
object :report do object :report do

View File

@ -1,10 +1,10 @@
defmodule MobilizonWeb.Schema.SearchType do defmodule Mobilizon.GraphQL.Schema.SearchType do
@moduledoc """ @moduledoc """
Schema representation for Search Schema representation for Search
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers alias Mobilizon.GraphQL.Resolvers.Search
@desc "Search persons result" @desc "Search persons result"
object :persons do object :persons do
@ -31,7 +31,7 @@ defmodule MobilizonWeb.Schema.SearchType do
arg(:page, :integer, default_value: 1) arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10) arg(:limit, :integer, default_value: 10)
resolve(&Resolvers.Search.search_persons/3) resolve(&Search.search_persons/3)
end end
@desc "Search groups" @desc "Search groups"
@ -40,7 +40,7 @@ defmodule MobilizonWeb.Schema.SearchType do
arg(:page, :integer, default_value: 1) arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10) arg(:limit, :integer, default_value: 10)
resolve(&Resolvers.Search.search_groups/3) resolve(&Search.search_groups/3)
end end
@desc "Search events" @desc "Search events"
@ -49,7 +49,7 @@ defmodule MobilizonWeb.Schema.SearchType do
arg(:page, :integer, default_value: 1) arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10) arg(:limit, :integer, default_value: 10)
resolve(&Resolvers.Search.search_events/3) resolve(&Search.search_events/3)
end end
end end
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Schema.SortType do defmodule Mobilizon.GraphQL.Schema.SortType do
@moduledoc """ @moduledoc """
Allows sorting a collection of elements Allows sorting a collection of elements
""" """

View File

@ -1,9 +1,10 @@
defmodule MobilizonWeb.Schema.TagType do defmodule Mobilizon.GraphQL.Schema.TagType do
@moduledoc """ @moduledoc """
Schema representation for Tags Schema representation for Tags
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
alias MobilizonWeb.Resolvers
alias Mobilizon.GraphQL.Resolvers.Tag
@desc "A tag" @desc "A tag"
object :tag do object :tag do
@ -14,7 +15,7 @@ defmodule MobilizonWeb.Schema.TagType do
field( field(
:related, :related,
list_of(:tag), list_of(:tag),
resolve: &Resolvers.Tag.get_related_tags/3, resolve: &Tag.get_related_tags/3,
description: "Related tags to this tag" description: "Related tags to this tag"
) )
end end
@ -24,7 +25,7 @@ defmodule MobilizonWeb.Schema.TagType do
field :tags, non_null(list_of(:tag)) do field :tags, non_null(list_of(:tag)) do
arg(:page, :integer, default_value: 1) arg(:page, :integer, default_value: 1)
arg(:limit, :integer, default_value: 10) arg(:limit, :integer, default_value: 10)
resolve(&Resolvers.Tag.list_tags/3) resolve(&Tag.list_tags/3)
end end
end end
end end

View File

@ -1,14 +1,17 @@
defmodule MobilizonWeb.Schema.UserType do defmodule Mobilizon.GraphQL.Schema.UserType do
@moduledoc """ @moduledoc """
Schema representation for User Schema representation for User
""" """
use Absinthe.Schema.Notation use Absinthe.Schema.Notation
import Absinthe.Resolution.Helpers, only: [dataloader: 1]
alias Mobilizon.Events
alias MobilizonWeb.Resolvers.User
import MobilizonWeb.Schema.Utils
import_types(MobilizonWeb.Schema.SortType) import Absinthe.Resolution.Helpers, only: [dataloader: 1]
import Mobilizon.GraphQL.Helpers.Error
alias Mobilizon.Events
alias Mobilizon.GraphQL.Resolvers.User
alias Mobilizon.GraphQL.Schema
import_types(Schema.SortType)
@desc "A local user of Mobilizon" @desc "A local user of Mobilizon"
object :user do object :user do

View File

@ -7,11 +7,12 @@ defmodule Mix.Tasks.Mobilizon.MoveParticipantStats do
use Mix.Task use Mix.Task
alias Mobilizon.Storage.Repo import Ecto.Query
alias Mobilizon.Events alias Mobilizon.Events
alias Mobilizon.Events.Event alias Mobilizon.Events.Event
alias Mobilizon.Events.ParticipantRole alias Mobilizon.Events.ParticipantRole
import Ecto.Query alias Mobilizon.Storage.Repo
require Logger require Logger

View File

@ -23,6 +23,7 @@ defmodule Mix.Tasks.Mobilizon.Relay do
use Mix.Task use Mix.Task
alias Mix.Tasks.Mobilizon.Common alias Mix.Tasks.Mobilizon.Common
alias Mobilizon.Federation.ActivityPub.Relay alias Mobilizon.Federation.ActivityPub.Relay
@shortdoc "Manages remote relays" @shortdoc "Manages remote relays"

View File

@ -5,10 +5,11 @@ defmodule Mix.Tasks.Mobilizon.Toot do
use Mix.Task use Mix.Task
alias MobilizonWeb.API.Comments
alias Mobilizon.Actors alias Mobilizon.Actors
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.GraphQL.API.Comments
require Logger require Logger
@shortdoc "Toot to an user" @shortdoc "Toot to an user"

View File

@ -26,7 +26,7 @@ defmodule Mobilizon do
@spec user_agent :: String.t() @spec user_agent :: String.t()
def user_agent do def user_agent do
info = "#{MobilizonWeb.Endpoint.url()} <#{Config.get([:instance, :email], "")}>" info = "#{Mobilizon.Web.Endpoint.url()} <#{Config.get([:instance, :email], "")}>"
"#{named_version()}; #{info}" "#{named_version()}; #{info}"
end end
@ -37,8 +37,8 @@ defmodule Mobilizon do
children = [ children = [
# supervisors # supervisors
Mobilizon.Storage.Repo, Mobilizon.Storage.Repo,
MobilizonWeb.Endpoint, Mobilizon.Web.Endpoint,
{Absinthe.Subscription, [MobilizonWeb.Endpoint]}, {Absinthe.Subscription, [Mobilizon.Web.Endpoint]},
{Oban, Application.get_env(:mobilizon, Oban)}, {Oban, Application.get_env(:mobilizon, Oban)},
# workers # workers
Guardian.DB.Token.SweeperServer, Guardian.DB.Token.SweeperServer,
@ -55,7 +55,7 @@ defmodule Mobilizon do
@spec config_change(keyword, keyword, [atom]) :: :ok @spec config_change(keyword, keyword, [atom]) :: :ok
def config_change(changed, _new, removed) do def config_change(changed, _new, removed) do
MobilizonWeb.Endpoint.config_change(changed, removed) Mobilizon.Web.Endpoint.config_change(changed, removed)
:ok :ok
end end

View File

@ -15,8 +15,8 @@ defmodule Mobilizon.Actors.Actor do
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias Mobilizon.Mention alias Mobilizon.Mention
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
require Logger require Logger
@ -336,7 +336,7 @@ defmodule Mobilizon.Actors.Actor do
|> put_change(:followers_url, build_url(username, :followers)) |> put_change(:followers_url, build_url(username, :followers))
|> put_change(:following_url, build_url(username, :following)) |> put_change(:following_url, build_url(username, :following))
|> put_change(:inbox_url, build_url(username, :inbox)) |> put_change(:inbox_url, build_url(username, :inbox))
|> put_change(:shared_inbox_url, "#{MobilizonWeb.Endpoint.url()}/inbox") |> put_change(:shared_inbox_url, "#{Mobilizon.Web.Endpoint.url()}/inbox")
|> put_change(:url, build_url(username, :page)) |> put_change(:url, build_url(username, :page))
end end
@ -376,10 +376,10 @@ defmodule Mobilizon.Actors.Actor do
"keys" => Crypto.generate_rsa_2048_private_key(), "keys" => Crypto.generate_rsa_2048_private_key(),
"preferred_username" => preferred_username, "preferred_username" => preferred_username,
"domain" => nil, "domain" => nil,
"inbox_url" => "#{MobilizonWeb.Endpoint.url()}/inbox", "inbox_url" => "#{Mobilizon.Web.Endpoint.url()}/inbox",
"followers_url" => "#{url}/followers", "followers_url" => "#{url}/followers",
"following_url" => "#{url}/following", "following_url" => "#{url}/following",
"shared_inbox_url" => "#{MobilizonWeb.Endpoint.url()}/inbox", "shared_inbox_url" => "#{Mobilizon.Web.Endpoint.url()}/inbox",
"type" => :Application "type" => :Application
} }
end end

View File

@ -755,7 +755,7 @@ defmodule Mobilizon.Actors do
@spec safe_remove_file(String.t(), Actor.t()) :: {:ok, Actor.t()} @spec safe_remove_file(String.t(), Actor.t()) :: {:ok, Actor.t()}
defp safe_remove_file(url, %Actor{} = actor) do defp safe_remove_file(url, %Actor{} = actor) do
case MobilizonWeb.Upload.remove(url) do case Mobilizon.Web.Upload.remove(url) do
{:ok, _value} -> {:ok, _value} ->
{:ok, actor} {:ok, actor}
@ -774,7 +774,7 @@ defmodule Mobilizon.Actors do
with %Ecto.Changeset{changes: %{url: new_url}} <- changes[key], with %Ecto.Changeset{changes: %{url: new_url}} <- changes[key],
%{url: old_url} <- data |> Map.from_struct() |> Map.get(key), %{url: old_url} <- data |> Map.from_struct() |> Map.get(key),
false <- new_url == old_url do false <- new_url == old_url do
MobilizonWeb.Upload.remove(old_url) Mobilizon.Web.Upload.remove(old_url)
end end
end end
end) end)

View File

@ -65,6 +65,6 @@ defmodule Mobilizon.Actors.Follower do
changeset changeset
|> put_change(:id, uuid) |> put_change(:id, uuid)
|> put_change(:url, "#{MobilizonWeb.Endpoint.url()}/follow/#{uuid}") |> put_change(:url, "#{Mobilizon.Web.Endpoint.url()}/follow/#{uuid}")
end end
end end

View File

@ -65,7 +65,8 @@ defmodule Mobilizon.Addresses.Address do
@spec set_url(Ecto.Changeset.t()) :: Ecto.Changeset.t() @spec set_url(Ecto.Changeset.t()) :: Ecto.Changeset.t()
defp set_url(%Ecto.Changeset{changes: changes} = changeset) do defp set_url(%Ecto.Changeset{changes: changes} = changeset) do
url = Map.get(changes, :url, "#{MobilizonWeb.Endpoint.url()}/address/#{Ecto.UUID.generate()}") url =
Map.get(changes, :url, "#{Mobilizon.Web.Endpoint.url()}/address/#{Ecto.UUID.generate()}")
put_change(changeset, :url, url) put_change(changeset, :url, url)
end end

View File

@ -11,8 +11,8 @@ defmodule Mobilizon.Events.Comment do
alias Mobilizon.Events.{Comment, CommentVisibility, Event, Tag} alias Mobilizon.Events.{Comment, CommentVisibility, Event, Tag}
alias Mobilizon.Mention alias Mobilizon.Mention
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
@type t :: %__MODULE__{ @type t :: %__MODULE__{
text: String.t(), text: String.t(),

View File

@ -33,8 +33,8 @@ defmodule Mobilizon.Events.Event do
alias Mobilizon.Mention alias Mobilizon.Mention
alias Mobilizon.Storage.Repo alias Mobilizon.Storage.Repo
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
@type t :: %__MODULE__{ @type t :: %__MODULE__{
url: String.t(), url: String.t(),

View File

@ -31,7 +31,7 @@ defmodule Mobilizon.Events do
alias Mobilizon.Storage.{Page, Repo} alias Mobilizon.Storage.{Page, Repo}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.Email alias Mobilizon.Web.Email
defenum(EventVisibility, :event_visibility, [ defenum(EventVisibility, :event_visibility, [
:public, :public,

View File

@ -11,7 +11,7 @@ defmodule Mobilizon.Events.Participant do
alias Mobilizon.Events alias Mobilizon.Events
alias Mobilizon.Events.{Event, ParticipantRole} alias Mobilizon.Events.{Event, ParticipantRole}
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
@type t :: %__MODULE__{ @type t :: %__MODULE__{
role: ParticipantRole.t(), role: ParticipantRole.t(),

View File

@ -62,7 +62,7 @@ defmodule Mobilizon.Media do
Multi.new() Multi.new()
|> Multi.delete(:picture, picture) |> Multi.delete(:picture, picture)
|> Multi.run(:remove, fn _repo, %{picture: %Picture{file: %File{url: url}}} -> |> Multi.run(:remove, fn _repo, %{picture: %Picture{file: %File{url: url}}} ->
MobilizonWeb.Upload.remove(url) Mobilizon.Web.Upload.remove(url)
end) end)
|> Repo.transaction() |> Repo.transaction()

View File

@ -71,7 +71,7 @@ defmodule Mobilizon.Reports.Report do
@spec maybe_generate_url(Ecto.Changeset.t()) :: Ecto.Changeset.t() @spec maybe_generate_url(Ecto.Changeset.t()) :: Ecto.Changeset.t()
defp maybe_generate_url(%Ecto.Changeset{} = changeset) do defp maybe_generate_url(%Ecto.Changeset{} = changeset) do
with res when res in [:error, {:data, nil}] <- fetch_field(changeset, :url), with res when res in [:error, {:data, nil}] <- fetch_field(changeset, :url),
url <- "#{MobilizonWeb.Endpoint.url()}/report/#{Ecto.UUID.generate()}" do url <- "#{Mobilizon.Web.Endpoint.url()}/report/#{Ecto.UUID.generate()}" do
put_change(changeset, :url, url) put_change(changeset, :url, url)
else else
_ -> changeset _ -> changeset

View File

@ -12,7 +12,7 @@ defmodule Mobilizon.Users.User do
alias Mobilizon.Events.FeedToken alias Mobilizon.Events.FeedToken
alias Mobilizon.Users.UserRole alias Mobilizon.Users.UserRole
alias MobilizonWeb.Email alias Mobilizon.Web.Email
@type t :: %__MODULE__{ @type t :: %__MODULE__{
email: String.t(), email: String.t(),

View File

@ -13,7 +13,7 @@ defmodule Mobilizon.Users do
alias Mobilizon.Storage.{Page, Repo} alias Mobilizon.Storage.{Page, Repo}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.Auth alias Mobilizon.Web.Auth
@type tokens :: %{ @type tokens :: %{
required(:access_token) => String.t(), required(:access_token) => String.t(),

View File

@ -1,3 +0,0 @@
defmodule MobilizonWeb.LayoutView do
use MobilizonWeb, :view
end

View File

@ -3,7 +3,7 @@ defmodule Mobilizon.Service.Export.Feed do
Serve Atom Syndication Feeds. Serve Atom Syndication Feeds.
""" """
import MobilizonWeb.Gettext import Mobilizon.Web.Gettext
alias Atomex.{Entry, Feed} alias Atomex.{Entry, Feed}
@ -12,8 +12,8 @@ defmodule Mobilizon.Service.Export.Feed do
alias Mobilizon.Events.{Event, FeedToken} alias Mobilizon.Events.{Event, FeedToken}
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.{Endpoint, MediaProxy} alias Mobilizon.Web.{Endpoint, MediaProxy}
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
require Logger require Logger
@ -74,7 +74,7 @@ defmodule Mobilizon.Service.Export.Feed do
self_url self_url
|> Feed.new( |> Feed.new(
DateTime.utc_now(), DateTime.utc_now(),
Gettext.gettext(MobilizonWeb.Gettext, title, actor: display_name) Gettext.gettext(Mobilizon.Web.Gettext, title, actor: display_name)
) )
|> Feed.author(display_name, uri: actor.url) |> Feed.author(display_name, uri: actor.url)
|> Feed.link(self_url, rel: "self") |> Feed.link(self_url, rel: "self")

View File

@ -52,7 +52,7 @@ defmodule Mobilizon.Service.Formatter do
def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do def hashtag_handler("#" <> tag = tag_text, _buffer, _opts, acc) do
tag = String.downcase(tag) tag = String.downcase(tag)
url = "#{MobilizonWeb.Endpoint.url()}/tag/#{tag}" url = "#{Mobilizon.Web.Endpoint.url()}/tag/#{tag}"
link = "<a class='hashtag' data-tag='#{tag}' href='#{url}' rel='tag'>#{tag_text}</a>" link = "<a class='hashtag' data-tag='#{tag}' href='#{url}' rel='tag'>#{tag_text}</a>"
{link, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag})}} {link, %{acc | tags: MapSet.put(acc.tags, {tag_text, tag})}}

View File

@ -1,7 +1,7 @@
defimpl Mobilizon.Service.Metadata, for: Mobilizon.Actors.Actor do defimpl Mobilizon.Service.Metadata, for: Mobilizon.Actors.Actor do
alias Phoenix.HTML.Tag alias Phoenix.HTML.Tag
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias MobilizonWeb.MediaProxy alias Mobilizon.Web.MediaProxy
def build_tags(%Actor{} = actor) do def build_tags(%Actor{} = actor) do
tags = [ tags = [

View File

@ -2,8 +2,8 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do
alias Phoenix.HTML alias Phoenix.HTML
alias Phoenix.HTML.Tag alias Phoenix.HTML.Tag
alias Mobilizon.Events.Event alias Mobilizon.Events.Event
alias MobilizonWeb.JsonLD.ObjectView alias Mobilizon.Web.JsonLD.ObjectView
alias MobilizonWeb.MediaProxy alias Mobilizon.Web.MediaProxy
def build_tags(%Event{} = event) do def build_tags(%Event{} = event) do
event = Map.put(event, :description, process_description(event.description)) event = Map.put(event, :description, process_description(event.description))

View File

@ -6,7 +6,7 @@ defmodule Mobilizon.Service.Metadata.Instance do
alias Phoenix.HTML alias Phoenix.HTML
alias Phoenix.HTML.Tag alias Phoenix.HTML.Tag
alias Mobilizon.Config alias Mobilizon.Config
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
def build_tags() do def build_tags() do
description = process_description(Config.instance_description()) description = process_description(Config.instance_description())

View File

@ -1,6 +1,6 @@
defmodule MobilizonWeb.Auth.Context do defmodule Mobilizon.Web.Auth.Context do
@moduledoc """ @moduledoc """
Guardian context for MobilizonWeb Guardian context for Mobilizon.Web
""" """
@behaviour Plug @behaviour Plug

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Auth.ErrorHandler do defmodule Mobilizon.Web.Auth.ErrorHandler do
@moduledoc """ @moduledoc """
In case we have an auth error In case we have an auth error
""" """

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Auth.Guardian do defmodule Mobilizon.Web.Auth.Guardian do
@moduledoc """ @moduledoc """
Handles the JWT tokens encoding and decoding Handles the JWT tokens encoding and decoding
""" """

View File

@ -1,14 +1,14 @@
defmodule MobilizonWeb.Auth.Pipeline do defmodule Mobilizon.Web.Auth.Pipeline do
@moduledoc """ @moduledoc """
Handles the app sessions Handles the app sessions
""" """
use Guardian.Plug.Pipeline, use Guardian.Plug.Pipeline,
otp_app: :mobilizon, otp_app: :mobilizon,
module: MobilizonWeb.Auth.Guardian, module: Mobilizon.Web.Auth.Guardian,
error_handler: MobilizonWeb.Auth.ErrorHandler error_handler: Mobilizon.Web.Auth.ErrorHandler
plug(Guardian.Plug.VerifyHeader, realm: "Bearer") plug(Guardian.Plug.VerifyHeader, realm: "Bearer")
plug(Guardian.Plug.LoadResource, allow_blank: true) plug(Guardian.Plug.LoadResource, allow_blank: true)
plug(MobilizonWeb.Auth.Context) plug(Mobilizon.Web.Auth.Context)
end end

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Cache.ActivityPub do defmodule Mobilizon.Web.Cache.ActivityPub do
@moduledoc """ @moduledoc """
ActivityPub related cache. ActivityPub related cache.
""" """
@ -9,8 +9,8 @@ defmodule MobilizonWeb.Cache.ActivityPub do
alias Mobilizon.Federation.ActivityPub.Relay alias Mobilizon.Federation.ActivityPub.Relay
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
@cache :activity_pub @cache :activity_pub

View File

@ -1,11 +1,11 @@
defmodule MobilizonWeb.Cache do defmodule Mobilizon.Web.Cache do
@moduledoc """ @moduledoc """
Facade module which provides access to all cached data. Facade module which provides access to all cached data.
""" """
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias MobilizonWeb.Cache.ActivityPub alias Mobilizon.Web.Cache.ActivityPub
@caches [:activity_pub, :feed, :ics] @caches [:activity_pub, :feed, :ics]

View File

@ -1,14 +1,14 @@
defmodule MobilizonWeb.GraphQLSocket do defmodule Mobilizon.Web.GraphQLSocket do
use Phoenix.Socket use Phoenix.Socket
use Absinthe.Phoenix.Socket, use Absinthe.Phoenix.Socket,
schema: MobilizonWeb.Schema schema: Mobilizon.Web.Schema
alias Mobilizon.Users.User alias Mobilizon.Users.User
def connect(%{"token" => token}, socket) do def connect(%{"token" => token}, socket) do
with {:ok, authed_socket} <- with {:ok, authed_socket} <-
Guardian.Phoenix.Socket.authenticate(socket, MobilizonWeb.Auth.Guardian, token), Guardian.Phoenix.Socket.authenticate(socket, Mobilizon.Web.Auth.Guardian, token),
%User{} = user <- Guardian.Phoenix.Socket.current_resource(authed_socket) do %User{} = user <- Guardian.Phoenix.Socket.current_resource(authed_socket) do
authed_socket = authed_socket =
Absinthe.Phoenix.Socket.put_options(socket, Absinthe.Phoenix.Socket.put_options(socket,

View File

@ -3,8 +3,8 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/activity_pub_controller.ex # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/activity_pub/activity_pub_controller.ex
defmodule MobilizonWeb.ActivityPubController do defmodule Mobilizon.Web.ActivityPubController do
use MobilizonWeb, :controller use Mobilizon.Web, :controller
alias Mobilizon.{Actors, Config} alias Mobilizon.{Actors, Config}
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
@ -12,14 +12,14 @@ defmodule MobilizonWeb.ActivityPubController do
alias Mobilizon.Federation.ActivityPub alias Mobilizon.Federation.ActivityPub
alias Mobilizon.Federation.ActivityPub.Federator alias Mobilizon.Federation.ActivityPub.Federator
alias MobilizonWeb.ActivityPub.ActorView alias Mobilizon.Web.ActivityPub.ActorView
alias MobilizonWeb.Cache alias Mobilizon.Web.Cache
require Logger require Logger
action_fallback(:errors) action_fallback(:errors)
plug(MobilizonWeb.Plugs.Federating when action in [:inbox, :relay]) plug(Mobilizon.Web.Plugs.Federating when action in [:inbox, :relay])
plug(:relay_active? when action in [:relay]) plug(:relay_active? when action in [:relay])
def relay_active?(conn, _) do def relay_active?(conn, _) do

View File

@ -1,15 +1,15 @@
defmodule MobilizonWeb.FallbackController do defmodule Mobilizon.Web.FallbackController do
@moduledoc """ @moduledoc """
Translates controller action results into valid `Plug.Conn` responses. Translates controller action results into valid `Plug.Conn` responses.
See `Phoenix.Controller.action_fallback/1` for more details. See `Phoenix.Controller.action_fallback/1` for more details.
""" """
use MobilizonWeb, :controller use Mobilizon.Web, :controller
def call(conn, {:error, :not_found}) do def call(conn, {:error, :not_found}) do
conn conn
|> put_status(:not_found) |> put_status(:not_found)
|> put_view(MobilizonWeb.ErrorView) |> put_view(Mobilizon.Web.ErrorView)
|> render(:"404") |> render(:"404")
end end
end end

View File

@ -1,10 +1,10 @@
defmodule MobilizonWeb.FeedController do defmodule Mobilizon.Web.FeedController do
@moduledoc """ @moduledoc """
Controller to serve RSS, ATOM and iCal Feeds Controller to serve RSS, ATOM and iCal Feeds
""" """
use MobilizonWeb, :controller use Mobilizon.Web, :controller
plug(:put_layout, false) plug(:put_layout, false)
action_fallback(MobilizonWeb.FallbackController) action_fallback(Mobilizon.Web.FallbackController)
def actor(conn, %{"name" => name, "format" => "atom"}) do def actor(conn, %{"name" => name, "format" => "atom"}) do
case Cachex.fetch(:feed, "actor_" <> name) do case Cachex.fetch(:feed, "actor_" <> name) do

View File

@ -3,15 +3,15 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/media_proxy/controller.ex # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/media_proxy/controller.ex
defmodule MobilizonWeb.MediaProxyController do defmodule Mobilizon.Web.MediaProxyController do
use MobilizonWeb, :controller use Mobilizon.Web, :controller
alias Plug.Conn alias Plug.Conn
alias Mobilizon.Config alias Mobilizon.Config
alias MobilizonWeb.MediaProxy alias Mobilizon.Web.MediaProxy
alias MobilizonWeb.ReverseProxy alias Mobilizon.Web.ReverseProxy
@default_proxy_opts [max_body_length: 25 * 1_048_576, http: [follow_redirect: true]] @default_proxy_opts [max_body_length: 25 * 1_048_576, http: [follow_redirect: true]]

View File

@ -3,14 +3,14 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
defmodule MobilizonWeb.NodeInfoController do defmodule Mobilizon.Web.NodeInfoController do
use MobilizonWeb, :controller use Mobilizon.Web, :controller
alias Mobilizon.Config alias Mobilizon.Config
alias Mobilizon.Service.Statistics alias Mobilizon.Service.Statistics
alias MobilizonWeb.Endpoint alias Mobilizon.Web.Endpoint
alias MobilizonWeb.Router.Helpers, as: Routes alias Mobilizon.Web.Router.Helpers, as: Routes
@node_info_supported_versions ["2.0", "2.1"] @node_info_supported_versions ["2.0", "2.1"]
@node_info_schema_uri "http://nodeinfo.diaspora.software/ns/schema/" @node_info_schema_uri "http://nodeinfo.diaspora.software/ns/schema/"

View File

@ -1,13 +1,13 @@
defmodule MobilizonWeb.PageController do defmodule Mobilizon.Web.PageController do
@moduledoc """ @moduledoc """
Controller to load our webapp Controller to load our webapp
""" """
use MobilizonWeb, :controller use Mobilizon.Web, :controller
alias MobilizonWeb.Cache alias Mobilizon.Web.Cache
plug(:put_layout, false) plug(:put_layout, false)
action_fallback(MobilizonWeb.FallbackController) action_fallback(Mobilizon.Web.FallbackController)
def index(conn, _params), do: render(conn, :index) def index(conn, _params), do: render(conn, :index)

View File

@ -3,16 +3,16 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
# Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/web_finger/web_finger_controller.ex # Upstream: https://git.pleroma.social/pleroma/pleroma/blob/develop/lib/pleroma/web/web_finger/web_finger_controller.ex
defmodule MobilizonWeb.WebFingerController do defmodule Mobilizon.Web.WebFingerController do
@moduledoc """ @moduledoc """
Handles Webfinger requests Handles Webfinger requests
""" """
use MobilizonWeb, :controller use Mobilizon.Web, :controller
alias Mobilizon.Federation.WebFinger alias Mobilizon.Federation.WebFinger
plug(MobilizonWeb.Plugs.Federating) plug(Mobilizon.Web.Plugs.Federating)
@doc """ @doc """
Provides /.well-known/host-meta Provides /.well-known/host-meta

View File

@ -1,23 +1,23 @@
defmodule MobilizonWeb.Email.Admin do defmodule Mobilizon.Web.Email.Admin do
@moduledoc """ @moduledoc """
Handles emails sent to admins. Handles emails sent to admins.
""" """
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
import Bamboo.Phoenix import Bamboo.Phoenix
import MobilizonWeb.Gettext import Mobilizon.Web.Gettext
alias Mobilizon.Config alias Mobilizon.Config
alias Mobilizon.Reports.Report alias Mobilizon.Reports.Report
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.Email alias Mobilizon.Web.Email
@spec report(User.t(), Report.t(), String.t()) :: Bamboo.Email.t() @spec report(User.t(), Report.t(), String.t()) :: Bamboo.Email.t()
def report(%User{email: email}, %Report{} = report, locale \\ "en") do def report(%User{email: email}, %Report{} = report, locale \\ "en") do
MobilizonWeb.Gettext.put_locale(locale) Mobilizon.Web.Gettext.put_locale(locale)
subject = subject =
gettext( gettext(

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Email.Checker do defmodule Mobilizon.Web.Email.Checker do
@moduledoc """ @moduledoc """
Provides a function to test emails against a "not so bad" regex. Provides a function to test emails against a "not so bad" regex.
""" """

View File

@ -1,9 +1,9 @@
defmodule MobilizonWeb.Email do defmodule Mobilizon.Web.Email do
@moduledoc """ @moduledoc """
The Email context. The Email context.
""" """
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
alias Mobilizon.Config alias Mobilizon.Config
@ -16,7 +16,7 @@ defmodule MobilizonWeb.Email do
|> from({Config.instance_name(), Config.instance_email_from()}) |> from({Config.instance_name(), Config.instance_email_from()})
|> put_header("Reply-To", Config.instance_email_reply_to()) |> put_header("Reply-To", Config.instance_email_reply_to())
|> assign(:instance, instance) |> assign(:instance, instance)
|> put_html_layout({MobilizonWeb.EmailView, "email.html"}) |> put_html_layout({Mobilizon.Web.EmailView, "email.html"})
|> put_text_layout({MobilizonWeb.EmailView, "email.text"}) |> put_text_layout({Mobilizon.Web.EmailView, "email.text"})
end end
end end

View File

@ -1,13 +1,13 @@
defmodule MobilizonWeb.Email.Event do defmodule Mobilizon.Web.Email.Event do
@moduledoc """ @moduledoc """
Handles emails sent about events. Handles emails sent about events.
""" """
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
import Bamboo.Phoenix import Bamboo.Phoenix
import MobilizonWeb.Gettext import Mobilizon.Web.Gettext
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Events alias Mobilizon.Events
@ -15,7 +15,7 @@ defmodule MobilizonWeb.Email.Event do
alias Mobilizon.Storage.Repo alias Mobilizon.Storage.Repo
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias MobilizonWeb.Email alias Mobilizon.Web.Email
@important_changes [:title, :begins_on, :ends_on, :status] @important_changes [:title, :begins_on, :ends_on, :status]
@ -29,7 +29,7 @@ defmodule MobilizonWeb.Email.Event do
changes, changes,
locale \\ "en" locale \\ "en"
) do ) do
MobilizonWeb.Gettext.put_locale(locale) Mobilizon.Web.Gettext.put_locale(locale)
subject = subject =
gettext( gettext(

View File

@ -1,4 +1,4 @@
defmodule MobilizonWeb.Email.Mailer do defmodule Mobilizon.Web.Email.Mailer do
@moduledoc """ @moduledoc """
Mobilizon Mailer. Mobilizon Mailer.
""" """

View File

@ -1,19 +1,19 @@
defmodule MobilizonWeb.Email.Participation do defmodule Mobilizon.Web.Email.Participation do
@moduledoc """ @moduledoc """
Handles emails sent about participation. Handles emails sent about participation.
""" """
use Bamboo.Phoenix, view: MobilizonWeb.EmailView use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
import Bamboo.Phoenix import Bamboo.Phoenix
import MobilizonWeb.Gettext import Mobilizon.Web.Gettext
alias Mobilizon.Users.User alias Mobilizon.Users.User
alias Mobilizon.Actors.Actor alias Mobilizon.Actors.Actor
alias Mobilizon.Events.Participant alias Mobilizon.Events.Participant
alias MobilizonWeb.Email alias Mobilizon.Web.Email
@doc """ @doc """
Send emails to local user Send emails to local user
@ -46,7 +46,7 @@ defmodule MobilizonWeb.Email.Participation do
%Participant{event: event, role: :rejected}, %Participant{event: event, role: :rejected},
locale locale
) do ) do
MobilizonWeb.Gettext.put_locale(locale) Mobilizon.Web.Gettext.put_locale(locale)
subject = subject =
gettext( gettext(
@ -67,7 +67,7 @@ defmodule MobilizonWeb.Email.Participation do
%Participant{event: event, role: :participant}, %Participant{event: event, role: :participant},
locale locale
) do ) do
MobilizonWeb.Gettext.put_locale(locale) Mobilizon.Web.Gettext.put_locale(locale)
subject = subject =
gettext( gettext(

Some files were not shown because too many files have changed in this diff Show More