feat(back): add admin setting to disable external event feature

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2023-09-01 18:16:06 +02:00
parent af670f3947
commit f6611e8eb5
No known key found for this signature in database
GPG key ID: A061B9DDE0CA0773
8 changed files with 48 additions and 2 deletions

View file

@ -41,7 +41,10 @@ config :mobilizon, :instance,
email_reply_to: "noreply@localhost"
config :mobilizon, :groups, enabled: true
config :mobilizon, :events, creation: true
config :mobilizon, :events,
creation: true,
external: true
config :mobilizon, :restrictions, only_admin_can_create_groups: false
config :mobilizon, :restrictions, only_groups_can_create_events: false

View file

@ -72,6 +72,7 @@ export const CONFIG = gql`
features {
groups
eventCreation
eventExternal
antispam
}
restrictions {
@ -370,6 +371,7 @@ export const FEATURES = gql`
features {
groups
eventCreation
eventExternal
antispam
}
}

View file

@ -96,6 +96,7 @@ export interface IConfig {
timezones: string[];
features: {
eventCreation: boolean;
eventExternal: boolean;
groups: boolean;
antispam: boolean;
};

View file

@ -246,7 +246,10 @@
</o-radio>
</div>-->
<o-field :label="t('External registration')">
<o-field
:label="t('External registration')"
v-if="features?.eventExternal"
>
<o-switch v-model="externalParticipation">
{{
t("I want to manage the registration with an external provider")
@ -260,6 +263,7 @@
type="url"
v-model="event.externalParticipationUrl"
:placeholder="t('External provider URL')"
required
/>
</o-field>

View file

@ -145,6 +145,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Config do
features: %{
groups: Config.instance_group_feature_enabled?(),
event_creation: Config.instance_event_creation_enabled?(),
event_external: Config.instance_event_external_enabled?(),
antispam: AntiSpam.service().ready?()
},
restrictions: %{

View file

@ -254,6 +254,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
with {:is_owned, %Actor{} = organizer_actor} <- User.owns_actor(user, organizer_actor_id),
{:can_create_event, true} <- can_create_event(args),
{:event_external, true} <- edit_event_external_checker(args),
{:organizer_group_member, true} <-
{:organizer_group_member, is_organizer_group_member?(args)},
args_with_organizer <-
@ -281,6 +282,13 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
"Only groups can create events"
)}
{:event_external, false} ->
{:error,
dgettext(
"errors",
"Providing external registration is not allowed"
)}
{:organizer_group_member, false} ->
{:error,
dgettext(
@ -322,6 +330,17 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
end
end
@spec edit_event_external_checker(map()) :: {:event_external, boolean()}
defp edit_event_external_checker(args) do
if Config.instance_event_external_enabled?() do
{:event_external, true}
else
{:event_external,
Map.get(args, :join_options) != :external and
is_nil(Map.get(args, :external_participation_url))}
end
end
@doc """
Update an event
"""
@ -340,6 +359,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
args <- extract_timezone(args, user.id),
{:event_can_be_managed, true} <-
{:event_can_be_managed, can_event_be_updated_by?(event, actor)},
{:event_external, true} <- edit_event_external_checker(args),
{:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <-
API.Events.update_event(args, event) do
{:ok, event}
@ -351,6 +371,13 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do
"This profile doesn't have permission to update an event on behalf of this group"
)}
{:event_external, false} ->
{:error,
dgettext(
"errors",
"Providing external registration is not allowed"
)}
{:error, :event_not_found} ->
{:error, dgettext("errors", "Event not found")}

View file

@ -314,6 +314,10 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
description: "Whether event creation is allowed on this instance"
)
field(:event_external, :boolean,
description: "Whether redirecting to external providers is authorized in event edition"
)
field(:antispam, :boolean, description: "Whether anti-spam is activated on this instance")
end

View file

@ -357,6 +357,10 @@ defmodule Mobilizon.Config do
def instance_event_creation_enabled?,
do: :mobilizon |> Application.get_env(:events) |> Keyword.get(:creation)
@spec instance_event_external_enabled? :: boolean
def instance_event_external_enabled?,
do: :mobilizon |> Application.get_env(:events) |> Keyword.get(:external)
@spec instance_export_formats :: %{event_participants: list(String.t())}
def instance_export_formats do
%{