Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit 3dc80fe

Browse files
authored
Merge pull request cloudfoundry#1787 from tlwr/main
Add audit events for Apps#show_env and Revisions#show_environment_variables [Finishes #174330630]
2 parents ee7d6a6 + c22a490 commit 3dc80fe

6 files changed

Lines changed: 101 additions & 2 deletions

File tree

app/controllers/v3/apps_controller.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
require 'fetchers/app_fetcher'
3333
require 'fetchers/app_delete_fetcher'
3434
require 'fetchers/assign_current_droplet_fetcher'
35+
require 'repositories/app_event_repository'
3536

3637
class AppsV3Controller < ApplicationController
3738
def index
@@ -245,6 +246,8 @@ def show_env
245246

246247
FeatureFlag.raise_unless_enabled!(:space_developer_env_var_visibility)
247248

249+
Repositories::AppEventRepository.new.record_app_show_env(app, user_audit_info)
250+
248251
render status: :ok, json: Presenters::V3::AppEnvPresenter.new(app)
249252
end
250253

@@ -258,6 +261,8 @@ def show_environment_variables
258261

259262
FeatureFlag.raise_unless_enabled!(:space_developer_env_var_visibility)
260263

264+
Repositories::AppEventRepository.new.record_app_show_environment_variables(app, user_audit_info)
265+
261266
render status: :ok, json: Presenters::V3::AppEnvironmentVariablesPresenter.new(app)
262267
end
263268

app/controllers/v3/revisions_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
require 'actions/revisions_update'
33
require 'presenters/v3/revision_presenter'
44
require 'presenters/v3/revision_environment_variables_presenter'
5+
require 'repositories/revision_event_repository'
56

67
class RevisionsController < ApplicationController
78
def show
@@ -22,6 +23,7 @@ def update
2223

2324
def show_environment_variables
2425
revision = fetch_revision(hashed_params[:revision_guid], needs_secrets_read_permission: true)
26+
Repositories::RevisionEventRepository.record_show_environment_variables(revision, revision.app, user_audit_info)
2527
render status: :ok, json: Presenters::V3::RevisionEnvironmentVariablesPresenter.new(revision)
2628
end
2729

app/repositories/app_event_repository.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ def record_app_ssh_authorized(app, user_audit_info, index)
155155
create_app_audit_event('audit.app.ssh-authorized', app, app.space, actor_hash, { index: index })
156156
end
157157

158+
def record_app_show_env(app, user_audit_info)
159+
actor_hash = { name: user_audit_info.user_email, guid: user_audit_info.user_guid, user_name: user_audit_info.user_name, type: 'user' }
160+
create_app_audit_event('audit.app.environment.show', app, app.space, actor_hash, {})
161+
end
162+
163+
def record_app_show_environment_variables(app, user_audit_info)
164+
actor_hash = { name: user_audit_info.user_email, guid: user_audit_info.user_guid, user_name: user_audit_info.user_name, type: 'user' }
165+
create_app_audit_event('audit.app.environment_variables.show', app, app.space, actor_hash, {})
166+
end
167+
158168
private
159169

160170
def create_app_audit_event(type, app, space, actor, metadata)

app/repositories/revision_event_repository.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,26 @@ def self.record_create(revision, app, user_audit_info)
2222
organization_guid: app.space.organization_guid,
2323
)
2424
end
25+
26+
def self.record_show_environment_variables(revision, app, user_audit_info)
27+
Event.create(
28+
type: 'audit.app.revision.environment_variables.show',
29+
actor: user_audit_info.user_guid,
30+
actor_type: 'user',
31+
actor_name: user_audit_info.user_email,
32+
actor_username: user_audit_info.user_name,
33+
actee: app.guid,
34+
actee_type: 'app',
35+
actee_name: app.name,
36+
timestamp: Sequel::CURRENT_TIMESTAMP,
37+
metadata: {
38+
revision_guid: revision.guid,
39+
revision_version: revision.version
40+
},
41+
space_guid: app.space_guid,
42+
organization_guid: app.space.organization_guid,
43+
)
44+
end
2545
end
2646
end
2747
end

spec/unit/controllers/v3/apps_controller_spec.rb

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1718,7 +1718,7 @@
17181718
let(:user) { VCAP::CloudController::User.make }
17191719

17201720
before do
1721-
set_current_user(user)
1721+
set_current_user(user, email: 'mona@example.com')
17221722
allow_user_read_access_for(user, spaces: [space])
17231723
allow_user_write_access(user, space: space)
17241724
allow_user_secret_access(user, space: space)
@@ -1732,6 +1732,25 @@
17321732
expect(parsed_body['environment_variables']).to eq(app_model.environment_variables)
17331733
end
17341734

1735+
it 'records an audit event' do
1736+
expect {
1737+
get :show_env, params: { guid: app_model.guid }
1738+
}.to change { VCAP::CloudController::Event.count }.by(1)
1739+
1740+
event = VCAP::CloudController::Event.find(type: 'audit.app.environment.show')
1741+
expect(event).not_to be_nil
1742+
expect(event.actor).to eq(user.guid)
1743+
expect(event.actor_type).to eq('user')
1744+
expect(event.actor_name).to eq('mona@example.com')
1745+
expect(event.actee).to eq(app_model.guid)
1746+
expect(event.actee_type).to eq('app')
1747+
expect(event.actee_name).to eq(app_model.name)
1748+
expect(event.timestamp).to be
1749+
expect(event.space_guid).to eq(app_model.space_guid)
1750+
expect(event.organization_guid).to eq(app_model.space.organization.guid)
1751+
expect(event.metadata).to eq({})
1752+
end
1753+
17351754
context 'permissions' do
17361755
context 'when the user does not have read permissions' do
17371756
before do
@@ -1977,6 +1996,27 @@
19771996
})
19781997
end
19791998
end
1999+
2000+
it 'records an audit event' do
2001+
set_current_user_as_admin(user: user, email: 'mona@example.com')
2002+
2003+
expect {
2004+
get :show_environment_variables, params: { guid: app_model.guid }, as: :json
2005+
}.to change { VCAP::CloudController::Event.count }.by(1)
2006+
2007+
event = VCAP::CloudController::Event.find(type: 'audit.app.environment_variables.show')
2008+
expect(event).not_to be_nil
2009+
expect(event.actor).to eq(user.guid)
2010+
expect(event.actor_type).to eq('user')
2011+
expect(event.actor_name).to eq('mona@example.com')
2012+
expect(event.actee).to eq(app_model.guid)
2013+
expect(event.actee_type).to eq('app')
2014+
expect(event.actee_name).to eq(app_model.name)
2015+
expect(event.timestamp).to be
2016+
expect(event.space_guid).to eq(app_model.space_guid)
2017+
expect(event.organization_guid).to eq(app_model.space.organization.guid)
2018+
expect(event.metadata).to eq({})
2019+
end
19802020
end
19812021

19822022
describe '#update_environment_variables' do

spec/unit/controllers/v3/revisions_controller_spec.rb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@
343343
}
344344

345345
before do
346-
set_current_user(user)
346+
set_current_user(user, email: 'mona@example.com')
347347
allow_user_read_access_for(user, spaces: [space])
348348
allow_user_secret_access(user, space: space)
349349
end
@@ -355,6 +355,28 @@
355355
expect(parsed_body['var']).to eq({ 'key' => 'value' })
356356
end
357357

358+
it 'records an audit event' do
359+
expect {
360+
get :show_environment_variables, params: { revision_guid: revision.guid }
361+
}.to change { VCAP::CloudController::Event.count }.by(1)
362+
363+
event = VCAP::CloudController::Event.find(type: 'audit.app.revision.environment_variables.show')
364+
expect(event).not_to be_nil
365+
expect(event.actor).to eq(user.guid)
366+
expect(event.actor_type).to eq('user')
367+
expect(event.actor_name).to eq('mona@example.com')
368+
expect(event.actee).to eq(app_model.guid)
369+
expect(event.actee_type).to eq('app')
370+
expect(event.actee_name).to eq(app_model.name)
371+
expect(event.timestamp).to be
372+
expect(event.space_guid).to eq(app_model.space_guid)
373+
expect(event.organization_guid).to eq(app_model.space.organization.guid)
374+
expect(event.metadata).to eq({
375+
'revision_guid' => revision.guid,
376+
'revision_version' => revision.version,
377+
})
378+
end
379+
358380
context 'when retrieving env variables for revision that do not exist' do
359381
it '404s' do
360382
get :show_environment_variables, params: { revision_guid: 'nonsense' }

0 commit comments

Comments
 (0)