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

Commit 31af9fd

Browse files
committed
apps: #show_env has audit event
The environment can contain sensitive information, access to sensitive information should be audited Signed-off-by: toby lorne <toby@toby.codes>
1 parent b04bd90 commit 31af9fd

3 files changed

Lines changed: 28 additions & 1 deletion

File tree

app/controllers/v3/apps_controller.rb

Lines changed: 3 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

app/repositories/app_event_repository.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,11 @@ 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+
158163
private
159164

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

spec/unit/controllers/v3/apps_controller_spec.rb

Lines changed: 20 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

0 commit comments

Comments
 (0)