Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2024-01-17 21:09:52 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2024-01-17 21:09:52 +0300
commit003efb27fc4d7d0571979553c602fccfbf5ad0c2 (patch)
tree721ec9af57108c73fc5c4c7a06e996800ead367e /lib
parent78a5f872de316860ccd7a983c10805bf6c6b771c (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/api/helpers/members_helpers.rb28
-rw-r--r--lib/api/members.rb2
2 files changed, 19 insertions, 11 deletions
diff --git a/lib/api/helpers/members_helpers.rb b/lib/api/helpers/members_helpers.rb
index 1a23dcd0d3c..6d1cd9d8cd9 100644
--- a/lib/api/helpers/members_helpers.rb
+++ b/lib/api/helpers/members_helpers.rb
@@ -85,20 +85,30 @@ module API
user_id = create_service_params[:user_id]
user = User.find_by(id: user_id) # rubocop: disable CodeReuse/ActiveRecord
- if user
- conflict!('Member already exists') if member_already_exists?(source, user_id)
+ not_found!('User') unless user
- instance = ::Members::CreateService.new(current_user, create_service_params)
- instance.execute
+ conflict!('Member already exists') if member_already_exists?(source, user_id)
- not_allowed! if instance.membership_locked # This currently can only be reached in EE if group membership is locked
+ instance = ::Members::CreateService.new(current_user, create_service_params)
+ result = instance.execute
- member = instance.single_member
- render_validation_error!(member) if member.invalid?
+ # This currently can only be reached in EE if group membership is locked
+ not_allowed! if instance.membership_locked
- present_members(member)
+ if result[:status] == :error && result[:http_status] == :unauthorized
+ raise Gitlab::Access::AccessDeniedError
+ end
+
+ # prefer responding with model validations, if present
+ member = instance.single_member
+ render_validation_error!(member) if member.invalid?
+
+ # if errors occurred besides model validations or authorization failures,
+ # render those appropriately
+ if result[:status] == :error
+ render_structured_api_error!(result, :bad_request)
else
- not_found!('User')
+ present_members(member)
end
end
diff --git a/lib/api/members.rb b/lib/api/members.rb
index 908733d4aa1..e4bd29640cd 100644
--- a/lib/api/members.rb
+++ b/lib/api/members.rb
@@ -119,8 +119,6 @@ module API
post ":id/members", feature_category: feature_category do
source = find_source(source_type, params[:id])
- authorize_admin_source_member!(source_type, source)
-
create_service_params = params.merge(source: source)
if add_multiple_members?(params[:user_id].to_s)