|
| 1 | +require 'repositories/mixins/app_manifest_event_mixins' |
| 2 | + |
| 3 | +module VCAP::CloudController |
| 4 | + module Repositories |
| 5 | + class ServiceGenericBindingEventRepository |
| 6 | + include AppManifestEventMixins |
| 7 | + |
| 8 | + SERVICE_APP_CREDENTIAL_BINDING = 'service_binding'.freeze |
| 9 | + SERVICE_KEY_CREDENTIAL_BINDING = 'service_key'.freeze |
| 10 | + SERVICE_ROUTE_BINDING = 'service_route_binding'.freeze |
| 11 | + |
| 12 | + def initialize(actee_name) |
| 13 | + @actee_name = actee_name |
| 14 | + end |
| 15 | + |
| 16 | + def record_start_create(service_binding, user_audit_info, request, manifest_triggered: false) |
| 17 | + attrs = censor_request_attributes(request) |
| 18 | + |
| 19 | + record_event( |
| 20 | + type: "audit.#{@actee_name}.start_create", |
| 21 | + service_binding: service_binding, |
| 22 | + user_audit_info: user_audit_info, |
| 23 | + metadata: add_manifest_triggered(manifest_triggered, { request: attrs }) |
| 24 | + ) |
| 25 | + end |
| 26 | + |
| 27 | + def record_create(service_binding, user_audit_info, request, manifest_triggered: false) |
| 28 | + attrs = censor_request_attributes(request) |
| 29 | + |
| 30 | + record_event( |
| 31 | + type: "audit.#{@actee_name}.create", |
| 32 | + service_binding: service_binding, |
| 33 | + user_audit_info: user_audit_info, |
| 34 | + metadata: add_manifest_triggered(manifest_triggered, { request: attrs }) |
| 35 | + ) |
| 36 | + end |
| 37 | + |
| 38 | + def record_start_delete(service_binding, user_audit_info) |
| 39 | + record_event( |
| 40 | + type: "audit.#{@actee_name}.start_delete", |
| 41 | + service_binding: service_binding, |
| 42 | + user_audit_info: user_audit_info, |
| 43 | + metadata: { |
| 44 | + request: { |
| 45 | + app_guid: service_binding.try(:app_guid), |
| 46 | + route_guid: service_binding.try(:route_guid), |
| 47 | + service_instance_guid: service_binding.service_instance_guid, |
| 48 | + } |
| 49 | + } |
| 50 | + ) |
| 51 | + end |
| 52 | + |
| 53 | + def record_delete(service_binding, user_audit_info) |
| 54 | + record_event( |
| 55 | + type: "audit.#{@actee_name}.delete", |
| 56 | + service_binding: service_binding, |
| 57 | + user_audit_info: user_audit_info, |
| 58 | + metadata: { |
| 59 | + request: { |
| 60 | + app_guid: service_binding.try(:app_guid), |
| 61 | + route_guid: service_binding.try(:route_guid), |
| 62 | + service_instance_guid: service_binding.service_instance_guid, |
| 63 | + } |
| 64 | + } |
| 65 | + ) |
| 66 | + end |
| 67 | + |
| 68 | + private |
| 69 | + |
| 70 | + def censor_request_attributes(request) |
| 71 | + attrs = request.dup.stringify_keys |
| 72 | + attrs['data'] = Presenters::Censorship::PRIVATE_DATA_HIDDEN if attrs.key?('data') |
| 73 | + attrs |
| 74 | + end |
| 75 | + |
| 76 | + def record_event(type:, service_binding:, user_audit_info:, metadata: {}) |
| 77 | + space_guid = service_binding.service_instance.space.guid |
| 78 | + org_guid = service_binding.service_instance.space.organization.guid |
| 79 | + |
| 80 | + if service_binding.try(:space) |
| 81 | + space_guid = service_binding.space.guid |
| 82 | + org_guid = service_binding.space.organization.guid |
| 83 | + end |
| 84 | + |
| 85 | + Event.create( |
| 86 | + type: type, |
| 87 | + actor: user_audit_info.user_guid, |
| 88 | + actor_type: 'user', |
| 89 | + actor_name: user_audit_info.user_email, |
| 90 | + actor_username: user_audit_info.user_name, |
| 91 | + actee: service_binding.guid, |
| 92 | + actee_type: @actee_name, |
| 93 | + actee_name: service_binding.try(:name) || '', |
| 94 | + space_guid: space_guid, |
| 95 | + organization_guid: org_guid, |
| 96 | + timestamp: Sequel::CURRENT_TIMESTAMP, |
| 97 | + metadata: metadata |
| 98 | + ) |
| 99 | + end |
| 100 | + end |
| 101 | + end |
| 102 | +end |
0 commit comments