diff --git a/ee/config/audit_events/types/release_created.yml b/ee/config/audit_events/types/release_created.yml new file mode 100644 index 0000000000000000000000000000000000000000..61e7b28eee70d0d7ea5b5fe4d795e43a67865f03 --- /dev/null +++ b/ee/config/audit_events/types/release_created.yml @@ -0,0 +1,9 @@ +--- +name: release_created +description: Event triggered when a release is created +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/374111 +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/111080 +feature_category: compliance_management +milestone: '15.9' +saved_to_database: true +streamed: true diff --git a/ee/config/audit_events/types/release_deleted_audit_event.yml b/ee/config/audit_events/types/release_deleted_audit_event.yml new file mode 100644 index 0000000000000000000000000000000000000000..63c31918da44ce38775bf9fa8fe26e35eea309df --- /dev/null +++ b/ee/config/audit_events/types/release_deleted_audit_event.yml @@ -0,0 +1,9 @@ +--- +name: release_deleted_audit_event +description: Event triggered when a release is deleted +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/374111 +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/111080 +feature_category: compliance_management +milestone: '15.9' +saved_to_database: true +streamed: true diff --git a/ee/config/audit_events/types/release_milestones_updated.yml b/ee/config/audit_events/types/release_milestones_updated.yml new file mode 100644 index 0000000000000000000000000000000000000000..37067f10bc4fa9d505c9e4783957bd95a7ec1930 --- /dev/null +++ b/ee/config/audit_events/types/release_milestones_updated.yml @@ -0,0 +1,9 @@ +--- +name: release_milestones_updated +description: Event triggered when a release's associated milestones are updated +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/374111 +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/111080 +feature_category: compliance_management +milestone: '15.9' +saved_to_database: true +streamed: true diff --git a/ee/config/audit_events/types/release_updated.yml b/ee/config/audit_events/types/release_updated.yml new file mode 100644 index 0000000000000000000000000000000000000000..79968dd3ee711a9217e4f7e227945caa61c31d96 --- /dev/null +++ b/ee/config/audit_events/types/release_updated.yml @@ -0,0 +1,9 @@ +--- +name: release_updated +description: Event triggered when a release is updated +introduced_by_issue: https://gitlab.com/gitlab-org/gitlab/-/issues/374111 +introduced_by_mr: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/111080 +feature_category: compliance_management +milestone: '15.9' +saved_to_database: true +streamed: true diff --git a/ee/lib/ee/api/releases.rb b/ee/lib/ee/api/releases.rb index 8485d6795ea9dc2c7386930c81c8f1d815f5b4ff..25f4421c3196d81712a79d2c964be65035ca4542 100644 --- a/ee/lib/ee/api/releases.rb +++ b/ee/lib/ee/api/releases.rb @@ -40,28 +40,45 @@ module Releases override :log_release_created_audit_event def log_release_created_audit_event(release) - ::AuditEvents::ReleaseCreatedAuditEventService.new( - current_user, - user_project, - request.ip, - release - ).security_event + message = "Created Release #{release.tag}" + if release.milestones.count > 0 + message += " with #{'Milestone'.pluralize(release.milestones.count)} " + + release.milestone_titles + end + + audit_context = { + name: 'release_created', + ip_address: request.ip, + author: current_user, + target: release, + scope: user_project, + message: message, + target_details: release.name + } + + ::Gitlab::Audit::Auditor.audit(audit_context) end override :log_release_updated_audit_event def log_release_updated_audit_event - ::AuditEvents::ReleaseUpdatedAuditEventService.new( - current_user, - user_project, - request.ip, - release - ).security_event + audit_context = { + name: 'release_updated', + ip_address: request.ip, + author: current_user, + target: release, + scope: user_project, + message: "Updated Release #{release.tag}", + target_details: release.name + } + + ::Gitlab::Audit::Auditor.audit(audit_context) end override :log_release_deleted_audit_event def log_release_deleted_audit_event audit_context = { name: 'release_deleted_audit_event', + ip_address: request.ip, author: current_user, target: release, scope: user_project, @@ -74,12 +91,19 @@ def log_release_deleted_audit_event override :log_release_milestones_updated_audit_event def log_release_milestones_updated_audit_event - ::AuditEvents::ReleaseAssociateMilestoneAuditEventService.new( - current_user, - user_project, - request.ip, - release - ).security_event + milestones = release.milestone_titles.presence || '[none]' + + audit_context = { + name: 'release_milestones_updated', + ip_address: request.ip, + author: current_user, + target: release, + scope: user_project, + message: "Milestones associated with release changed to #{milestones}", + target_details: release.name + } + + ::Gitlab::Audit::Auditor.audit(audit_context) end override :authorize_create_evidence! diff --git a/ee/spec/requests/api/releases_spec.rb b/ee/spec/requests/api/releases_spec.rb index dec7428922c69d22bd6616f231ca806390c684ef..75033e99c959d9131318ec9c873200154eb68a97 100644 --- a/ee/spec/requests/api/releases_spec.rb +++ b/ee/spec/requests/api/releases_spec.rb @@ -40,10 +40,12 @@ release = project.releases.last - expect(subject[:custom_message]).to eq("Created Release #{release.tag}") - expect(subject[:target_type]).to eq('Release') - expect(subject[:target_id]).to eq(release.id) - expect(subject[:target_details]).to eq(release.name) + expect(subject).to include({ + custom_message: "Created Release #{release.tag}", + target_type: "Release", + target_id: release.id, + target_details: release.name + }) end context 'with milestone' do @@ -56,10 +58,12 @@ release = project.releases.last - expect(subject[:custom_message]).to eq("Created Release v0.1 with Milestone v1.0") - expect(subject[:target_type]).to eq('Release') - expect(subject[:target_id]).to eq(release.id) - expect(subject[:target_details]).to eq(release.name) + expect(subject).to include({ + custom_message: "Created Release #{release.tag} with Milestone #{milestone.title}", + target_type: "Release", + target_id: release.id, + target_details: release.name + }) end end end @@ -343,7 +347,14 @@ delete api("/projects/#{project.id}/releases/v0.1", maintainer) end.to change { AuditEvent.count }.by(1) - expect(AuditEvent.last.details[:custom_message]).to eq("Deleted release #{release.tag}") + expect(AuditEvent.last.details).to include({ + author_name: maintainer.name, + author_class: "User", + target_id: release.id, + target_type: "Release", + target_details: release.name, + custom_message: "Deleted release #{release.tag}" + }) end end end