diff options
Diffstat (limited to 'lib/api/invitations.rb')
-rw-r--r-- | lib/api/invitations.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/api/invitations.rb b/lib/api/invitations.rb index 2ab1f97afe6..52c32b4d1cf 100644 --- a/lib/api/invitations.rb +++ b/lib/api/invitations.rb @@ -49,6 +49,39 @@ module API present_member_invitations invitations end + desc 'Updates a group or project invitation.' do + success Entities::Member + end + params do + requires :email, type: String, desc: 'The email address of the invitation.' + optional :access_level, type: Integer, values: Gitlab::Access.all_values, desc: 'A valid access level (defaults: `30`, developer access level).' + optional :expires_at, type: DateTime, desc: 'Date string in ISO 8601 format (`YYYY-MM-DDTHH:MM:SSZ`).' + end + put ":id/invitations/:email", requirements: { email: /[^\/]+/ } do + source = find_source(source_type, params.delete(:id)) + invite_email = params[:email] + authorize_admin_source!(source_type, source) + + invite = retrieve_member_invitations(source, invite_email).first + not_found! unless invite + + update_params = declared_params(include_missing: false) + update_params.delete(:email) + bad_request! unless update_params.any? + + result = ::Members::UpdateService + .new(current_user, update_params) + .execute(invite) + + updated_member = result[:member] + + if result[:status] == :success + present_members updated_member + else + render_validation_error!(updated_member) + end + end + desc 'Removes an invitation from a group or project.' params do requires :email, type: String, desc: 'The email address of the invitation' |