Various refactoring and typespec improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -15,15 +15,8 @@ defmodule Mobilizon.GraphQL.API.Events do
|
||||
"""
|
||||
@spec create_event(map) :: {:ok, Activity.t(), Event.t()} | any
|
||||
def create_event(args) do
|
||||
with organizer_actor <- Map.get(args, :organizer_actor),
|
||||
args <- extract_pictures_from_event_body(args, organizer_actor),
|
||||
args <-
|
||||
Map.update(args, :picture, nil, fn picture ->
|
||||
process_picture(picture, organizer_actor)
|
||||
end) do
|
||||
# For now we don't federate drafts but it will be needed if we want to edit them as groups
|
||||
ActivityPub.create(:event, args, should_federate(args))
|
||||
end
|
||||
# For now we don't federate drafts but it will be needed if we want to edit them as groups
|
||||
ActivityPub.create(:event, prepare_args(args), should_federate(args))
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -31,23 +24,28 @@ defmodule Mobilizon.GraphQL.API.Events do
|
||||
"""
|
||||
@spec update_event(map, Event.t()) :: {:ok, Activity.t(), Event.t()} | any
|
||||
def update_event(args, %Event{} = event) do
|
||||
with organizer_actor <- Map.get(args, :organizer_actor),
|
||||
args <- extract_pictures_from_event_body(args, organizer_actor),
|
||||
args <-
|
||||
Map.update(args, :picture, nil, fn picture ->
|
||||
process_picture(picture, organizer_actor)
|
||||
end) do
|
||||
ActivityPub.update(event, args, should_federate(args))
|
||||
end
|
||||
ActivityPub.update(event, prepare_args(args), should_federate(args))
|
||||
end
|
||||
|
||||
@doc """
|
||||
Trigger the deletion of an event
|
||||
"""
|
||||
@spec delete_event(Event.t(), Actor.t(), boolean()) :: {:ok, Activity.t(), Entity.t()} | any()
|
||||
def delete_event(%Event{} = event, %Actor{} = actor, federate \\ true) do
|
||||
ActivityPub.delete(event, actor, federate)
|
||||
end
|
||||
|
||||
@spec prepare_args(map) :: map
|
||||
defp prepare_args(args) do
|
||||
organizer_actor = Map.get(args, :organizer_actor)
|
||||
|
||||
args
|
||||
|> extract_pictures_from_event_body(organizer_actor)
|
||||
|> Map.update(:picture, nil, fn picture ->
|
||||
process_picture(picture, organizer_actor)
|
||||
end)
|
||||
end
|
||||
|
||||
defp process_picture(nil, _), do: nil
|
||||
defp process_picture(%{media_id: _picture_id} = args, _), do: args
|
||||
|
||||
@@ -75,6 +73,7 @@ defmodule Mobilizon.GraphQL.API.Events do
|
||||
|
||||
defp extract_pictures_from_event_body(args, _), do: args
|
||||
|
||||
@spec should_federate(map()) :: boolean
|
||||
defp should_federate(%{attributed_to_id: attributed_to_id}) when not is_nil(attributed_to_id),
|
||||
do: true
|
||||
|
||||
|
||||
@@ -7,72 +7,80 @@ defmodule Mobilizon.GraphQL.API.Follows do
|
||||
alias Mobilizon.Actors.{Actor, Follower}
|
||||
|
||||
alias Mobilizon.Federation.ActivityPub
|
||||
alias Mobilizon.Federation.ActivityPub.Activity
|
||||
|
||||
require Logger
|
||||
|
||||
@doc """
|
||||
Make an actor (`follower`) follow another (`followed`).
|
||||
"""
|
||||
@spec follow(follower :: Actor.t(), followed :: Actor.t()) ::
|
||||
{:ok, Mobilizon.Federation.ActivityPub.Activity.t(), Mobilizon.Actors.Follower.t()}
|
||||
| {:error, String.t()}
|
||||
def follow(%Actor{} = follower, %Actor{} = followed) do
|
||||
case ActivityPub.follow(follower, followed) do
|
||||
{:ok, activity, follow} ->
|
||||
{:ok, activity, follow}
|
||||
|
||||
{:error, e} ->
|
||||
Logger.warn("Error while following actor: #{inspect(e)}")
|
||||
{:error, e}
|
||||
|
||||
e ->
|
||||
Logger.warn("Error while following actor: #{inspect(e)}")
|
||||
{:error, e}
|
||||
end
|
||||
ActivityPub.follow(follower, followed)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Make an actor (`follower`) unfollow another (`followed`).
|
||||
"""
|
||||
@spec unfollow(follower :: Actor.t(), followed :: Actor.t()) ::
|
||||
{:ok, Mobilizon.Federation.ActivityPub.Activity.t(), Mobilizon.Actors.Follower.t()}
|
||||
| {:error, String.t()}
|
||||
def unfollow(%Actor{} = follower, %Actor{} = followed) do
|
||||
case ActivityPub.unfollow(follower, followed) do
|
||||
{:ok, activity, follow} ->
|
||||
{:ok, activity, follow}
|
||||
|
||||
e ->
|
||||
Logger.warn("Error while unfollowing actor: #{inspect(e)}")
|
||||
{:error, e}
|
||||
end
|
||||
ActivityPub.unfollow(follower, followed)
|
||||
end
|
||||
|
||||
def accept(%Actor{} = follower, %Actor{} = followed) do
|
||||
Logger.debug("We're trying to accept a follow")
|
||||
@doc """
|
||||
Make an actor (`followed`) accept the follow from another (`follower`).
|
||||
"""
|
||||
@spec accept(follower :: Actor.t(), followed :: Actor.t()) ::
|
||||
{:ok, Mobilizon.Federation.ActivityPub.Activity.t(), Mobilizon.Actors.Follower.t()}
|
||||
| {:error, String.t()}
|
||||
def accept(%Actor{url: follower_url} = follower, %Actor{url: followed_url} = followed) do
|
||||
Logger.debug(
|
||||
"We're trying to accept a follow: #{followed_url} is accepting #{follower_url} follow request."
|
||||
)
|
||||
|
||||
case Actors.is_following(follower, followed) do
|
||||
%Follower{approved: false} = follow ->
|
||||
ActivityPub.accept(
|
||||
:follow,
|
||||
follow,
|
||||
true
|
||||
)
|
||||
|
||||
with %Follower{approved: false} = follow <-
|
||||
Actors.is_following(follower, followed),
|
||||
{:ok, %Activity{} = activity, %Follower{approved: true} = follow} <-
|
||||
ActivityPub.accept(
|
||||
:follow,
|
||||
follow,
|
||||
true
|
||||
) do
|
||||
{:ok, activity, follow}
|
||||
else
|
||||
%Follower{approved: true} ->
|
||||
{:error, "Follow already accepted"}
|
||||
|
||||
nil ->
|
||||
{:error, "Can't accept follow: #{follower_url} is not following #{followed_url}."}
|
||||
end
|
||||
end
|
||||
|
||||
def reject(%Actor{} = follower, %Actor{} = followed) do
|
||||
Logger.debug("We're trying to reject a follow")
|
||||
@doc """
|
||||
Make an actor (`followed`) reject the follow from another (`follower`).
|
||||
"""
|
||||
@spec reject(follower :: Actor.t(), followed :: Actor.t()) ::
|
||||
{:ok, Mobilizon.Federation.ActivityPub.Activity.t(), Mobilizon.Actors.Follower.t()}
|
||||
| {:error, String.t()}
|
||||
def reject(%Actor{url: follower_url} = follower, %Actor{url: followed_url} = followed) do
|
||||
Logger.debug(
|
||||
"We're trying to reject a follow: #{followed_url} is rejecting #{follower_url} follow request."
|
||||
)
|
||||
|
||||
with {:follower, %Follower{} = follow} <-
|
||||
{:follower, Actors.is_following(follower, followed)},
|
||||
{:ok, %Activity{} = activity, %Follower{} = follow} <-
|
||||
ActivityPub.reject(
|
||||
:follow,
|
||||
follow,
|
||||
true
|
||||
) do
|
||||
{:ok, activity, follow}
|
||||
else
|
||||
{:follower, nil} ->
|
||||
{:error, "Follow not found"}
|
||||
|
||||
{:follower, %Follower{approved: true}} ->
|
||||
case Actors.is_following(follower, followed) do
|
||||
%Follower{approved: true} ->
|
||||
{:error, "Follow already accepted"}
|
||||
|
||||
%Follower{} = follow ->
|
||||
ActivityPub.reject(
|
||||
:follow,
|
||||
follow,
|
||||
true
|
||||
)
|
||||
|
||||
nil ->
|
||||
{:error, "Follow not found"}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,23 +11,23 @@ defmodule Mobilizon.GraphQL.API.Participations do
|
||||
alias Mobilizon.Service.Notifications.Scheduler
|
||||
alias Mobilizon.Web.Email.Participation
|
||||
|
||||
@spec join(Event.t(), Actor.t(), map()) :: {:ok, Activity.t(), Participant.t()}
|
||||
@spec join(Event.t(), Actor.t(), map()) ::
|
||||
{:ok, Activity.t(), Participant.t()} | {:error, :already_participant}
|
||||
def join(%Event{id: event_id} = event, %Actor{id: actor_id} = actor, args \\ %{}) do
|
||||
with {:error, :participant_not_found} <-
|
||||
Mobilizon.Events.get_participant(event_id, actor_id, args),
|
||||
{:ok, activity, participant} <-
|
||||
ActivityPub.join(event, actor, Map.get(args, :local, true), %{metadata: args}) do
|
||||
{:ok, activity, participant}
|
||||
case Mobilizon.Events.get_participant(event_id, actor_id, args) do
|
||||
{:ok, %Participant{}} ->
|
||||
{:error, :already_participant}
|
||||
|
||||
{:error, :participant_not_found} ->
|
||||
ActivityPub.join(event, actor, Map.get(args, :local, true), %{metadata: args})
|
||||
end
|
||||
end
|
||||
|
||||
@spec leave(Event.t(), Actor.t()) :: {:ok, Activity.t(), Participant.t()}
|
||||
def leave(%Event{} = event, %Actor{} = actor, args \\ %{}) do
|
||||
with {:ok, activity, participant} <-
|
||||
ActivityPub.leave(event, actor, Map.get(args, :local, true), %{metadata: args}) do
|
||||
{:ok, activity, participant}
|
||||
end
|
||||
end
|
||||
@spec leave(Event.t(), Actor.t(), map()) ::
|
||||
{:ok, Activity.t(), Participant.t()}
|
||||
| {:error, :is_only_organizer | :participant_not_found | Ecto.Changeset.t()}
|
||||
def leave(%Event{} = event, %Actor{} = actor, args \\ %{}),
|
||||
do: ActivityPub.leave(event, actor, Map.get(args, :local, true), %{metadata: args})
|
||||
|
||||
@doc """
|
||||
Update participation status
|
||||
@@ -36,7 +36,6 @@ defmodule Mobilizon.GraphQL.API.Participations do
|
||||
def update(%Participant{} = participation, %Actor{} = moderator, :participant),
|
||||
do: accept(participation, moderator)
|
||||
|
||||
@spec update(Participant.t(), Actor.t(), atom()) :: {:ok, Activity.t(), Participant.t()}
|
||||
def update(%Participant{} = participation, %Actor{} = _moderator, :not_approved) do
|
||||
with {:ok, %Participant{} = participant} <-
|
||||
Events.update_participant(participation, %{role: :not_approved}) do
|
||||
@@ -45,7 +44,6 @@ defmodule Mobilizon.GraphQL.API.Participations do
|
||||
end
|
||||
end
|
||||
|
||||
@spec update(Participant.t(), Actor.t(), atom()) :: {:ok, Activity.t(), Participant.t()}
|
||||
def update(%Participant{} = participation, %Actor{} = moderator, :rejected),
|
||||
do: reject(participation, moderator)
|
||||
|
||||
|
||||
@@ -59,8 +59,8 @@ defmodule Mobilizon.GraphQL.API.Search do
|
||||
@doc """
|
||||
Search events
|
||||
"""
|
||||
@spec search_events(String.t(), integer | nil, integer | nil) ::
|
||||
{:ok, Page.t()} | {:error, String.t()}
|
||||
@spec search_events(map(), integer | nil, integer | nil) ::
|
||||
{:ok, Page.t()}
|
||||
def search_events(%{term: term} = args, page \\ 1, limit \\ 10) do
|
||||
term = String.trim(term)
|
||||
|
||||
@@ -78,6 +78,7 @@ defmodule Mobilizon.GraphQL.API.Search do
|
||||
end
|
||||
end
|
||||
|
||||
@spec interact(String.t()) :: {:ok, struct()} | {:error, :not_found}
|
||||
def interact(uri) do
|
||||
case ActivityPub.fetch_object_from_url(uri) do
|
||||
{:ok, object} ->
|
||||
|
||||
@@ -15,23 +15,27 @@ defmodule Mobilizon.GraphQL.Resolvers.Activity do
|
||||
def group_activity(%Actor{type: :Group, id: group_id}, %{page: page, limit: limit} = args, %{
|
||||
context: %{current_user: %User{role: role} = user}
|
||||
}) do
|
||||
with {:actor, %Actor{id: actor_id} = _actor} <- {:actor, Users.get_actor_for_user(user)},
|
||||
{:member, true} <- {:member, Actors.is_member?(actor_id, group_id) or is_moderator(role)} do
|
||||
%Page{total: total, elements: elements} =
|
||||
Activities.list_group_activities_for_member(
|
||||
group_id,
|
||||
actor_id,
|
||||
[type: Map.get(args, :type), author: Map.get(args, :author)],
|
||||
page,
|
||||
limit
|
||||
)
|
||||
case Users.get_actor_for_user(user) do
|
||||
%Actor{id: actor_id} = _actor ->
|
||||
if Actors.is_member?(actor_id, group_id) or is_moderator(role) do
|
||||
%Page{total: total, elements: elements} =
|
||||
Activities.list_group_activities_for_member(
|
||||
group_id,
|
||||
actor_id,
|
||||
[type: Map.get(args, :type), author: Map.get(args, :author)],
|
||||
page,
|
||||
limit
|
||||
)
|
||||
|
||||
elements = Enum.map(elements, &Utils.transform_activity/1)
|
||||
elements = Enum.map(elements, &Utils.transform_activity/1)
|
||||
|
||||
{:ok, %Page{total: total, elements: elements}}
|
||||
else
|
||||
{:member, false} ->
|
||||
{:error, :unauthorized}
|
||||
{:ok, %Page{total: total, elements: elements}}
|
||||
else
|
||||
{:error, :unauthorized}
|
||||
end
|
||||
|
||||
nil ->
|
||||
{:error, :user_actor_not_found}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -311,7 +311,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok, _activity, follow} ->
|
||||
{:ok, follow}
|
||||
|
||||
{:error, err} when is_binary(err) ->
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
@@ -322,7 +322,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok, _activity, follow} ->
|
||||
{:ok, follow}
|
||||
|
||||
{:error, {:error, err}} when is_binary(err) ->
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
@@ -337,10 +337,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok, _activity, follow} ->
|
||||
{:ok, follow}
|
||||
|
||||
{:error, {:error, err}} when is_binary(err) ->
|
||||
{:error, err}
|
||||
|
||||
{:error, err} when is_binary(err) ->
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
@@ -355,10 +352,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
{:ok, _activity, follow} ->
|
||||
{:ok, follow}
|
||||
|
||||
{:error, {:error, err}} when is_binary(err) ->
|
||||
{:error, err}
|
||||
|
||||
{:error, err} when is_binary(err) ->
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
@@ -385,16 +379,18 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do
|
||||
do: Map.put(args, :name, new_instance_name),
|
||||
else: args
|
||||
|
||||
with {:changes, true} <- {:changes, args != %{}},
|
||||
%Actor{} = instance_actor <- Relay.get_actor(),
|
||||
{:ok, _activity, _actor} <- ActivityPub.update(instance_actor, args, true) do
|
||||
:ok
|
||||
else
|
||||
{:changes, false} ->
|
||||
:ok
|
||||
if args != %{} do
|
||||
%Actor{} = instance_actor = Relay.get_actor()
|
||||
|
||||
err ->
|
||||
err
|
||||
case ActivityPub.update(instance_actor, args, true) do
|
||||
{:ok, _activity, _actor} ->
|
||||
:ok
|
||||
|
||||
{:error, _err} ->
|
||||
{:error, :instance_actor_update_failure}
|
||||
end
|
||||
else
|
||||
:ok
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -293,8 +293,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
|
||||
%{context: %{current_user: %User{} = user}} = _resolution
|
||||
) do
|
||||
# See https://github.com/absinthe-graphql/absinthe/issues/490
|
||||
with args <- Map.put(args, :options, args[:options] || %{}),
|
||||
{:ok, %Event{} = event} <- Events.get_event_with_preload(event_id),
|
||||
args = Map.put(args, :options, args[:options] || %{})
|
||||
|
||||
with {:ok, %Event{} = event} <- Events.get_event_with_preload(event_id),
|
||||
%Actor{} = actor <- Users.get_actor_for_user(user),
|
||||
{:ok, args} <- verify_profile_change(args, event, user, actor),
|
||||
{:event_can_be_managed, true} <-
|
||||
@@ -319,7 +320,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
|
||||
{:new_actor, _} ->
|
||||
{:error, dgettext("errors", "You can't attribute this event to this profile.")}
|
||||
|
||||
{:error, _, %Ecto.Changeset{} = error, _} ->
|
||||
{:error, %Ecto.Changeset{} = error} ->
|
||||
{:error, error}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -94,6 +94,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Media do
|
||||
else
|
||||
{:media, nil} -> {:error, :not_found}
|
||||
{:is_owned, _} -> {:error, :unauthorized}
|
||||
{:error, :enofile} -> {:error, "File not found"}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -145,10 +145,10 @@ defmodule Mobilizon.GraphQL.Resolvers.Member do
|
||||
ActivityPub.update(member, %{role: role}, true, %{moderator: moderator}) do
|
||||
{:ok, member}
|
||||
else
|
||||
{:has_rights_to_update_role, {:error, :member_not_found}} ->
|
||||
{:error, :member_not_found} ->
|
||||
{:error, dgettext("errors", "You are not a moderator or admin for this group")}
|
||||
|
||||
{:is_only_admin, true} ->
|
||||
{:error, :only_admin_left} ->
|
||||
{:error,
|
||||
dgettext(
|
||||
"errors",
|
||||
|
||||
@@ -117,7 +117,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Participant do
|
||||
|> Map.put(:actor, actor) do
|
||||
{:ok, participant}
|
||||
else
|
||||
{:maximum_attendee_capacity, _} ->
|
||||
{:error, :maximum_attendee_capacity_reached} ->
|
||||
{:error, dgettext("errors", "The event has already reached its maximum capacity")}
|
||||
|
||||
{:has_event, _} ->
|
||||
@@ -127,11 +127,33 @@ defmodule Mobilizon.GraphQL.Resolvers.Participant do
|
||||
{:error, :event_not_found} ->
|
||||
{:error, dgettext("errors", "Event id not found")}
|
||||
|
||||
{:ok, %Participant{}} ->
|
||||
{:error, :already_participant} ->
|
||||
{:error, dgettext("errors", "You are already a participant of this event")}
|
||||
end
|
||||
end
|
||||
|
||||
@spec check_anonymous_participation(String.t(), String.t()) ::
|
||||
{:ok, Event.t()} | {:error, String.t()}
|
||||
defp check_anonymous_participation(actor_id, event_id) do
|
||||
cond do
|
||||
Config.anonymous_participation?() == false ->
|
||||
{:error, dgettext("errors", "Anonymous participation is not enabled")}
|
||||
|
||||
to_string(Config.anonymous_actor_id()) != actor_id ->
|
||||
{:error, dgettext("errors", "The anonymous actor ID is invalid")}
|
||||
|
||||
true ->
|
||||
case Mobilizon.Events.get_event_with_preload(event_id) do
|
||||
{:ok, %Event{} = event} ->
|
||||
{:ok, event}
|
||||
|
||||
{:error, :event_not_found} ->
|
||||
{:error,
|
||||
dgettext("errors", "Event with this ID %{id} doesn't exist", id: inspect(event_id))}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Leave an event for an anonymous actor
|
||||
"""
|
||||
@@ -141,33 +163,27 @@ defmodule Mobilizon.GraphQL.Resolvers.Participant do
|
||||
_resolution
|
||||
)
|
||||
when not is_nil(token) do
|
||||
with {:anonymous_participation_enabled, true} <-
|
||||
{:anonymous_participation_enabled, Config.anonymous_participation?()},
|
||||
{:anonymous_actor_id, true} <-
|
||||
{:anonymous_actor_id, to_string(Config.anonymous_actor_id()) == actor_id},
|
||||
{:has_event, {:ok, %Event{} = event}} <-
|
||||
{:has_event, Mobilizon.Events.get_event_with_preload(event_id)},
|
||||
%Actor{} = actor <- Actors.get_actor_with_preload(actor_id),
|
||||
{:ok, _activity, %Participant{id: participant_id} = _participant} <-
|
||||
Participations.leave(event, actor, %{local: false, cancellation_token: token}) do
|
||||
{:ok, %{event: %{id: event_id}, actor: %{id: actor_id}, id: participant_id}}
|
||||
else
|
||||
{:has_event, _} ->
|
||||
{:error,
|
||||
dgettext("errors", "Event with this ID %{id} doesn't exist", id: inspect(event_id))}
|
||||
case check_anonymous_participation(actor_id, event_id) do
|
||||
{:ok, %Event{} = event} ->
|
||||
%Actor{} = actor = Actors.get_actor_with_preload!(actor_id)
|
||||
|
||||
{:is_owned, nil} ->
|
||||
{:error, dgettext("errors", "Profile is not owned by authenticated user")}
|
||||
case Participations.leave(event, actor, %{local: false, cancellation_token: token}) do
|
||||
{:ok, _activity, %Participant{id: participant_id} = _participant} ->
|
||||
{:ok, %{event: %{id: event_id}, actor: %{id: actor_id}, id: participant_id}}
|
||||
|
||||
{:only_organizer, true} ->
|
||||
{:error,
|
||||
dgettext(
|
||||
"errors",
|
||||
"You can't leave event because you're the only event creator participant"
|
||||
)}
|
||||
{:error, :is_only_organizer} ->
|
||||
{:error,
|
||||
dgettext(
|
||||
"errors",
|
||||
"You can't leave event because you're the only event creator participant"
|
||||
)}
|
||||
|
||||
{:error, :participant_not_found} ->
|
||||
{:error, dgettext("errors", "Participant not found")}
|
||||
{:error, :participant_not_found} ->
|
||||
{:error, dgettext("errors", "Participant not found")}
|
||||
|
||||
{:error, _err} ->
|
||||
{:error, dgettext("errors", "Failed to leave the event")}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -188,7 +204,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Participant do
|
||||
{:is_owned, nil} ->
|
||||
{:error, dgettext("errors", "Profile is not owned by authenticated user")}
|
||||
|
||||
{:only_organizer, true} ->
|
||||
{:error, :is_only_organizer} ->
|
||||
{:error,
|
||||
dgettext(
|
||||
"errors",
|
||||
|
||||
@@ -31,7 +31,10 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
|
||||
@doc """
|
||||
Return current logged-in user
|
||||
"""
|
||||
def get_current_user(_parent, _args, %{context: %{current_user: %User{} = user}}) do
|
||||
@spec get_current_user(any, map(), Absinthe.Resolution.t()) ::
|
||||
{:error, :unauthenticated} | {:ok, Mobilizon.Users.User.t()}
|
||||
def get_current_user(_parent, _args, %{context: %{current_user: %User{} = user} = context}) do
|
||||
# Logger.error(inspect(context))
|
||||
{:ok, user}
|
||||
end
|
||||
|
||||
@@ -199,7 +202,7 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
|
||||
@doc """
|
||||
Validate an user, get its actor and a token
|
||||
"""
|
||||
@spec validate_user(map(), %{token: String.t()}, map()) :: {:ok, map()}
|
||||
@spec validate_user(map(), %{token: String.t()}, map()) :: {:ok, map()} | {:error, String.t()}
|
||||
def validate_user(_parent, %{token: token}, _resolution) do
|
||||
with {:check_confirmation_token, {:ok, %User{} = user}} <-
|
||||
{:check_confirmation_token, Email.User.check_confirmation_token(token)},
|
||||
|
||||
Reference in New Issue
Block a user