Skip to content

Commit 65e57c7

Browse files
authored
Merge pull request #116 from sapcc/fix-failed-create-uri
Fix audit target URI for failed create operations
2 parents 09a95b4 + 57a59a0 commit 65e57c7

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

auditmiddleware/_api.py

Lines changed: 18 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,16 @@ 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 = res_spec.type_uri
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+
686700
rid = _make_uuid(rid or res_parent_id or taxonomy.UNKNOWN)
687701
target = OpenStackResource(project_id=project_id, id=rid,
688702
typeURI=type_uri, name=name)

test-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ coverage!=4.4,>=4.0 # Apache-2.0
1111
fixtures>=3.0.0 # Apache-2.0/BSD
1212
mock>=3.0.0 # BSD
1313
oslotest>=3.8.0 # Apache-2.0
14-
pytz==2025.1 # MIT
14+
pytz>=2025.2 # MIT
1515
requests-mock>=1.2.0 # Apache-2.0
1616
#stevedore>=1.20.0 # Apache-2.0
1717
stestr>=2.0.0 # Apache-2.0

0 commit comments

Comments
 (0)