diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-17 21:09:52 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-17 21:09:52 +0300 |
commit | 003efb27fc4d7d0571979553c602fccfbf5ad0c2 (patch) | |
tree | 721ec9af57108c73fc5c4c7a06e996800ead367e /lib | |
parent | 78a5f872de316860ccd7a983c10805bf6c6b771c (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/helpers/members_helpers.rb | 28 | ||||
-rw-r--r-- | lib/api/members.rb | 2 |
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) |