[Adminitration] Allow registrations: 3 modes = "close", "allowed", "moderate" - #877

This commit is contained in:
Laurent GAY
2025-09-03 21:07:33 +02:00
parent 8f8aa0ffbe
commit 3e4899c8e4
28 changed files with 526 additions and 19 deletions

View File

@@ -333,6 +333,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
instancePrivacyPolicyUrl
instanceRules
registrationsOpen
registrationsModeration
}
"""
@@ -365,13 +366,17 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
assert res["data"]["adminSettings"]["registrationsOpen"] ==
Application.get_env(:mobilizon, :instance)[:registrations_open]
assert res["data"]["adminSettings"]["registrationsModeration"] ==
Application.get_env(:mobilizon, :instance)[:registrations_moderation]
end
@instance_name "My Awesome Instance"
test "from DB", %{conn: conn} do
test "from DB 1", %{conn: conn} do
admin = insert(:user, role: :administrator)
insert(:admin_setting, group: "instance", name: "instance_name", value: @instance_name)
insert(:admin_setting, group: "instance", name: "registrations_open", value: "false")
insert(:admin_setting, group: "instance", name: "registrations_moderation", value: "false")
res =
conn
@@ -381,6 +386,43 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
assert res["data"]["adminSettings"]["instanceName"] == @instance_name
assert res["data"]["adminSettings"]["registrationsOpen"] == false
assert res["data"]["adminSettings"]["registrationsModeration"] == false
end
@instance_name "My Awesome Instance"
test "from DB 2", %{conn: conn} do
admin = insert(:user, role: :administrator)
insert(:admin_setting, group: "instance", name: "instance_name", value: @instance_name)
insert(:admin_setting, group: "instance", name: "registrations_open", value: "true")
insert(:admin_setting, group: "instance", name: "registrations_moderation", value: "false")
res =
conn
|> auth_conn(admin)
|> AbsintheHelpers.graphql_query(query: @admin_settings_query)
assert res["data"]["adminSettings"]["instanceName"] == @instance_name
assert res["data"]["adminSettings"]["registrationsOpen"] == true
assert res["data"]["adminSettings"]["registrationsModeration"] == false
end
@instance_name "My Awesome Instance"
test "from DB 3", %{conn: conn} do
admin = insert(:user, role: :administrator)
insert(:admin_setting, group: "instance", name: "instance_name", value: @instance_name)
insert(:admin_setting, group: "instance", name: "registrations_open", value: "true")
insert(:admin_setting, group: "instance", name: "registrations_moderation", value: "true")
res =
conn
|> auth_conn(admin)
|> AbsintheHelpers.graphql_query(query: @admin_settings_query)
assert res["data"]["adminSettings"]["instanceName"] == @instance_name
assert res["data"]["adminSettings"]["registrationsOpen"] == true
assert res["data"]["adminSettings"]["registrationsModeration"] == true
end
test "unless user isn't admin", %{conn: conn} do
@@ -416,6 +458,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
$instancePrivacyPolicyUrl: String
$instanceRules: String
$registrationsOpen: Boolean
$registrationsModeration: Boolean
) {
saveAdminSettings(
instanceName: $instanceName
@@ -430,6 +473,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
instancePrivacyPolicyUrl: $instancePrivacyPolicyUrl
instanceRules: $instanceRules
registrationsOpen: $registrationsOpen
registrationsModeration: $registrationsModeration
) {
...adminSettingsFragment
}
@@ -453,16 +497,24 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
assert res["data"]["adminSettings"]["registrationsOpen"] ==
Application.get_env(:mobilizon, :instance)[:registrations_open]
assert res["data"]["adminSettings"]["registrationsModeration"] ==
Application.get_env(:mobilizon, :instance)[:registrations_moderation]
res =
conn
|> auth_conn(admin)
|> AbsintheHelpers.graphql_query(
query: @update_instance_admin_settings_mutation,
variables: %{"instanceName" => @new_instance_name, "registrationsOpen" => false}
variables: %{
"instanceName" => @new_instance_name,
"registrationsOpen" => false,
"registrationsModeration" => false
}
)
assert res["data"]["saveAdminSettings"]["instanceName"] == @new_instance_name
assert res["data"]["saveAdminSettings"]["registrationsOpen"] == false
assert res["data"]["saveAdminSettings"]["registrationsModeration"] == false
assert %Actor{name: @new_instance_name} = Relay.get_actor()
end
@@ -475,7 +527,11 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
|> auth_conn(user)
|> AbsintheHelpers.graphql_query(
query: @update_instance_admin_settings_mutation,
variables: %{"instanceName" => @new_instance_name, "registrationsOpen" => false}
variables: %{
"instanceName" => @new_instance_name,
"registrationsOpen" => false,
"registrationsModeration" => false
}
)
assert hd(res["errors"])["message"] ==

View File

@@ -11,6 +11,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
Mobilizon.Config.clear_config_cache()
Config.put([:instance, :name], "Test instance")
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], true)
Config.put([:instance, :demo], false)
Config.put([:instance, :duration_of_long_event], 0)
@@ -26,6 +27,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
config {
name,
registrationsOpen
registrationsModeration
anonymous {
participation {
allowed,
@@ -48,6 +50,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
assert res["data"]["config"]["name"] == "Test instance"
assert res["data"]["config"]["registrationsOpen"] == true
assert res["data"]["config"]["registrationsModeration"] == true
assert res["data"]["config"]["anonymous"]["participation"]["validation"]["email"]["enabled"] ==
true
@@ -65,6 +68,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
Mobilizon.Config.clear_config_cache()
Config.put([:instance, :name], "Test instance")
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :demo], false)
Config.put([:instance, :duration_of_long_event], 0)
@@ -80,6 +84,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
config {
name,
registrationsOpen,
registrationsModeration
registrations_allowlist,
contact,
demo_mode,
@@ -102,6 +107,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
assert res["data"]["config"]["name"] == "Test instance"
assert res["data"]["config"]["registrationsOpen"] == true
assert res["data"]["config"]["registrationsModeration"] == false
assert res["data"]["config"]["registrations_allowlist"] == false
assert res["data"]["config"]["contact"] == nil
assert res["data"]["config"]["demo_mode"] == false
@@ -126,6 +132,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
Mobilizon.Config.clear_config_cache()
Config.put([:instance, :name], "My instance")
Config.put([:instance, :registrations_open], false)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :demo], true)
Config.put([:instance, :duration_of_long_event], 30)
Config.put([:instance, :description], "My description")
@@ -136,6 +143,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
config {
name,
registrationsOpen,
registrationsModeration
demo_mode,
long_events,
description,
@@ -150,6 +158,7 @@ defmodule Mobilizon.GraphQL.Resolvers.ConfigTest do
assert res["data"]["config"]["name"] == "My instance"
assert res["data"]["config"]["registrationsOpen"] == false
assert res["data"]["config"]["registrationsModeration"] == false
assert res["data"]["config"]["demo_mode"] == true
assert res["data"]["config"]["long_events"] == true
assert res["data"]["config"]["description"] == "My description"

View File

@@ -406,6 +406,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
test "create_user/3 doesn't allow registration when registration is closed", %{conn: conn} do
Config.put([:instance, :registrations_open], false)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], [])
res =
@@ -417,12 +418,14 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
assert hd(res["errors"])["message"] == "Registrations are not open"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
end
test "create_user/3 doesn't allow registration when user email is not on the allowlist", %{
conn: conn
} do
Config.put([:instance, :registrations_open], false)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], ["random.org"])
res =
@@ -434,6 +437,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
assert hd(res["errors"])["message"] == "Your email is not on the allowlist"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], [])
end
@@ -441,6 +445,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
conn: conn
} do
Config.put([:instance, :registrations_open], false)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], ["demo.tld"])
res =
@@ -453,11 +458,13 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
refute res["errors"]
assert res["data"]["createUser"]["email"] == @user_creation.email
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], [])
end
test "create_user/3 allows registration when user email is on the allowlist", %{conn: conn} do
Config.put([:instance, :registrations_open], false)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], [@user_creation.email])
res =
@@ -470,6 +477,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
refute res["errors"]
assert res["data"]["createUser"]["email"] == @user_creation.email
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_allowlist], [])
end
@@ -489,6 +497,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
"Your e-mail has been denied registration or uses a disallowed e-mail provider"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], [])
end
@@ -508,6 +517,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
"Your e-mail has been denied registration or uses a disallowed e-mail provider"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], [])
end
@@ -528,6 +538,7 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
"Your e-mail has been denied registration or uses a disallowed e-mail provider"
Config.put([:instance, :registrations_open], true)
Config.put([:instance, :registrations_moderation], false)
Config.put([:instance, :registration_email_denylist], [])
end

View File

@@ -42,6 +42,7 @@ defmodule Mobilizon.Web.NodeInfoControllerTest do
"nodeDescription" => Config.instance_description()
},
"openRegistrations" => Config.instance_registrations_open?(),
"moderationRegistrations" => Config.instance_registrations_moderation?(),
"protocols" => ["activitypub"],
"services" => %{"inbound" => [], "outbound" => ["atom1.0"]},
"software" => %{