Some fixes
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
d58ca5743d
commit
62af1e72d6
|
@ -18,7 +18,14 @@
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["src/*"]
|
"@/*": ["src/*"]
|
||||||
},
|
},
|
||||||
"lib": ["esnext", "dom", "es2017.intl", "dom.iterable", "scripthost", "webworker"]
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"dom",
|
||||||
|
"es2017.intl",
|
||||||
|
"dom.iterable",
|
||||||
|
"scripthost",
|
||||||
|
"webworker"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src/**/*.ts",
|
"src/**/*.ts",
|
||||||
|
|
|
@ -266,15 +266,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
|
||||||
%{organizer_actor_id: organizer_actor_id} = args,
|
%{organizer_actor_id: organizer_actor_id} = args,
|
||||||
%{context: %{current_user: %User{} = user}} = _resolution
|
%{context: %{current_user: %User{} = user}} = _resolution
|
||||||
) do
|
) do
|
||||||
if Config.only_groups_can_create_events?() and Map.get(args, :attributed_to_id) == nil do
|
case User.owns_actor(user, organizer_actor_id) do
|
||||||
{:error,
|
{:is_owned, %Actor{} = organizer_actor} ->
|
||||||
dgettext(
|
if can_create_event?(args) do
|
||||||
"errors",
|
|
||||||
"Only groups can create events"
|
|
||||||
)}
|
|
||||||
else
|
|
||||||
case User.owns_actor(user, organizer_actor_id) do
|
|
||||||
{:is_owned, %Actor{} = organizer_actor} ->
|
|
||||||
if is_organizer_group_member?(args) do
|
if is_organizer_group_member?(args) do
|
||||||
args_with_organizer =
|
args_with_organizer =
|
||||||
args |> Map.put(:organizer_actor, organizer_actor) |> extract_timezone(user.id)
|
args |> Map.put(:organizer_actor, organizer_actor) |> extract_timezone(user.id)
|
||||||
|
@ -302,10 +296,16 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
|
||||||
"Organizer profile doesn't have permission to create an event on behalf of this group"
|
"Organizer profile doesn't have permission to create an event on behalf of this group"
|
||||||
)}
|
)}
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
{:error,
|
||||||
|
dgettext(
|
||||||
|
"errors",
|
||||||
|
"Only groups can create events"
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
|
||||||
{:is_owned, nil} ->
|
{:is_owned, nil} ->
|
||||||
{:error, dgettext("errors", "Organizer profile is not owned by the user")}
|
{:error, dgettext("errors", "Organizer profile is not owned by the user")}
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -313,6 +313,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
|
||||||
{:error, dgettext("errors", "You need to be logged-in to create events")}
|
{:error, dgettext("errors", "You need to be logged-in to create events")}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec can_create_event?(map()) :: boolean()
|
||||||
|
defp can_create_event?(args) do
|
||||||
|
if Config.only_groups_can_create_events?() do
|
||||||
|
Map.get(args, :attributed_to_id) != nil
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Update an event
|
Update an event
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -10,7 +10,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
|
||||||
alias Mobilizon.Federation.ActivityPub.Actions
|
alias Mobilizon.Federation.ActivityPub.Actions
|
||||||
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
|
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
|
||||||
alias Mobilizon.GraphQL.API
|
alias Mobilizon.GraphQL.API
|
||||||
alias Mobilizon.Users.User
|
alias Mobilizon.Users.{User, UserRole}
|
||||||
alias Mobilizon.Web.Upload
|
alias Mobilizon.Web.Upload
|
||||||
import Mobilizon.Web.Gettext
|
import Mobilizon.Web.Gettext
|
||||||
|
|
||||||
|
@ -143,14 +143,14 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
) do
|
) do
|
||||||
if Config.only_admin_can_create_groups?() and not is_admin(role) do
|
if can_create_group?(role) do
|
||||||
{:error, "only admins can create groups"}
|
args =
|
||||||
else
|
args
|
||||||
with args when is_map(args) <-
|
|> Map.update(:preferred_username, "", &String.downcase/1)
|
||||||
Map.update(args, :preferred_username, "", &String.downcase/1),
|
|> Map.put(:creator_actor, creator_actor)
|
||||||
args when is_map(args) <- Map.put(args, :creator_actor, creator_actor),
|
|> Map.put(:creator_actor_id, creator_actor_id)
|
||||||
args when is_map(args) <- Map.put(args, :creator_actor_id, creator_actor_id),
|
|
||||||
{:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)},
|
with {:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)},
|
||||||
{:ok, _activity, %Actor{type: :Group} = group} <-
|
{:ok, _activity, %Actor{type: :Group} = group} <-
|
||||||
API.Groups.create_group(args) do
|
API.Groups.create_group(args) do
|
||||||
{:ok, group}
|
{:ok, group}
|
||||||
|
@ -161,6 +161,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
|
||||||
{:error, err} when is_binary(err) ->
|
{:error, err} when is_binary(err) ->
|
||||||
{:error, err}
|
{:error, err}
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
{:error, dgettext("errors", "Only admins can create groups")}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -168,6 +170,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do
|
||||||
{:error, "You need to be logged-in to create a group"}
|
{:error, "You need to be logged-in to create a group"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec can_create_group?(UserRole.t()) :: boolean()
|
||||||
|
defp can_create_group?(role) do
|
||||||
|
if Config.only_admin_can_create_groups?() do
|
||||||
|
is_admin(role)
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Update a group. The creator is automatically added as admin
|
Update a group. The creator is automatically added as admin
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -60,7 +60,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do
|
||||||
locale
|
locale
|
||||||
) do
|
) do
|
||||||
language = build_language(language, locale)
|
language = build_language(language, locale)
|
||||||
begins_on = build_begins_on(begins_on, timezone, language)
|
begins_on = build_begins_on(begins_on, timezone)
|
||||||
|
|
||||||
begins_on
|
begins_on
|
||||||
|> datetime_to_string(language)
|
|> datetime_to_string(language)
|
||||||
|
@ -74,8 +74,8 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do
|
||||||
@spec build_language(String.t() | nil, String.t()) :: String.t()
|
@spec build_language(String.t() | nil, String.t()) :: String.t()
|
||||||
defp build_language(language, locale), do: language || locale
|
defp build_language(language, locale), do: language || locale
|
||||||
|
|
||||||
@spec build_begins_on(DateTime.t(), String.t() | nil, String.t()) :: DateTime.t()
|
@spec build_begins_on(DateTime.t(), String.t() | nil) :: DateTime.t()
|
||||||
defp build_begins_on(begins_on, timezone, language) do
|
defp build_begins_on(begins_on, timezone) do
|
||||||
if timezone do
|
if timezone do
|
||||||
case DateTime.shift_zone(begins_on, timezone) do
|
case DateTime.shift_zone(begins_on, timezone) do
|
||||||
{:ok, begins_on} -> begins_on
|
{:ok, begins_on} -> begins_on
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
"extends": "./js/tsconfig.json"
|
"extends": "./js/tsconfig.json"
|
||||||
}
|
}
|
Loading…
Reference in a new issue