From 5e1dbb48882fb8da1e942762c5a2fa5e62852733 Mon Sep 17 00:00:00 2001
From: Ali Hadi Mazeh <91922430+alihadimazeh@users.noreply.github.com>
Date: Thu, 19 Dec 2024 15:58:49 -0500
Subject: [PATCH] Changes to Allowed Domains (#5979)
* Changes to Allowed Domains
- improved error displays on front end when a user with a not allowed
domain signs up for both local and external
- added corresponding tests
* rubocop fixes
---
.rubocop.yml | 6 +++---
app/controllers/api/v1/users_controller.rb | 6 +++---
app/controllers/external_controller.rb | 5 +++--
.../admin/site_settings/registration/Registration.jsx | 1 +
app/javascript/components/home/HomePage.jsx | 3 +++
app/javascript/hooks/mutations/users/useCreateUser.jsx | 2 ++
spec/controllers/external_controller_spec.rb | 9 +++++++++
7 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/.rubocop.yml b/.rubocop.yml
index 0d6f51b2a6..fb29a1ecae 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -73,7 +73,7 @@ Metrics/ClassLength:
# A calculated magnitude based on number of assignments,
# branches, and conditions.
Metrics/AbcSize:
- Max: 90
+ Max: 95
Metrics/ParameterLists:
CountKeywordArgs: false
@@ -82,10 +82,10 @@ RSpec/AnyInstance:
Enabled: false
Metrics/CyclomaticComplexity:
- Max: 20
+ Max: 25
Metrics/PerceivedComplexity:
- Max: 20
+ Max: 25
Rails/Exit:
Exclude:
diff --git a/app/controllers/api/v1/users_controller.rb b/app/controllers/api/v1/users_controller.rb
index 09c860e4ed..15ad2f57c4 100644
--- a/app/controllers/api/v1/users_controller.rb
+++ b/app/controllers/api/v1/users_controller.rb
@@ -35,7 +35,7 @@ def show
render_data data: user, status: :ok
end
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
+ # rubocop:disable Metrics/AbcSize
# POST /api/v1/users.json
# Creates and saves a new user record in the database with the provided parameters
def create
@@ -62,7 +62,7 @@ def create
create_user_params[:language] = current_user&.language || I18n.default_locale if create_user_params[:language].blank?
# renders an error if the user is signing up with an invalid domain based off site settings
- return render_error errors: Rails.configuration.custom_error_msgs[:unauthorized], status: :forbidden unless valid_domain?
+ return render_error errors: Rails.configuration.custom_error_msgs[:banned_user], status: :forbidden unless valid_domain?
user = UserCreator.new(user_params: create_user_params.except(:invite_token), provider: current_provider, role: default_role).call
@@ -97,7 +97,7 @@ def create
render_error errors: Rails.configuration.custom_error_msgs[:record_invalid], status: :bad_request
end
end
- # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
+ # rubocop:enable Metrics/AbcSize
# PATCH /api/v1/users/:id.json
# Updates the values of a user
diff --git a/app/controllers/external_controller.rb b/app/controllers/external_controller.rb
index 8b512663b1..d552dae03a 100644
--- a/app/controllers/external_controller.rb
+++ b/app/controllers/external_controller.rb
@@ -48,9 +48,10 @@ def create_user
return redirect_to root_path(error: Rails.configuration.custom_error_msgs[:invite_token_invalid])
end
- return render_error status: :forbidden unless valid_domain?(user_info[:email])
+ # Redirect to root if the user doesn't exist and has an invalid domain
+ return redirect_to root_path(error: Rails.configuration.custom_error_msgs[:banned_user]) if new_user && !valid_domain?(user_info[:email])
- # Create the user if they dont exist
+ # Create the user if they don't exist
if new_user
user = UserCreator.new(user_params: user_info, provider: current_provider, role: default_role).call
user.save!
diff --git a/app/javascript/components/admin/site_settings/registration/Registration.jsx b/app/javascript/components/admin/site_settings/registration/Registration.jsx
index 7d9029666f..764e5b00f5 100644
--- a/app/javascript/components/admin/site_settings/registration/Registration.jsx
+++ b/app/javascript/components/admin/site_settings/registration/Registration.jsx
@@ -108,6 +108,7 @@ export default function Registration() {