Search in sources :

Example 21 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class WfTestUtil method checkWfProcessAuditRecords.

public static void checkWfProcessAuditRecords(Map<String, WorkflowResult> expectedResults, DummyAuditService dummyAuditService) {
    List<AuditEventRecord> records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE);
    assertEquals("Unexpected number of workflow process instance audit records", expectedResults.size() * 2, records.size());
    for (AuditEventRecord record : records) {
        if (record.getEventStage() != AuditEventStage.EXECUTION) {
            continue;
        }
        Set<AuditReferenceValue> targetRef = record.getReferenceValues(AuditingConstants.AUDIT_TARGET);
        assertEquals("Wrong # of targetRef values in " + record.debugDump(), 1, targetRef.size());
        String oid = targetRef.iterator().next().getOid();
        assertTrue("Unexpected role to approve: " + oid, expectedResults.containsKey(oid));
        assertEquals("Unexpected result for " + oid + ": " + record.getResult(), expectedResults.get(oid), WorkflowResult.fromNiceWfAnswer(record.getResult()));
        if (expectedResults.get(oid) == WorkflowResult.APPROVED) {
            assertEquals("Wrong # of deltas in " + record.debugDump(), 1, record.getDeltas().size());
        }
    }
}
Also used : AuditReferenceValue(com.evolveum.midpoint.audit.api.AuditReferenceValue) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord)

Example 22 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class WfTestUtil method checkWorkItemAuditRecords.

public static void checkWorkItemAuditRecords(Map<String, WorkflowResult> expectedResults, DummyAuditService dummyAuditService) {
    List<AuditEventRecord> workItemRecords = dummyAuditService.getRecordsOfType(AuditEventType.WORK_ITEM);
    assertEquals("Unexpected number of work item audit records", expectedResults.size() * 2, workItemRecords.size());
    for (AuditEventRecord record : workItemRecords) {
        if (record.getEventStage() != AuditEventStage.EXECUTION) {
            continue;
        }
        if (record.getDeltas().size() != 1) {
            System.out.println("Record:\n" + record.debugDump());
            fail("Wrong # of deltas in work item audit record: " + record.getDeltas().size());
        }
        ObjectDelta<? extends ObjectType> delta = record.getDeltas().iterator().next().getObjectDelta();
        Containerable valueToAdd = ((PrismContainerValue) delta.getModifications().iterator().next().getValuesToAdd().iterator().next()).asContainerable();
        String oid;
        if (valueToAdd instanceof AssignmentType) {
            oid = ((AssignmentType) valueToAdd).getTargetRef().getOid();
        } else if (valueToAdd instanceof ShadowAssociationType) {
            oid = ((ShadowAssociationType) valueToAdd).getShadowRef().getOid();
        } else {
            continue;
        }
        assertTrue("Unexpected target to approve: " + oid, expectedResults.containsKey(oid));
        assertEquals("Unexpected result for " + oid + ": " + record.getResult(), expectedResults.get(oid), WorkflowResult.fromNiceWfAnswer(record.getResult()));
    }
}
Also used : PrismContainerValue(com.evolveum.midpoint.prism.PrismContainerValue) AssignmentType(com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType) Containerable(com.evolveum.midpoint.prism.Containerable) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) ShadowAssociationType(com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowAssociationType)

Example 23 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class ModelController method auditTaskOperation.

private void auditTaskOperation(PrismReferenceValue taskRef, AuditEventType event, AuditEventStage stage, Task operationTask, OperationResult parentResult, @Nullable OperationResult taskOperationResult) {
    AuditEventRecord auditRecord = new AuditEventRecord(event, stage);
    String requestIdentifier = ModelImplUtils.generateRequestIdentifier();
    auditRecord.setRequestIdentifier(requestIdentifier);
    auditRecord.setTargetRef(taskRef);
    ObjectDelta<TaskType> delta;
    if (AuditEventType.DELETE_OBJECT == event) {
        delta = prismContext.deltaFactory().object().createDeleteDelta(TaskType.class, taskRef.getOid());
    } else {
        // TODO should we somehow indicate deltas which are executed in taskManager?
        delta = prismContext.deltaFactory().object().createEmptyModifyDelta(TaskType.class, taskRef.getOid());
    }
    ObjectDeltaOperation<TaskType> odo = new ObjectDeltaOperation<>(delta, taskOperationResult);
    auditRecord.addDelta(odo);
    if (taskOperationResult != null) {
        // for EXECUTION stage
        auditRecord.setOutcome(taskOperationResult.getStatus());
    }
    auditHelper.audit(auditRecord, null, operationTask, parentResult);
}
Also used : PolyString(com.evolveum.midpoint.prism.polystring.PolyString) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord)

Example 24 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class ModelController method executeChangesRaw.

private Collection<ObjectDeltaOperation<? extends ObjectType>> executeChangesRaw(Collection<ObjectDelta<? extends ObjectType>> deltas, ModelExecuteOptions options, Task task, OperationResult result) throws ExpressionEvaluationException, PolicyViolationException, SecurityViolationException, SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException {
    String requestIdentifier = ModelImplUtils.generateRequestIdentifier();
    PrismReferenceValue targetRef = ModelImplUtils.determineAuditTarget(deltas, prismContext);
    AuditEventRecord auditRecordRequest = createAuditEventRecordRaw(AuditEventStage.REQUEST, requestIdentifier, targetRef, ObjectDeltaOperation.cloneDeltaCollection(deltas));
    // we don't know auxiliary information (resource, objectName) at this moment -- so we do nothing
    ExpressionType eventRecordingExpression = null;
    PrismObject<SystemConfigurationType> config = systemObjectCache.getSystemConfiguration(result);
    if (config != null && config.asObjectable().getAudit() != null && config.asObjectable().getAudit().getEventRecording() != null) {
        SystemConfigurationAuditEventRecordingType eventRecording = config.asObjectable().getAudit().getEventRecording();
        eventRecordingExpression = eventRecording.getExpression();
    }
    if (eventRecordingExpression != null) {
        // MID-6839
        auditRecordRequest = auditHelper.evaluateRecordingExpression(eventRecordingExpression, auditRecordRequest, null, null, task, result);
    }
    if (auditRecordRequest != null) {
        auditHelper.audit(auditRecordRequest, null, task, result);
    }
    Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = new ArrayList<>();
    try {
        for (ObjectDelta<? extends ObjectType> delta : deltas) {
            executeChangeRaw(executedDeltas, delta, options, task, result);
        }
        return executedDeltas;
    } catch (Throwable t) {
        result.recordFatalError(t);
        throw t;
    } finally {
        cleanupOperationResult(result);
        AuditEventRecord auditRecordExecution = createAuditEventRecordRaw(AuditEventStage.EXECUTION, requestIdentifier, targetRef, executedDeltas);
        auditRecordExecution.setTimestamp(System.currentTimeMillis());
        auditRecordExecution.setOutcome(result.getStatus());
        if (eventRecordingExpression != null) {
            // MID-6839
            auditRecordExecution = auditHelper.evaluateRecordingExpression(eventRecordingExpression, auditRecordExecution, null, null, task, result);
        }
        if (auditRecordExecution != null) {
            auditHelper.audit(auditRecordExecution, null, task, result);
        }
    }
}
Also used : PolyString(com.evolveum.midpoint.prism.polystring.PolyString) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) ScriptingExpressionType(com.evolveum.midpoint.xml.ns._public.model.scripting_3.ScriptingExpressionType)

Example 25 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class ModelController method createAuditEventRecordRaw.

private AuditEventRecord createAuditEventRecordRaw(AuditEventStage stage, String requestIdentifier, PrismReferenceValue targetRef, Collection<ObjectDeltaOperation<? extends ObjectType>> deltas) {
    AuditEventRecord auditRecord = new AuditEventRecord(AuditEventType.EXECUTE_CHANGES_RAW, stage);
    auditRecord.setRequestIdentifier(requestIdentifier);
    auditRecord.setTargetRef(targetRef);
    auditRecord.addDeltas(deltas);
    return auditRecord;
}
Also used : AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord)

Aggregations

AuditEventRecord (com.evolveum.midpoint.audit.api.AuditEventRecord)83 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)28 Task (com.evolveum.midpoint.task.api.Task)18 Test (org.testng.annotations.Test)18 ObjectDeltaOperation (com.evolveum.midpoint.schema.ObjectDeltaOperation)11 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)9 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)8 PrismObject (com.evolveum.midpoint.prism.PrismObject)7 ObjectType (com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType)6 ArrayList (java.util.ArrayList)6 MidPointPrincipal (com.evolveum.midpoint.security.api.MidPointPrincipal)5 NullTaskImpl (com.evolveum.midpoint.task.api.test.NullTaskImpl)5 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)4 MAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord)4 AuditResultHandler (com.evolveum.midpoint.audit.api.AuditResultHandler)3 MidpointAuthentication (com.evolveum.midpoint.authentication.api.config.MidpointAuthentication)3 Message (com.evolveum.midpoint.notifications.api.transports.Message)3 QAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.querymodel.QAuditEventRecord)3 ObjectNotFoundException (com.evolveum.midpoint.util.exception.ObjectNotFoundException)3 AuditEventRecordType (com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType)3