Skip to content

Commit b5126e2

Browse files
committed
Fix audit target URI for failed create operations
1 parent 09a95b4 commit b5126e2

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

auditmiddleware/_api.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,8 @@ def _create_event_from_payload(self, target_project, res_spec, res_id,
499499

500500
ev.target = self._create_target_resource(target_project, res_spec,
501501
res_id, res_parent_id,
502-
subpayload)
502+
request=request,
503+
payload=subpayload)
503504

504505
# extract custom attributes from the payload
505506
for attr, typeURI in res_spec.custom_attributes.items():
@@ -589,10 +590,13 @@ def _create_cadf_event(self, project, res_spec, res_id, res_parent_id,
589590
target = None
590591
if res_id or res_parent_id:
591592
target = self._create_target_resource(project, res_spec, res_id,
592-
res_parent_id, key=key)
593+
res_parent_id,
594+
request=request,
595+
key=key)
593596
else:
594597
target = self._create_target_resource(project, res_spec,
595598
None, self._service_id,
599+
request=request,
596600
key=key)
597601
target.name = self._service_name
598602

@@ -654,7 +658,8 @@ def _attach_payload(event, payload, res_spec):
654658
event.add_attachment(attach_val)
655659

656660
def _create_target_resource(self, target_project, res_spec, res_id,
657-
res_parent_id=None, payload=None, key=None):
661+
res_parent_id=None, request=None,
662+
payload=None, key=None):
658663
"""Build the event's target element from the payload."""
659664
self._log.debug("_create_target_resource: res_spec=%(res_spec)s, "
660665
"res_id=%(res_id)s, res_parent_id=%(res_parent_id)s",
@@ -682,7 +687,20 @@ def _create_target_resource(self, target_project, res_spec, res_id,
682687
payload,
683688
res_spec)
684689

685-
type_uri = res_spec.el_type_uri if rid else res_spec.type_uri
690+
type_uri = None
691+
if rid:
692+
# if we have a resource ID (from path or payload), use element URI
693+
type_uri = res_spec.el_type_uri or res_spec.type_uri
694+
elif request and request.method == 'POST' and not res_spec.singleton:
695+
# if it's a POST to a non-singleton resource
696+
# (even if failed, so no rid yet)
697+
# the intent is an element, so use element URI
698+
type_uri = res_spec.el_type_uri or res_spec.type_uri
699+
700+
# Fallback: If no specific logic applied, or if it's a singleton
701+
if type_uri is None:
702+
type_uri = res_spec.type_uri
703+
686704
rid = _make_uuid(rid or res_parent_id or taxonomy.UNKNOWN)
687705
target = OpenStackResource(project_id=project_id, id=rid,
688706
typeURI=type_uri, name=name)

0 commit comments

Comments
 (0)