Skip to content

Commit 6db48d2

Browse files
committed
Add organization / space quota audit events
1 parent 8150e76 commit 6db48d2

25 files changed

+656
-39
lines changed

app/actions/organization_quota_apply.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
require 'repositories/organization_quota_event_repository'
2+
13
module VCAP::CloudController
24
class OrganizationQuotaApply
35
class Error < ::StandardError
46
end
57

8+
def initialize(user_audit_info)
9+
@user_audit_info = user_audit_info
10+
end
11+
612
def apply(org_quota, message)
713
orgs = valid_orgs(message.organization_guids)
814

@@ -18,7 +24,10 @@ def apply(org_quota, message)
1824
end
1925

2026
QuotaDefinition.db.transaction do
21-
orgs.each { |org| org_quota.add_organization(org) }
27+
orgs.each do |org|
28+
org_quota.add_organization(org)
29+
Repositories::OrganizationQuotaEventRepository.new.record_organization_quota_apply(org_quota, org, @user_audit_info)
30+
end
2231
end
2332
rescue Sequel::ValidationFailed => e
2433
error!(e.message)

app/actions/organization_quota_delete.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
require 'repositories/organization_quota_event_repository'
2+
13
module VCAP::CloudController
24
class OrganizationQuotaDeleteAction
5+
def initialize(user_audit_info)
6+
@user_audit_info = user_audit_info
7+
end
8+
39
def delete(organization_quotas)
410
organization_quotas.each do |org_quota|
511
QuotaDefinition.db.transaction do
12+
Repositories::OrganizationQuotaEventRepository.new.record_organization_quota_delete(org_quota, @user_audit_info)
613
org_quota.destroy
714
end
815
end

app/actions/organization_quotas_create.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
require 'repositories/organization_quota_event_repository'
2+
13
module VCAP::CloudController
24
class OrganizationQuotasCreate
35
class Error < ::StandardError
46
end
57

8+
def initialize(user_audit_info)
9+
@user_audit_info = user_audit_info
10+
end
11+
612
# rubocop:todo Metrics/CyclomaticComplexity
713
def create(message)
814
org_quota = nil
@@ -33,6 +39,8 @@ def create(message)
3339

3440
orgs = valid_orgs(message.organization_guids)
3541
orgs.each { |org| org_quota.add_organization(org) }
42+
43+
Repositories::OrganizationQuotaEventRepository.new.record_organization_quota_create(org_quota, @user_audit_info, message.audit_hash)
3644
end
3745
org_quota
3846
rescue Sequel::ValidationFailed => e

app/actions/organization_quotas_update.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'repositories/organization_quota_event_repository'
2+
13
module VCAP::CloudController
24
class OrganizationQuotasUpdate
35
class Error < ::StandardError
@@ -6,7 +8,7 @@ class Error < ::StandardError
68
MAX_ORGS_TO_LIST_ON_FAILURE = 2
79

810
# rubocop:disable Metrics/CyclomaticComplexity
9-
def self.update(quota, message)
11+
def self.update(quota, message, user_audit_info)
1012
if log_rate_limit(message) != QuotaDefinition::UNLIMITED
1113
orgs = orgs_with_unlimited_processes(quota)
1214
unlimited_processes_exist_error!(orgs) if orgs.any?
@@ -33,6 +35,8 @@ def self.update(quota, message)
3335
quota.total_private_domains = total_private_domains(message) if message.domains_limits_message.requested? :total_domains
3436

3537
quota.save
38+
39+
Repositories::OrganizationQuotaEventRepository.new.record_organization_quota_update(quota, user_audit_info, message.audit_hash)
3640
end
3741
# rubocop:enable Metrics/CyclomaticComplexity
3842

app/actions/space_quota_apply.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
require 'repositories/space_quota_event_repository'
2+
13
module VCAP::CloudController
24
class SpaceQuotaApply
35
class Error < ::StandardError
46
end
57

8+
def initialize(user_audit_info)
9+
@user_audit_info = user_audit_info
10+
end
11+
612
def apply(space_quota, message, visible_space_guids: [], all_spaces_visible: false)
713
spaces = valid_spaces(message.space_guids, visible_space_guids, all_spaces_visible, space_quota.organization_id)
814

@@ -17,7 +23,10 @@ def apply(space_quota, message, visible_space_guids: [], all_spaces_visible: fal
1723
end
1824

1925
SpaceQuotaDefinition.db.transaction do
20-
spaces.each { |space| space_quota.add_space(space) }
26+
spaces.each do |space|
27+
space_quota.add_space(space)
28+
Repositories::SpaceQuotaEventRepository.new.record_space_quota_apply(space_quota, space, @user_audit_info)
29+
end
2130
end
2231
rescue Sequel::ValidationFailed => e
2332
error!(e.message)

app/actions/space_quota_delete.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
require 'repositories/space_quota_event_repository'
2+
13
module VCAP::CloudController
24
class SpaceQuotaDeleteAction
5+
def initialize(user_audit_info)
6+
@user_audit_info = user_audit_info
7+
end
8+
39
def delete(space_quotas)
410
space_quotas.each do |space_quota|
511
SpaceQuotaDefinition.db.transaction do
12+
Repositories::SpaceQuotaEventRepository.new.record_space_quota_delete(space_quota, @user_audit_info)
613
space_quota.destroy
714
end
815
end

app/actions/space_quota_unapply.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1+
require 'repositories/space_quota_event_repository'
2+
13
module VCAP::CloudController
24
class SpaceQuotaUnapply
35
class Error < ::StandardError
46
end
57

6-
def self.unapply(space_quota, space)
8+
def initialize(user_audit_info)
9+
@user_audit_info = user_audit_info
10+
end
11+
12+
def unapply(space_quota, space)
713
SpaceQuotaDefinition.db.transaction do
814
space_quota.remove_space(space)
15+
Repositories::SpaceQuotaEventRepository.new.record_space_quota_remove(space_quota, space, @user_audit_info)
916
end
1017
rescue Sequel::ValidationFailed => e
1118
raise Error.new(e.message)

app/actions/space_quota_update.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'repositories/space_quota_event_repository'
2+
13
module VCAP::CloudController
24
class SpaceQuotaUpdate
35
class Error < ::StandardError
@@ -6,7 +8,7 @@ class Error < ::StandardError
68
MAX_SPACES_TO_LIST_ON_FAILURE = 2
79

810
# rubocop:disable Metrics/CyclomaticComplexity
9-
def self.update(quota, message)
11+
def self.update(quota, message, user_audit_info)
1012
if log_rate_limit(message) != QuotaDefinition::UNLIMITED
1113
spaces = spaces_with_unlimited_processes(quota)
1214
unlimited_processes_exist_error!(spaces) if spaces.any?
@@ -31,6 +33,8 @@ def self.update(quota, message)
3133
quota.total_routes = total_routes(message) if message.routes_limits_message.requested? :total_routes
3234

3335
quota.save
36+
37+
Repositories::SpaceQuotaEventRepository.new.record_space_quota_update(quota, user_audit_info, message.audit_hash)
3438
end
3539

3640
quota

app/actions/space_quotas_create.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
require 'repositories/space_quota_event_repository'
2+
13
module VCAP::CloudController
24
class SpaceQuotasCreate
35
class Error < ::StandardError
46
end
57

8+
def initialize(user_audit_info)
9+
@user_audit_info = user_audit_info
10+
end
11+
612
# rubocop:todo Metrics/CyclomaticComplexity
713
def create(message, organization:)
814
space_quota = nil
@@ -31,6 +37,8 @@ def create(message, organization:)
3137

3238
spaces = valid_spaces(message.space_guids, organization)
3339
spaces.each { |space| space_quota.add_space(space) }
40+
41+
Repositories::SpaceQuotaEventRepository.new.record_space_quota_create(space_quota, @user_audit_info, message.audit_hash)
3442
end
3543

3644
space_quota

app/controllers/v3/organization_quotas_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def create
4444
message = VCAP::CloudController::OrganizationQuotasCreateMessage.new(hashed_params[:body])
4545
unprocessable!(message.errors.full_messages) unless message.valid?
4646

47-
organization_quota = OrganizationQuotasCreate.new.create(message)
47+
organization_quota = OrganizationQuotasCreate.new(user_audit_info).create(message)
4848

4949
render json: Presenters::V3::OrganizationQuotaPresenter.new(organization_quota, **presenter_args), status: :created
5050
rescue OrganizationQuotasCreate::Error => e
@@ -60,7 +60,7 @@ def update
6060
organization_quota = QuotaDefinition.first(guid: hashed_params[:guid])
6161
resource_not_found!(:organization_quota) unless organization_quota
6262

63-
organization_quota = OrganizationQuotasUpdate.update(organization_quota, message)
63+
organization_quota = OrganizationQuotasUpdate.update(organization_quota, message, user_audit_info)
6464

6565
render json: Presenters::V3::OrganizationQuotaPresenter.new(organization_quota, **presenter_args), status: :ok
6666
rescue OrganizationQuotasUpdate::Error => e
@@ -77,7 +77,7 @@ def destroy
7777
unprocessable!('This quota is applied to one or more organizations. Apply different quotas to those organizations before deleting.')
7878
end
7979

80-
delete_action = OrganizationQuotaDeleteAction.new
80+
delete_action = OrganizationQuotaDeleteAction.new(user_audit_info)
8181

8282
deletion_job = VCAP::CloudController::Jobs::DeleteActionJob.new(QuotaDefinition, organization_quota.guid, delete_action, 'organization_quota')
8383
pollable_job = Jobs::Enqueuer.new(queue: Jobs::Queues.generic).enqueue_pollable(deletion_job)
@@ -94,7 +94,7 @@ def apply_to_organizations
9494
organization_quota = QuotaDefinition.first(guid: hashed_params[:guid])
9595
resource_not_found!(:organization_quota) unless organization_quota
9696

97-
OrganizationQuotaApply.new.apply(organization_quota, message)
97+
OrganizationQuotaApply.new(user_audit_info).apply(organization_quota, message)
9898

9999
render status: :ok, json: Presenters::V3::ToManyRelationshipPresenter.new(
100100
"organization_quotas/#{organization_quota.guid}",

0 commit comments

Comments
 (0)